First commit after changing to Python 3.1.

Sat, 02 Jan 2010 15:11:35 +0000

author
Detlev Offenbach <detlev@die-offenbachs.de>
date
Sat, 02 Jan 2010 15:11:35 +0000
changeset 12
1d8dd9706f46
parent 11
b0996e4a289e
child 13
1af94a91f439

First commit after changing to Python 3.1.

APIs/Python/eric4.api file | annotate | diff | comparison | revisions
DataViews/CodeMetrics.py file | annotate | diff | comparison | revisions
DataViews/CodeMetricsDialog.py file | annotate | diff | comparison | revisions
DataViews/PyCoverageDialog.py file | annotate | diff | comparison | revisions
DataViews/PyProfileDialog.py file | annotate | diff | comparison | revisions
DebugClients/Python3/DebugBase.py file | annotate | diff | comparison | revisions
DebugClients/Python3/DebugClientBase.py file | annotate | diff | comparison | revisions
Debugger/BreakPointViewer.py file | annotate | diff | comparison | revisions
Debugger/DebugServer.py file | annotate | diff | comparison | revisions
Debugger/DebugUI.py file | annotate | diff | comparison | revisions
Debugger/DebugViewer.py file | annotate | diff | comparison | revisions
Debugger/DebuggerInterfacePython.py file | annotate | diff | comparison | revisions
Debugger/DebuggerInterfacePython3.py file | annotate | diff | comparison | revisions
Debugger/DebuggerInterfaceRuby.py file | annotate | diff | comparison | revisions
Debugger/EditBreakpointDialog.py file | annotate | diff | comparison | revisions
Debugger/EditWatchpointDialog.py file | annotate | diff | comparison | revisions
Debugger/ExceptionsFilterDialog.py file | annotate | diff | comparison | revisions
Debugger/StartDialog.py file | annotate | diff | comparison | revisions
Debugger/VariableDetailDialog.py file | annotate | diff | comparison | revisions
Debugger/VariablesFilterDialog.py file | annotate | diff | comparison | revisions
Debugger/VariablesViewer.py file | annotate | diff | comparison | revisions
Debugger/WatchPointViewer.py file | annotate | diff | comparison | revisions
DocumentationTools/APIGenerator.py file | annotate | diff | comparison | revisions
DocumentationTools/IndexGenerator.py file | annotate | diff | comparison | revisions
DocumentationTools/ModuleDocumentor.py file | annotate | diff | comparison | revisions
E4Graphics/E4GraphicsView.py file | annotate | diff | comparison | revisions
E4Gui/E4Action.py file | annotate | diff | comparison | revisions
E4Gui/E4Application.py file | annotate | diff | comparison | revisions
E4Gui/E4ModelToolBar.py file | annotate | diff | comparison | revisions
E4Gui/E4ToolBarDialog.py file | annotate | diff | comparison | revisions
E4Gui/E4ToolBarManager.py file | annotate | diff | comparison | revisions
E4Gui/E4ToolBox.py file | annotate | diff | comparison | revisions
E4Network/E4NetworkHeaderDetailsDialog.py file | annotate | diff | comparison | revisions
E4Network/E4NetworkMonitor.py file | annotate | diff | comparison | revisions
E4XML/DebuggerPropertiesHandler.py file | annotate | diff | comparison | revisions
E4XML/DebuggerPropertiesWriter.py file | annotate | diff | comparison | revisions
E4XML/HighlightingStylesHandler.py file | annotate | diff | comparison | revisions
E4XML/HighlightingStylesWriter.py file | annotate | diff | comparison | revisions
E4XML/MultiProjectHandler.py file | annotate | diff | comparison | revisions
E4XML/MultiProjectWriter.py file | annotate | diff | comparison | revisions
E4XML/PluginRepositoryHandler.py file | annotate | diff | comparison | revisions
E4XML/ProjectHandler.py file | annotate | diff | comparison | revisions
E4XML/ProjectWriter.py file | annotate | diff | comparison | revisions
E4XML/SessionHandler.py file | annotate | diff | comparison | revisions
E4XML/SessionWriter.py file | annotate | diff | comparison | revisions
E4XML/ShortcutsHandler.py file | annotate | diff | comparison | revisions
E4XML/ShortcutsWriter.py file | annotate | diff | comparison | revisions
E4XML/TasksHandler.py file | annotate | diff | comparison | revisions
E4XML/TasksWriter.py file | annotate | diff | comparison | revisions
E4XML/TemplatesHandler.py file | annotate | diff | comparison | revisions
E4XML/TemplatesWriter.py file | annotate | diff | comparison | revisions
E4XML/UserProjectHandler.py file | annotate | diff | comparison | revisions
E4XML/UserProjectWriter.py file | annotate | diff | comparison | revisions
E4XML/XMLErrorHandler.py file | annotate | diff | comparison | revisions
E4XML/XMLHandlerBase.py file | annotate | diff | comparison | revisions
E4XML/XMLMessageDialog.py file | annotate | diff | comparison | revisions
E4XML/XMLWriterBase.py file | annotate | diff | comparison | revisions
Examples/hallo.py file | annotate | diff | comparison | revisions
Examples/rhallo.py file | annotate | diff | comparison | revisions
Graphics/ApplicationDiagram.py file | annotate | diff | comparison | revisions
Graphics/ClassItem.py file | annotate | diff | comparison | revisions
Graphics/GraphicsUtilities.py file | annotate | diff | comparison | revisions
Graphics/ImportsDiagram.py file | annotate | diff | comparison | revisions
Graphics/ModuleItem.py file | annotate | diff | comparison | revisions
Graphics/PackageDiagram.py file | annotate | diff | comparison | revisions
Graphics/PackageItem.py file | annotate | diff | comparison | revisions
Graphics/PixmapDiagram.py file | annotate | diff | comparison | revisions
Graphics/SvgDiagram.py file | annotate | diff | comparison | revisions
Graphics/UMLClassDiagram.py file | annotate | diff | comparison | revisions
Graphics/UMLDialog.py file | annotate | diff | comparison | revisions
Graphics/UMLGraphicsView.py file | annotate | diff | comparison | revisions
Graphics/UMLSceneSizeDialog.py file | annotate | diff | comparison | revisions
Graphics/ZoomDialog.py file | annotate | diff | comparison | revisions
Helpviewer/AdBlock/AdBlockAccessHandler.py file | annotate | diff | comparison | revisions
Helpviewer/AdBlock/AdBlockDialog.py file | annotate | diff | comparison | revisions
Helpviewer/AdBlock/AdBlockManager.py file | annotate | diff | comparison | revisions
Helpviewer/AdBlock/AdBlockModel.py file | annotate | diff | comparison | revisions
Helpviewer/AdBlock/AdBlockNetwork.py file | annotate | diff | comparison | revisions
Helpviewer/AdBlock/AdBlockSubscription.py file | annotate | diff | comparison | revisions
Helpviewer/Bookmarks/AddBookmarkDialog.py file | annotate | diff | comparison | revisions
Helpviewer/Bookmarks/BookmarksDialog.py file | annotate | diff | comparison | revisions
Helpviewer/Bookmarks/BookmarksManager.py file | annotate | diff | comparison | revisions
Helpviewer/Bookmarks/BookmarksMenu.py file | annotate | diff | comparison | revisions
Helpviewer/Bookmarks/BookmarksModel.py file | annotate | diff | comparison | revisions
Helpviewer/Bookmarks/BookmarksToolBar.py file | annotate | diff | comparison | revisions
Helpviewer/Bookmarks/XbelReader.py file | annotate | diff | comparison | revisions
Helpviewer/Bookmarks/XbelWriter.py file | annotate | diff | comparison | revisions
Helpviewer/CookieJar/CookieDetailsDialog.py file | annotate | diff | comparison | revisions
Helpviewer/CookieJar/CookieExceptionsModel.py file | annotate | diff | comparison | revisions
Helpviewer/CookieJar/CookieModel.py file | annotate | diff | comparison | revisions
Helpviewer/CookieJar/CookiesConfigurationDialog.py file | annotate | diff | comparison | revisions
Helpviewer/CookieJar/CookiesDialog.py file | annotate | diff | comparison | revisions
Helpviewer/CookieJar/CookiesExceptionsDialog.py file | annotate | diff | comparison | revisions
Helpviewer/DownloadDialog.py file | annotate | diff | comparison | revisions
Helpviewer/HelpBrowserWV.py file | annotate | diff | comparison | revisions
Helpviewer/HelpClearPrivateDataDialog.py file | annotate | diff | comparison | revisions
Helpviewer/HelpIndexWidget.py file | annotate | diff | comparison | revisions
Helpviewer/HelpLanguagesDialog.py file | annotate | diff | comparison | revisions
Helpviewer/HelpTopicDialog.py file | annotate | diff | comparison | revisions
Helpviewer/HelpWebSearchWidget.py file | annotate | diff | comparison | revisions
Helpviewer/HelpWindow.py file | annotate | diff | comparison | revisions
Helpviewer/History/HistoryCompleter.py file | annotate | diff | comparison | revisions
Helpviewer/History/HistoryDialog.py file | annotate | diff | comparison | revisions
Helpviewer/History/HistoryFilterModel.py file | annotate | diff | comparison | revisions
Helpviewer/History/HistoryManager.py file | annotate | diff | comparison | revisions
Helpviewer/History/HistoryMenu.py file | annotate | diff | comparison | revisions
Helpviewer/History/HistoryTreeModel.py file | annotate | diff | comparison | revisions
Helpviewer/Network/AboutAccessHandler.py file | annotate | diff | comparison | revisions
Helpviewer/Network/NetworkAccessManager.py file | annotate | diff | comparison | revisions
Helpviewer/Network/NetworkReply.py file | annotate | diff | comparison | revisions
Helpviewer/Network/PyrcAccessHandler.py file | annotate | diff | comparison | revisions
Helpviewer/Network/QtHelpAccessHandler.py file | annotate | diff | comparison | revisions
Helpviewer/OpenSearch/OpenSearchDialog.py file | annotate | diff | comparison | revisions
Helpviewer/OpenSearch/OpenSearchEditDialog.py file | annotate | diff | comparison | revisions
Helpviewer/OpenSearch/OpenSearchEngine.py file | annotate | diff | comparison | revisions
Helpviewer/OpenSearch/OpenSearchManager.py file | annotate | diff | comparison | revisions
Helpviewer/OpenSearch/OpenSearchReader.py file | annotate | diff | comparison | revisions
Helpviewer/Passwords/PasswordManager.py file | annotate | diff | comparison | revisions
Helpviewer/Passwords/PasswordsDialog.py file | annotate | diff | comparison | revisions
Helpviewer/QtHelpDocumentationDialog.py file | annotate | diff | comparison | revisions
Helpviewer/QtHelpFiltersDialog.py file | annotate | diff | comparison | revisions
Helpviewer/SearchWidget.py file | annotate | diff | comparison | revisions
IconEditor/IconEditorGrid.py file | annotate | diff | comparison | revisions
IconEditor/IconEditorWindow.py file | annotate | diff | comparison | revisions
IconEditor/IconSizeDialog.py file | annotate | diff | comparison | revisions
IconEditor/IconZoomDialog.py file | annotate | diff | comparison | revisions
IconEditor/cursors/cursors_rc.py file | annotate | diff | comparison | revisions
MultiProject/AddProjectDialog.py file | annotate | diff | comparison | revisions
MultiProject/MultiProject.py file | annotate | diff | comparison | revisions
MultiProject/MultiProjectBrowser.py file | annotate | diff | comparison | revisions
MultiProject/PropertiesDialog.py file | annotate | diff | comparison | revisions
PluginManager/PluginDetailsDialog.py file | annotate | diff | comparison | revisions
PluginManager/PluginExceptions.py file | annotate | diff | comparison | revisions
PluginManager/PluginInfoDialog.py file | annotate | diff | comparison | revisions
PluginManager/PluginInstallDialog.py file | annotate | diff | comparison | revisions
PluginManager/PluginManager.py file | annotate | diff | comparison | revisions
PluginManager/PluginRepositoryDialog.py file | annotate | diff | comparison | revisions
PluginManager/PluginUninstallDialog.py file | annotate | diff | comparison | revisions
Plugins/AboutPlugin/AboutDialog.py file | annotate | diff | comparison | revisions
Plugins/CheckerPlugins/SyntaxChecker/SyntaxCheckerDialog.py file | annotate | diff | comparison | revisions
Plugins/CheckerPlugins/Tabnanny/Tabnanny.py file | annotate | diff | comparison | revisions
Plugins/CheckerPlugins/Tabnanny/TabnannyDialog.py file | annotate | diff | comparison | revisions
Plugins/DocumentationPlugins/Ericapi/EricapiConfigDialog.py file | annotate | diff | comparison | revisions
Plugins/DocumentationPlugins/Ericapi/EricapiExecDialog.py file | annotate | diff | comparison | revisions
Plugins/DocumentationPlugins/Ericdoc/EricdocConfigDialog.py file | annotate | diff | comparison | revisions
Plugins/DocumentationPlugins/Ericdoc/EricdocExecDialog.py file | annotate | diff | comparison | revisions
Plugins/PluginSyntaxChecker.py file | annotate | diff | comparison | revisions
Plugins/PluginTabnanny.py file | annotate | diff | comparison | revisions
Plugins/VcsPlugins/vcsPySvn/ConfigurationPage/SubversionPage.py file | annotate | diff | comparison | revisions
Plugins/VcsPlugins/vcsPySvn/SvnBlameDialog.py file | annotate | diff | comparison | revisions
Plugins/VcsPlugins/vcsPySvn/SvnCommandDialog.py file | annotate | diff | comparison | revisions
Plugins/VcsPlugins/vcsPySvn/SvnCommitDialog.py file | annotate | diff | comparison | revisions
Plugins/VcsPlugins/vcsPySvn/SvnCopyDialog.py file | annotate | diff | comparison | revisions
Plugins/VcsPlugins/vcsPySvn/SvnDialog.py file | annotate | diff | comparison | revisions
Plugins/VcsPlugins/vcsPySvn/SvnDialogMixin.py file | annotate | diff | comparison | revisions
Plugins/VcsPlugins/vcsPySvn/SvnDiffDialog.py file | annotate | diff | comparison | revisions
Plugins/VcsPlugins/vcsPySvn/SvnInfoDialog.py file | annotate | diff | comparison | revisions
Plugins/VcsPlugins/vcsPySvn/SvnLogBrowserDialog.py file | annotate | diff | comparison | revisions
Plugins/VcsPlugins/vcsPySvn/SvnLogDialog.py file | annotate | diff | comparison | revisions
Plugins/VcsPlugins/vcsPySvn/SvnLoginDialog.py file | annotate | diff | comparison | revisions
Plugins/VcsPlugins/vcsPySvn/SvnMergeDialog.py file | annotate | diff | comparison | revisions
Plugins/VcsPlugins/vcsPySvn/SvnNewProjectOptionsDialog.py file | annotate | diff | comparison | revisions
Plugins/VcsPlugins/vcsPySvn/SvnOptionsDialog.py file | annotate | diff | comparison | revisions
Plugins/VcsPlugins/vcsPySvn/SvnPropDelDialog.py file | annotate | diff | comparison | revisions
Plugins/VcsPlugins/vcsPySvn/SvnPropListDialog.py file | annotate | diff | comparison | revisions
Plugins/VcsPlugins/vcsPySvn/SvnPropSetDialog.py file | annotate | diff | comparison | revisions
Plugins/VcsPlugins/vcsPySvn/SvnRelocateDialog.py file | annotate | diff | comparison | revisions
Plugins/VcsPlugins/vcsPySvn/SvnRepoBrowserDialog.py file | annotate | diff | comparison | revisions
Plugins/VcsPlugins/vcsPySvn/SvnRevisionSelectionDialog.py file | annotate | diff | comparison | revisions
Plugins/VcsPlugins/vcsPySvn/SvnStatusDialog.py file | annotate | diff | comparison | revisions
Plugins/VcsPlugins/vcsPySvn/SvnStatusMonitorThread.py file | annotate | diff | comparison | revisions
Plugins/VcsPlugins/vcsPySvn/SvnSwitchDialog.py file | annotate | diff | comparison | revisions
Plugins/VcsPlugins/vcsPySvn/SvnTagBranchListDialog.py file | annotate | diff | comparison | revisions
Plugins/VcsPlugins/vcsPySvn/SvnTagDialog.py file | annotate | diff | comparison | revisions
Plugins/VcsPlugins/vcsPySvn/SvnUrlSelectionDialog.py file | annotate | diff | comparison | revisions
Plugins/VcsPlugins/vcsPySvn/SvnUtilities.py file | annotate | diff | comparison | revisions
Plugins/VcsPlugins/vcsPySvn/subversion.py file | annotate | diff | comparison | revisions
Plugins/VcsPlugins/vcsSubversion/ConfigurationPage/SubversionPage.py file | annotate | diff | comparison | revisions
Plugins/VcsPlugins/vcsSubversion/SvnBlameDialog.py file | annotate | diff | comparison | revisions
Plugins/VcsPlugins/vcsSubversion/SvnCommandDialog.py file | annotate | diff | comparison | revisions
Plugins/VcsPlugins/vcsSubversion/SvnCommitDialog.py file | annotate | diff | comparison | revisions
Plugins/VcsPlugins/vcsSubversion/SvnCopyDialog.py file | annotate | diff | comparison | revisions
Plugins/VcsPlugins/vcsSubversion/SvnDialog.py file | annotate | diff | comparison | revisions
Plugins/VcsPlugins/vcsSubversion/SvnDiffDialog.py file | annotate | diff | comparison | revisions
Plugins/VcsPlugins/vcsSubversion/SvnLogBrowserDialog.py file | annotate | diff | comparison | revisions
Plugins/VcsPlugins/vcsSubversion/SvnLogDialog.py file | annotate | diff | comparison | revisions
Plugins/VcsPlugins/vcsSubversion/SvnMergeDialog.py file | annotate | diff | comparison | revisions
Plugins/VcsPlugins/vcsSubversion/SvnNewProjectOptionsDialog.py file | annotate | diff | comparison | revisions
Plugins/VcsPlugins/vcsSubversion/SvnOptionsDialog.py file | annotate | diff | comparison | revisions
Plugins/VcsPlugins/vcsSubversion/SvnPropListDialog.py file | annotate | diff | comparison | revisions
Plugins/VcsPlugins/vcsSubversion/SvnPropSetDialog.py file | annotate | diff | comparison | revisions
Plugins/VcsPlugins/vcsSubversion/SvnRelocateDialog.py file | annotate | diff | comparison | revisions
Plugins/VcsPlugins/vcsSubversion/SvnRepoBrowserDialog.py file | annotate | diff | comparison | revisions
Plugins/VcsPlugins/vcsSubversion/SvnRevisionSelectionDialog.py file | annotate | diff | comparison | revisions
Plugins/VcsPlugins/vcsSubversion/SvnStatusDialog.py file | annotate | diff | comparison | revisions
Plugins/VcsPlugins/vcsSubversion/SvnStatusMonitorThread.py file | annotate | diff | comparison | revisions
Plugins/VcsPlugins/vcsSubversion/SvnSwitchDialog.py file | annotate | diff | comparison | revisions
Plugins/VcsPlugins/vcsSubversion/SvnTagBranchListDialog.py file | annotate | diff | comparison | revisions
Plugins/VcsPlugins/vcsSubversion/SvnTagDialog.py file | annotate | diff | comparison | revisions
Plugins/VcsPlugins/vcsSubversion/SvnUrlSelectionDialog.py file | annotate | diff | comparison | revisions
Plugins/VcsPlugins/vcsSubversion/subversion.py file | annotate | diff | comparison | revisions
Plugins/ViewManagerPlugins/Tabview/Tabview.py file | annotate | diff | comparison | revisions
Plugins/WizardPlugins/ColorDialogWizard/ColorDialogWizardDialog.py file | annotate | diff | comparison | revisions
Plugins/WizardPlugins/FileDialogWizard/FileDialogWizardDialog.py file | annotate | diff | comparison | revisions
Plugins/WizardPlugins/FontDialogWizard/FontDialogWizardDialog.py file | annotate | diff | comparison | revisions
Plugins/WizardPlugins/InputDialogWizard/InputDialogWizardDialog.py file | annotate | diff | comparison | revisions
Plugins/WizardPlugins/MessageBoxWizard/MessageBoxWizardDialog.py file | annotate | diff | comparison | revisions
Plugins/WizardPlugins/PyRegExpWizard/PyRegExpWizardCharactersDialog.py file | annotate | diff | comparison | revisions
Plugins/WizardPlugins/PyRegExpWizard/PyRegExpWizardDialog.py file | annotate | diff | comparison | revisions
Plugins/WizardPlugins/PyRegExpWizard/PyRegExpWizardRepeatDialog.py file | annotate | diff | comparison | revisions
Plugins/WizardPlugins/QRegExpWizard/QRegExpWizardCharactersDialog.py file | annotate | diff | comparison | revisions
Plugins/WizardPlugins/QRegExpWizard/QRegExpWizardDialog.py file | annotate | diff | comparison | revisions
Plugins/WizardPlugins/QRegExpWizard/QRegExpWizardRepeatDialog.py file | annotate | diff | comparison | revisions
Preferences/ConfigurationDialog.py file | annotate | diff | comparison | revisions
Preferences/ConfigurationPages/ApplicationPage.py file | annotate | diff | comparison | revisions
Preferences/ConfigurationPages/CorbaPage.py file | annotate | diff | comparison | revisions
Preferences/ConfigurationPages/DebuggerGeneralPage.py file | annotate | diff | comparison | revisions
Preferences/ConfigurationPages/DebuggerPython3Page.py file | annotate | diff | comparison | revisions
Preferences/ConfigurationPages/DebuggerPythonPage.py file | annotate | diff | comparison | revisions
Preferences/ConfigurationPages/DebuggerRubyPage.py file | annotate | diff | comparison | revisions
Preferences/ConfigurationPages/EditorAPIsPage.py file | annotate | diff | comparison | revisions
Preferences/ConfigurationPages/EditorAutocompletionPage.py file | annotate | diff | comparison | revisions
Preferences/ConfigurationPages/EditorAutocompletionQScintillaPage.py file | annotate | diff | comparison | revisions
Preferences/ConfigurationPages/EditorCalltipsPage.py file | annotate | diff | comparison | revisions
Preferences/ConfigurationPages/EditorCalltipsQScintillaPage.py file | annotate | diff | comparison | revisions
Preferences/ConfigurationPages/EditorExportersPage.py file | annotate | diff | comparison | revisions
Preferences/ConfigurationPages/EditorFilePage.py file | annotate | diff | comparison | revisions
Preferences/ConfigurationPages/EditorGeneralPage.py file | annotate | diff | comparison | revisions
Preferences/ConfigurationPages/EditorHighlightersPage.py file | annotate | diff | comparison | revisions
Preferences/ConfigurationPages/EditorHighlightingStylesPage.py file | annotate | diff | comparison | revisions
Preferences/ConfigurationPages/EditorPropertiesPage.py file | annotate | diff | comparison | revisions
Preferences/ConfigurationPages/EditorSearchPage.py file | annotate | diff | comparison | revisions
Preferences/ConfigurationPages/EditorSpellCheckingPage.py file | annotate | diff | comparison | revisions
Preferences/ConfigurationPages/EditorStylesPage.py file | annotate | diff | comparison | revisions
Preferences/ConfigurationPages/EditorTypingPage.py file | annotate | diff | comparison | revisions
Preferences/ConfigurationPages/EmailPage.py file | annotate | diff | comparison | revisions
Preferences/ConfigurationPages/GraphicsPage.py file | annotate | diff | comparison | revisions
Preferences/ConfigurationPages/HelpAppearancePage.py file | annotate | diff | comparison | revisions
Preferences/ConfigurationPages/HelpDocumentationPage.py file | annotate | diff | comparison | revisions
Preferences/ConfigurationPages/HelpViewersPage.py file | annotate | diff | comparison | revisions
Preferences/ConfigurationPages/HelpWebBrowserPage.py file | annotate | diff | comparison | revisions
Preferences/ConfigurationPages/IconsPage.py file | annotate | diff | comparison | revisions
Preferences/ConfigurationPages/IconsPreviewDialog.py file | annotate | diff | comparison | revisions
Preferences/ConfigurationPages/InterfacePage.py file | annotate | diff | comparison | revisions
Preferences/ConfigurationPages/MultiProjectPage.py file | annotate | diff | comparison | revisions
Preferences/ConfigurationPages/NetworkPage.py file | annotate | diff | comparison | revisions
Preferences/ConfigurationPages/PluginManagerPage.py file | annotate | diff | comparison | revisions
Preferences/ConfigurationPages/PrinterPage.py file | annotate | diff | comparison | revisions
Preferences/ConfigurationPages/ProjectBrowserPage.py file | annotate | diff | comparison | revisions
Preferences/ConfigurationPages/ProjectPage.py file | annotate | diff | comparison | revisions
Preferences/ConfigurationPages/PythonPage.py file | annotate | diff | comparison | revisions
Preferences/ConfigurationPages/QtPage.py file | annotate | diff | comparison | revisions
Preferences/ConfigurationPages/ShellPage.py file | annotate | diff | comparison | revisions
Preferences/ConfigurationPages/TasksPage.py file | annotate | diff | comparison | revisions
Preferences/ConfigurationPages/TemplatesPage.py file | annotate | diff | comparison | revisions
Preferences/ConfigurationPages/TerminalPage.py file | annotate | diff | comparison | revisions
Preferences/ConfigurationPages/VcsPage.py file | annotate | diff | comparison | revisions
Preferences/ConfigurationPages/ViewmanagerPage.py file | annotate | diff | comparison | revisions
Preferences/PreferencesLexer.py file | annotate | diff | comparison | revisions
Preferences/ProgramsDialog.py file | annotate | diff | comparison | revisions
Preferences/ShortcutDialog.py file | annotate | diff | comparison | revisions
Preferences/Shortcuts.py file | annotate | diff | comparison | revisions
Preferences/ShortcutsDialog.py file | annotate | diff | comparison | revisions
Preferences/ToolConfigurationDialog.py file | annotate | diff | comparison | revisions
Preferences/ToolGroupConfigurationDialog.py file | annotate | diff | comparison | revisions
Preferences/ViewProfileDialog.py file | annotate | diff | comparison | revisions
Preferences/__init__.py file | annotate | diff | comparison | revisions
Project/AddDirectoryDialog.py file | annotate | diff | comparison | revisions
Project/AddFileDialog.py file | annotate | diff | comparison | revisions
Project/AddFoundFilesDialog.py file | annotate | diff | comparison | revisions
Project/AddLanguageDialog.py file | annotate | diff | comparison | revisions
Project/CreateDialogCodeDialog.py file | annotate | diff | comparison | revisions
Project/DebuggerPropertiesDialog.py file | annotate | diff | comparison | revisions
Project/FiletypeAssociationDialog.py file | annotate | diff | comparison | revisions
Project/LexerAssociationDialog.py file | annotate | diff | comparison | revisions
Project/NewDialogClassDialog.py file | annotate | diff | comparison | revisions
Project/NewPythonPackageDialog.py file | annotate | diff | comparison | revisions
Project/Project.py file | annotate | diff | comparison | revisions
Project/ProjectBaseBrowser.py file | annotate | diff | comparison | revisions
Project/ProjectBrowser.py file | annotate | diff | comparison | revisions
Project/ProjectBrowserModel.py file | annotate | diff | comparison | revisions
Project/ProjectBrowserSortFilterProxyModel.py file | annotate | diff | comparison | revisions
Project/ProjectFormsBrowser.py file | annotate | diff | comparison | revisions
Project/ProjectInterfacesBrowser.py file | annotate | diff | comparison | revisions
Project/ProjectOthersBrowser.py file | annotate | diff | comparison | revisions
Project/ProjectResourcesBrowser.py file | annotate | diff | comparison | revisions
Project/ProjectSourcesBrowser.py file | annotate | diff | comparison | revisions
Project/ProjectTranslationsBrowser.py file | annotate | diff | comparison | revisions
Project/PropertiesDialog.py file | annotate | diff | comparison | revisions
Project/SpellingPropertiesDialog.py file | annotate | diff | comparison | revisions
Project/TranslationPropertiesDialog.py file | annotate | diff | comparison | revisions
Project/UserPropertiesDialog.py file | annotate | diff | comparison | revisions
PyUnit/UnittestDialog.py file | annotate | diff | comparison | revisions
QScintilla/APIsManager.py file | annotate | diff | comparison | revisions
QScintilla/Editor.py file | annotate | diff | comparison | revisions
QScintilla/Exporters/ExporterHTML.py file | annotate | diff | comparison | revisions
QScintilla/Exporters/ExporterPDF.py file | annotate | diff | comparison | revisions
QScintilla/Exporters/ExporterRTF.py file | annotate | diff | comparison | revisions
QScintilla/Exporters/ExporterTEX.py file | annotate | diff | comparison | revisions
QScintilla/Exporters/__init__.py file | annotate | diff | comparison | revisions
QScintilla/GotoDialog.py file | annotate | diff | comparison | revisions
QScintilla/Lexers/LexerBash.py file | annotate | diff | comparison | revisions
QScintilla/Lexers/LexerBatch.py file | annotate | diff | comparison | revisions
QScintilla/Lexers/LexerCMake.py file | annotate | diff | comparison | revisions
QScintilla/Lexers/LexerCPP.py file | annotate | diff | comparison | revisions
QScintilla/Lexers/LexerCSS.py file | annotate | diff | comparison | revisions
QScintilla/Lexers/LexerCSharp.py file | annotate | diff | comparison | revisions
QScintilla/Lexers/LexerContainer.py file | annotate | diff | comparison | revisions
QScintilla/Lexers/LexerD.py file | annotate | diff | comparison | revisions
QScintilla/Lexers/LexerDiff.py file | annotate | diff | comparison | revisions
QScintilla/Lexers/LexerFortran.py file | annotate | diff | comparison | revisions
QScintilla/Lexers/LexerFortran77.py file | annotate | diff | comparison | revisions
QScintilla/Lexers/LexerHTML.py file | annotate | diff | comparison | revisions
QScintilla/Lexers/LexerIDL.py file | annotate | diff | comparison | revisions
QScintilla/Lexers/LexerJava.py file | annotate | diff | comparison | revisions
QScintilla/Lexers/LexerJavaScript.py file | annotate | diff | comparison | revisions
QScintilla/Lexers/LexerLua.py file | annotate | diff | comparison | revisions
QScintilla/Lexers/LexerMakefile.py file | annotate | diff | comparison | revisions
QScintilla/Lexers/LexerPOV.py file | annotate | diff | comparison | revisions
QScintilla/Lexers/LexerPascal.py file | annotate | diff | comparison | revisions
QScintilla/Lexers/LexerPerl.py file | annotate | diff | comparison | revisions
QScintilla/Lexers/LexerPostScript.py file | annotate | diff | comparison | revisions
QScintilla/Lexers/LexerProperties.py file | annotate | diff | comparison | revisions
QScintilla/Lexers/LexerPygments.py file | annotate | diff | comparison | revisions
QScintilla/Lexers/LexerPython.py file | annotate | diff | comparison | revisions
QScintilla/Lexers/LexerRuby.py file | annotate | diff | comparison | revisions
QScintilla/Lexers/LexerSQL.py file | annotate | diff | comparison | revisions
QScintilla/Lexers/LexerTCL.py file | annotate | diff | comparison | revisions
QScintilla/Lexers/LexerTeX.py file | annotate | diff | comparison | revisions
QScintilla/Lexers/LexerVHDL.py file | annotate | diff | comparison | revisions
QScintilla/Lexers/LexerXML.py file | annotate | diff | comparison | revisions
QScintilla/Lexers/LexerYAML.py file | annotate | diff | comparison | revisions
QScintilla/Lexers/__init__.py file | annotate | diff | comparison | revisions
QScintilla/MiniEditor.py file | annotate | diff | comparison | revisions
QScintilla/QsciScintillaCompat.py file | annotate | diff | comparison | revisions
QScintilla/SearchReplaceWidget.py file | annotate | diff | comparison | revisions
QScintilla/Shell.py file | annotate | diff | comparison | revisions
QScintilla/ShellHistoryDialog.py file | annotate | diff | comparison | revisions
QScintilla/SpellChecker.py file | annotate | diff | comparison | revisions
QScintilla/SpellCheckingDialog.py file | annotate | diff | comparison | revisions
QScintilla/Terminal.py file | annotate | diff | comparison | revisions
QScintilla/TypingCompleters/CompleterPython.py file | annotate | diff | comparison | revisions
QScintilla/TypingCompleters/CompleterRuby.py file | annotate | diff | comparison | revisions
QScintilla/TypingCompleters/__init__.py file | annotate | diff | comparison | revisions
QScintilla/ZoomDialog.py file | annotate | diff | comparison | revisions
SqlBrowser/SqlBrowser.py file | annotate | diff | comparison | revisions
SqlBrowser/SqlBrowserWidget.py file | annotate | diff | comparison | revisions
SqlBrowser/SqlConnectionDialog.py file | annotate | diff | comparison | revisions
Tasks/TaskFilterConfigDialog.py file | annotate | diff | comparison | revisions
Tasks/TaskPropertiesDialog.py file | annotate | diff | comparison | revisions
Tasks/TaskViewer.py file | annotate | diff | comparison | revisions
Templates/TemplateMultipleVariablesDialog.py file | annotate | diff | comparison | revisions
Templates/TemplatePropertiesDialog.py file | annotate | diff | comparison | revisions
Templates/TemplateSingleVariableDialog.py file | annotate | diff | comparison | revisions
Templates/TemplateViewer.py file | annotate | diff | comparison | revisions
ThirdParty/CharDet/chardet/__init__.py file | annotate | diff | comparison | revisions
ThirdParty/CharDet/chardet/big5prober.py file | annotate | diff | comparison | revisions
ThirdParty/CharDet/chardet/chardistribution.py file | annotate | diff | comparison | revisions
ThirdParty/CharDet/chardet/charsetgroupprober.py file | annotate | diff | comparison | revisions
ThirdParty/CharDet/chardet/charsetprober.py file | annotate | diff | comparison | revisions
ThirdParty/CharDet/chardet/codingstatemachine.py file | annotate | diff | comparison | revisions
ThirdParty/CharDet/chardet/constants.py file | annotate | diff | comparison | revisions
ThirdParty/CharDet/chardet/escprober.py file | annotate | diff | comparison | revisions
ThirdParty/CharDet/chardet/escsm.py file | annotate | diff | comparison | revisions
ThirdParty/CharDet/chardet/eucjpprober.py file | annotate | diff | comparison | revisions
ThirdParty/CharDet/chardet/euckrprober.py file | annotate | diff | comparison | revisions
ThirdParty/CharDet/chardet/euctwprober.py file | annotate | diff | comparison | revisions
ThirdParty/CharDet/chardet/gb2312prober.py file | annotate | diff | comparison | revisions
ThirdParty/CharDet/chardet/hebrewprober.py file | annotate | diff | comparison | revisions
ThirdParty/CharDet/chardet/jpcntx.py file | annotate | diff | comparison | revisions
ThirdParty/CharDet/chardet/langbulgarianmodel.py file | annotate | diff | comparison | revisions
ThirdParty/CharDet/chardet/langcyrillicmodel.py file | annotate | diff | comparison | revisions
ThirdParty/CharDet/chardet/langgreekmodel.py file | annotate | diff | comparison | revisions
ThirdParty/CharDet/chardet/langhebrewmodel.py file | annotate | diff | comparison | revisions
ThirdParty/CharDet/chardet/langhungarianmodel.py file | annotate | diff | comparison | revisions
ThirdParty/CharDet/chardet/langthaimodel.py file | annotate | diff | comparison | revisions
ThirdParty/CharDet/chardet/latin1prober.py file | annotate | diff | comparison | revisions
ThirdParty/CharDet/chardet/mbcharsetprober.py file | annotate | diff | comparison | revisions
ThirdParty/CharDet/chardet/mbcsgroupprober.py file | annotate | diff | comparison | revisions
ThirdParty/CharDet/chardet/mbcssm.py file | annotate | diff | comparison | revisions
ThirdParty/CharDet/chardet/sbcharsetprober.py file | annotate | diff | comparison | revisions
ThirdParty/CharDet/chardet/sbcsgroupprober.py file | annotate | diff | comparison | revisions
ThirdParty/CharDet/chardet/sjisprober.py file | annotate | diff | comparison | revisions
ThirdParty/CharDet/chardet/test.py file | annotate | diff | comparison | revisions
ThirdParty/CharDet/chardet/universaldetector.py file | annotate | diff | comparison | revisions
ThirdParty/CharDet/chardet/utf8prober.py file | annotate | diff | comparison | revisions
ThirdParty/Pygments/__init__.py file | annotate | diff | comparison | revisions
ThirdParty/Pygments/pygments/AUTHORS file | annotate | diff | comparison | revisions
ThirdParty/Pygments/pygments/CHANGES file | annotate | diff | comparison | revisions
ThirdParty/Pygments/pygments/PKG-INFO file | annotate | diff | comparison | revisions
ThirdParty/Pygments/pygments/__init__.py file | annotate | diff | comparison | revisions
ThirdParty/Pygments/pygments/cmdline.py file | annotate | diff | comparison | revisions
ThirdParty/Pygments/pygments/filters/__init__.py file | annotate | diff | comparison | revisions
ThirdParty/Pygments/pygments/formatter.py file | annotate | diff | comparison | revisions
ThirdParty/Pygments/pygments/formatters/_mapping.py file | annotate | diff | comparison | revisions
ThirdParty/Pygments/pygments/formatters/html.py file | annotate | diff | comparison | revisions
ThirdParty/Pygments/pygments/formatters/img.py file | annotate | diff | comparison | revisions
ThirdParty/Pygments/pygments/formatters/latex.py file | annotate | diff | comparison | revisions
ThirdParty/Pygments/pygments/formatters/other.py file | annotate | diff | comparison | revisions
ThirdParty/Pygments/pygments/lexer.py file | annotate | diff | comparison | revisions
ThirdParty/Pygments/pygments/lexers/__init__.py file | annotate | diff | comparison | revisions
ThirdParty/Pygments/pygments/lexers/_luabuiltins.py file | annotate | diff | comparison | revisions
ThirdParty/Pygments/pygments/lexers/_mapping.py file | annotate | diff | comparison | revisions
ThirdParty/Pygments/pygments/lexers/_phpbuiltins.py file | annotate | diff | comparison | revisions
ThirdParty/Pygments/pygments/lexers/agile.py file | annotate | diff | comparison | revisions
ThirdParty/Pygments/pygments/lexers/compiled.py file | annotate | diff | comparison | revisions
ThirdParty/Pygments/pygments/lexers/dotnet.py file | annotate | diff | comparison | revisions
ThirdParty/Pygments/pygments/lexers/other.py file | annotate | diff | comparison | revisions
ThirdParty/Pygments/pygments/lexers/special.py file | annotate | diff | comparison | revisions
ThirdParty/Pygments/pygments/lexers/templates.py file | annotate | diff | comparison | revisions
ThirdParty/Pygments/pygments/lexers/text.py file | annotate | diff | comparison | revisions
ThirdParty/Pygments/pygments/lexers/web.py file | annotate | diff | comparison | revisions
ThirdParty/Pygments/pygments/style.py file | annotate | diff | comparison | revisions
ThirdParty/Pygments/pygments/unistring.py file | annotate | diff | comparison | revisions
ThirdParty/Pygments/pygments/util.py file | annotate | diff | comparison | revisions
Tools/TRPreviewer.py file | annotate | diff | comparison | revisions
Tools/TRSingleApplication.py file | annotate | diff | comparison | revisions
Tools/UIPreviewer.py file | annotate | diff | comparison | revisions
UI/AuthenticationDialog.py file | annotate | diff | comparison | revisions
UI/Browser.py file | annotate | diff | comparison | revisions
UI/BrowserModel.py file | annotate | diff | comparison | revisions
UI/CompareDialog.py file | annotate | diff | comparison | revisions
UI/DeleteFilesConfirmationDialog.py file | annotate | diff | comparison | revisions
UI/DiffDialog.py file | annotate | diff | comparison | revisions
UI/EmailDialog.py file | annotate | diff | comparison | revisions
UI/FindFileDialog.py file | annotate | diff | comparison | revisions
UI/FindFileNameDialog.py file | annotate | diff | comparison | revisions
UI/UserInterface.py file | annotate | diff | comparison | revisions
Utilities/ClassBrowsers/ClbrBaseClasses.py file | annotate | diff | comparison | revisions
Utilities/ClassBrowsers/__init__.py file | annotate | diff | comparison | revisions
Utilities/ClassBrowsers/idlclbr.py file | annotate | diff | comparison | revisions
Utilities/ClassBrowsers/pyclbr.py file | annotate | diff | comparison | revisions
Utilities/ClassBrowsers/rbclbr.py file | annotate | diff | comparison | revisions
Utilities/ModuleParser.py file | annotate | diff | comparison | revisions
Utilities/SingleApplication.py file | annotate | diff | comparison | revisions
Utilities/Startup.py file | annotate | diff | comparison | revisions
Utilities/__init__.py file | annotate | diff | comparison | revisions
Utilities/uic.py file | annotate | diff | comparison | revisions
VCS/CommandOptionsDialog.py file | annotate | diff | comparison | revisions
VCS/ProjectBrowserHelper.py file | annotate | diff | comparison | revisions
VCS/ProjectHelper.py file | annotate | diff | comparison | revisions
VCS/RepositoryInfoDialog.py file | annotate | diff | comparison | revisions
VCS/__init__.py file | annotate | diff | comparison | revisions
ViewManager/BookmarkedFilesDialog.py file | annotate | diff | comparison | revisions
ViewManager/ViewManager.py file | annotate | diff | comparison | revisions
compileUiFiles.py file | annotate | diff | comparison | revisions
eric4-api.py file | annotate | diff | comparison | revisions
eric4-compare.py file | annotate | diff | comparison | revisions
eric4-configure.py file | annotate | diff | comparison | revisions
eric4-diff.py file | annotate | diff | comparison | revisions
eric4-doc.py file | annotate | diff | comparison | revisions
eric4-editor.py file | annotate | diff | comparison | revisions
eric4-iconeditor.py file | annotate | diff | comparison | revisions
eric4-plugininstall.py file | annotate | diff | comparison | revisions
eric4-pluginrepository.py file | annotate | diff | comparison | revisions
eric4-pluginuninstall.py file | annotate | diff | comparison | revisions
eric4-qregexp.py file | annotate | diff | comparison | revisions
eric4-re.py file | annotate | diff | comparison | revisions
eric4-sqlbrowser.py file | annotate | diff | comparison | revisions
eric4-tray.py file | annotate | diff | comparison | revisions
eric4-trpreviewer.py file | annotate | diff | comparison | revisions
eric4-uipreviewer.py file | annotate | diff | comparison | revisions
eric4-unittest.py file | annotate | diff | comparison | revisions
eric4-webbrowser.py file | annotate | diff | comparison | revisions
eric4.e4p file | annotate | diff | comparison | revisions
eric4.py file | annotate | diff | comparison | revisions
eric4config.py file | annotate | diff | comparison | revisions
install-i18n.py file | annotate | diff | comparison | revisions
install.py file | annotate | diff | comparison | revisions
patch_modpython.py file | annotate | diff | comparison | revisions
patch_pyxml.py file | annotate | diff | comparison | revisions
uninstall.py file | annotate | diff | comparison | revisions
--- a/APIs/Python/eric4.api	Fri Jan 01 16:11:36 2010 +0000
+++ b/APIs/Python/eric4.api	Sat Jan 02 15:11:35 2010 +0000
@@ -4599,7 +4599,6 @@
 eric4.QScintilla.SpellChecker.SpellChecker.ignoreAlways?4(word = None)
 eric4.QScintilla.SpellChecker.SpellChecker.initCheck?4(startPos, endPos)
 eric4.QScintilla.SpellChecker.SpellChecker.isAvailable?4()
-eric4.QScintilla.SpellChecker.SpellChecker.next?4()
 eric4.QScintilla.SpellChecker.SpellChecker.remove?4(word)
 eric4.QScintilla.SpellChecker.SpellChecker.replace?4(replacement)
 eric4.QScintilla.SpellChecker.SpellChecker.replaceAlways?4(replacement)
--- a/DataViews/CodeMetrics.py	Fri Jan 01 16:11:36 2010 +0000
+++ b/DataViews/CodeMetrics.py	Sat Jan 02 15:11:35 2010 +0000
@@ -15,12 +15,10 @@
 """
 
 import os
-import cStringIO
+import io
 import keyword
 import token
 import tokenize
-if not hasattr(tokenize, 'NL'):
-    raise ValueError("tokenize.NL doesn't exist -- tokenize module too old")
     
 import Utilities
 
@@ -63,11 +61,23 @@
             
         self.lines = text.count(os.linesep)
         
-        source = cStringIO.StringIO(text)
+        source = io.BytesIO(text.encode("utf-8"))
         try:
-            tokenize.tokenize(source.readline, self.__tokeneater)
-        except tokenize.TokenError, msg:
-            print "Token Error: %s" % str(msg)
+            gen = tokenize.tokenize(source.readline)
+            for toktype, toktext, start, end, line in gen:
+                (srow, scol) = start
+                (erow, ecol) = end
+                if toktype in [token.NEWLINE, tokenize.NL]:
+                    self.__addToken(toktype, os.linesep, srow, scol, line)
+                elif toktype in [token.INDENT, token.DEDENT]:
+                    self.__addToken(toktype, '', srow, scol, line)
+                elif toktype == token.NAME and keyword.iskeyword(toktext):
+                    toktype = KEYWORD
+                    self.__addToken(toktype, toktext, srow, scol, line)
+                else:
+                    self.__addToken(toktype, toktext, srow, scol, line)
+        except tokenize.TokenError as msg:
+            print("Token Error: %s" % str(msg))
             return
         
         return
@@ -84,31 +94,6 @@
         """
         self.tokenlist.append(Token(type=toktype, text=toktext, row=srow, 
                                     col=scol, line=line))
-        
-    def __tokeneater(self, toktype, toktext, (srow, scol), (erow, ecol), line):
-        """
-        Private method called by tokenize.tokenize.
-        
-        @param toktype the type of the token (int)
-        @param toktext the text of the token (string)
-        @param srow starting row of the token (int)
-        @param scol starting column of the token (int)
-        @param erow ending row of the token (int)
-        @param ecol ending column of the token (int)
-        @param line logical line the token was found (string)
-        """
-        if toktype in [token.NEWLINE, tokenize.NL]:
-            self.__addToken(toktype, os.linesep, srow, scol, line)
-            return
-            
-        if toktype in [token.INDENT, token.DEDENT]:
-            self.__addToken(toktype, '', srow, scol, line)
-            return
-            
-        if toktype == token.NAME and keyword.iskeyword(toktext):
-            toktype = KEYWORD
-            
-        self.__addToken(toktype, toktext, srow, scol, line)
 
 spacer = ' '
 
@@ -181,8 +166,8 @@
         Public method used to format and print the collected statistics.
         """
         label_len = 79 - len(spacer) - 6 * 6
-        print spacer + "FUNCTION / CLASS".ljust(label_len) + \
-            " START   END LINES  NLOC  COMM EMPTY"
+        print(spacer + "FUNCTION / CLASS".ljust(label_len) + \
+            " START   END LINES  NLOC  COMM EMPTY")
         for id in self.identifiers + ['TOTAL ']:
             label = id
             counters = self.counters.get(id, {})
@@ -194,7 +179,7 @@
                 else:
                     msg += " " * 6
 
-            print msg
+            print(msg)
 
     def getCounter(self, id, key):
         """
@@ -226,9 +211,9 @@
     @param total dictionary receiving the overall code statistics
     @return a statistics object with the collected code statistics (SourceStat)
     """
-    file = open(filename, 'rb')
+    file = open(filename, 'r')
     try:
-        text = Utilities.decode(file.read())[0].encode('utf-8')
+        text = file.read()
     finally:
         file.close()
 
@@ -245,18 +230,18 @@
         # counting
         if tok.type == NEWLINE:
             stats.inc('nloc')
-        if tok.type == COMMENT:
+        elif tok.type == COMMENT:
             stats.inc('comments')
-        if tok.type == EMPTY:
+        elif tok.type == EMPTY:
             if parser.tokenlist[idx-1].type == token.OP:
                 stats.inc('nloc')
             else:
                 stats.inc('empty')
-
-        if tok.type == INDENT: stats.indent(tok)
-        if tok.type == DEDENT: stats.dedent(tok)
-
-        if tok.type == KEYWORD:
+        elif tok.type == INDENT: 
+            stats.indent(tok)
+        elif tok.type == DEDENT: 
+            stats.dedent(tok)
+        elif tok.type == KEYWORD:
             if tok.text in ("class", "def"):
                 stats.push(parser.tokenlist[idx+1].text, tok.row)
 
@@ -287,14 +272,14 @@
     
     summarize(total, 'files', len(files))
     for file in files:
-        print file
+        print(file)
         stats = analyze(file, total)
         stats.dump()
         
-    print "\nSummary"
+    print("\nSummary")
     for key in ['files', 'lines', 'bytes', 'comments',
                 'empty lines', 'non-commentary lines']:
-        print key.ljust(20) + "%6d" % total[key]
+        print(key.ljust(20) + "%6d" % total[key])
     
     sys.exit(0)
 
--- a/DataViews/CodeMetricsDialog.py	Fri Jan 01 16:11:36 2010 +0000
+++ b/DataViews/CodeMetricsDialog.py	Sat Jan 02 15:11:35 2010 +0000
@@ -14,8 +14,8 @@
 from PyQt4.QtCore import *
 from PyQt4.QtGui import *
 
-from Ui_CodeMetricsDialog import Ui_CodeMetricsDialog
-import CodeMetrics
+from .Ui_CodeMetricsDialog import Ui_CodeMetricsDialog
+from . import CodeMetrics
 import Utilities
 
 class CodeMetricsDialog(QDialog, Ui_CodeMetricsDialog):
@@ -96,7 +96,7 @@
                 the code metrics for (string or list of strings)
         """
         loc = QLocale()
-        if type(fn) is types.ListType:
+        if isinstance(fn, list):
             files = fn
         elif os.path.isdir(fn):
             files = Utilities.direntries(fn, True, '*.py', False)
--- a/DataViews/PyCoverageDialog.py	Fri Jan 01 16:11:36 2010 +0000
+++ b/DataViews/PyCoverageDialog.py	Sat Jan 02 15:11:35 2010 +0000
@@ -14,10 +14,10 @@
 from PyQt4.QtCore import *
 from PyQt4.QtGui import *
 
-from Ui_PyCoverageDialog import Ui_PyCoverageDialog
+from .Ui_PyCoverageDialog import Ui_PyCoverageDialog
 
 import Utilities
-from DebugClients.Python.coverage import coverage
+from DebugClients.Python3.coverage import coverage
 
 class PyCoverageDialog(QDialog, Ui_PyCoverageDialog):
     """
@@ -137,7 +137,7 @@
         
         self.cfn = "%s.coverage" % self.basename
         
-        if type(fn) is types.ListType:
+        if isinstance(fn, list):
             files = fn
             self.path = os.path.dirname(cfn)
         elif os.path.isdir(fn):
--- a/DataViews/PyProfileDialog.py	Fri Jan 01 16:11:36 2010 +0000
+++ b/DataViews/PyProfileDialog.py	Sat Jan 02 15:11:35 2010 +0000
@@ -14,7 +14,7 @@
 from PyQt4.QtCore import *
 from PyQt4.QtGui import *
 
-from Ui_PyProfileDialog import Ui_PyProfileDialog
+from .Ui_PyProfileDialog import Ui_PyProfileDialog
 import Utilities
 
 from eric4config import getConfig
@@ -157,7 +157,7 @@
             self.resultList.setSortingEnabled(False)
             
             # now go through all the files
-            for func, (cc, nc, tt, ct, callers) in self.stats.items():
+            for func, (cc, nc, tt, ct, callers) in list(self.stats.items()):
                 if self.cancelled:
                     return
                 
--- a/DebugClients/Python3/DebugBase.py	Fri Jan 01 16:11:36 2010 +0000
+++ b/DebugClients/Python3/DebugBase.py	Sat Jan 02 15:11:35 2010 +0000
@@ -577,12 +577,15 @@
         exctype, excval, exctb = excinfo
         if exctype in [SystemExit, bdb.BdbQuit]:
             atexit._run_exitfuncs()
-            self._dbgClient.progTerminated(excval)
+            if isinstance(excval, int):
+                self._dbgClient.progTerminated(excval)
+            else:
+                self._dbgClient.progTerminated(excval.code)
             return
         
         elif exctype in [SyntaxError, IndentationError]:
             try:
-                message, (filename, linenr, charnr, text) = excval.args
+                message, (filename, linenr, charnr, text) = excval[0], excval[1]
             except ValueError:
                 exclist = []
             else:
@@ -601,9 +604,7 @@
             else:
                 exctypetxt = str(exctype)
             try:
-                exclist = [exctypetxt, 
-                           str(excval).encode(
-                                self._dbgClient.getCoding(), 'backslashreplace')]
+                exclist = [exctypetxt, str(excval)]
             except TypeError:
                 exclist = [exctypetxt, str(excval)]
             
--- a/DebugClients/Python3/DebugClientBase.py	Fri Jan 01 16:11:36 2010 +0000
+++ b/DebugClients/Python3/DebugClientBase.py	Sat Jan 02 15:11:35 2010 +0000
@@ -348,7 +348,7 @@
         except SyntaxError:
             exctype, excval, exctb = sys.exc_info()
             try:
-                message, (filename, linenr, charnr, text) = excval.args
+                message, (filename, linenr, charnr, text) = excval[0], excval[1]
             except ValueError:
                 exclist = []
             else:
--- a/Debugger/BreakPointViewer.py	Fri Jan 01 16:11:36 2010 +0000
+++ b/Debugger/BreakPointViewer.py	Sat Jan 02 15:11:35 2010 +0000
@@ -12,7 +12,7 @@
 
 from E4Gui.E4Application import e4App
 
-from EditBreakpointDialog import EditBreakpointDialog
+from .EditBreakpointDialog import EditBreakpointDialog
 
 class BreakPointViewer(QTreeView):
     """
@@ -428,7 +428,7 @@
         
         @return count of items selected (integer)
         """
-        count = len(self.selectedIndexes()) / (self.__model.columnCount() - 1)
+        count = len(self.selectedIndexes()) // (self.__model.columnCount() - 1)
         # column count is 1 greater than selectable
         return count
     
--- a/Debugger/DebugServer.py	Fri Jan 01 16:11:36 2010 +0000
+++ b/Debugger/DebugServer.py	Sat Jan 02 15:11:35 2010 +0000
@@ -18,9 +18,9 @@
 
 from E4Gui.E4Application import e4App
 
-from BreakPointModel import BreakPointModel
-from WatchPointModel import WatchPointModel
-import DebugClientCapabilities
+from .BreakPointModel import BreakPointModel
+from .WatchPointModel import WatchPointModel
+from . import DebugClientCapabilities
 
 import Preferences
 import Utilities
@@ -218,7 +218,7 @@
             interactive shell should be returned
         @return list of supported languages (list of strings)
         """
-        languages = self.__clientCapabilities.keys()
+        languages = list(self.__clientCapabilities.keys())
         try:
             del languages[languages.index("None")]
         except ValueError:
@@ -239,7 +239,7 @@
         @return tuple of extensions associated with the language (tuple of strings)
         """
         extensions = []
-        for ext, lang in self.__clientAssociations.items():
+        for ext, lang in list(self.__clientAssociations.items()):
             if lang == language:
                 extensions.append(ext)
         
@@ -255,19 +255,19 @@
             if clientType is None:
                 clientType = self.clientType
             if clientType == "Python":
-                from DebuggerInterfacePython import DebuggerInterfacePython
+                from .DebuggerInterfacePython import DebuggerInterfacePython
                 self.debuggerInterface = DebuggerInterfacePython(self, self.passive)
             elif clientType == "Python3":
-                from DebuggerInterfacePython3 import DebuggerInterfacePython3
+                from .DebuggerInterfacePython3 import DebuggerInterfacePython3
                 self.debuggerInterface = DebuggerInterfacePython3(self, self.passive)
             elif clientType == "Ruby":
-                from DebuggerInterfaceRuby import DebuggerInterfaceRuby
+                from .DebuggerInterfaceRuby import DebuggerInterfaceRuby
                 self.debuggerInterface = DebuggerInterfaceRuby(self, self.passive)
             elif clientType == "None":
-                from DebuggerInterfaceNone import DebuggerInterfaceNone
+                from .DebuggerInterfaceNone import DebuggerInterfaceNone
                 self.debuggerInterface = DebuggerInterfaceNone(self, self.passive)
             else:
-                from DebuggerInterfaceNone import DebuggerInterfaceNone
+                from .DebuggerInterfaceNone import DebuggerInterfaceNone
                 self.debuggerInterface = DebuggerInterfaceNone(self, self.passive)
                 self.clientType = "None"
         
@@ -352,14 +352,18 @@
         """
         Private slot to process client output received via stdout.
         """
-        output = unicode(self.clientProcess.readAllStandardOutput())
+        output = str(self.clientProcess.readAllStandardOutput(), 
+                     Preferences.getSystem("IOEncoding"), 
+                     'replace')
         self.emit(SIGNAL("clientProcessStdout"), output)
         
     def __clientProcessError(self):
         """
         Private slot to process client output received via stderr.
         """
-        error = unicode(self.clientProcess.readAllStandardError())
+        error = str(self.clientProcess.readAllStandardError(), 
+                    Preferences.getSystem("IOEncoding"), 
+                    'replace')
         self.emit(SIGNAL("clientProcessStderr"), error)
         
     def __clientClearBreakPoint(self, fn, lineno):
@@ -1201,7 +1205,7 @@
         @param fn filename of the debugged script (string)
         @param exc flag to enable exception reporting of the IDE (boolean)
         """
-        print self.trUtf8("Passive debug connection received")
+        print(self.trUtf8("Passive debug connection received"))
         self.passiveClientExited = False
         self.debugging = True
         self.__restoreBreakpoints()
@@ -1214,7 +1218,7 @@
         """
         self.passiveClientExited = True
         self.shutdownServer()
-        print self.trUtf8("Passive debug connection closed")
+        print(self.trUtf8("Passive debug connection closed"))
         
     def __restoreBreakpoints(self):
         """
--- a/Debugger/DebugUI.py	Fri Jan 01 16:11:36 2010 +0000
+++ b/Debugger/DebugUI.py	Sat Jan 02 15:11:35 2010 +0000
@@ -13,12 +13,12 @@
 from PyQt4.QtGui import *
 
 from UI.Info import *
-from VariablesFilterDialog import *
-from ExceptionsFilterDialog import *
-from StartDialog import *
-from EditBreakpointDialog import EditBreakpointDialog
+from .VariablesFilterDialog import *
+from .ExceptionsFilterDialog import *
+from .StartDialog import *
+from .EditBreakpointDialog import EditBreakpointDialog
 
-from DebugClientCapabilities import *
+from .DebugClientCapabilities import *
 import Preferences
 import Utilities
 import UI.PixmapCache
--- a/Debugger/DebugViewer.py	Fri Jan 01 16:11:36 2010 +0000
+++ b/Debugger/DebugViewer.py	Sat Jan 02 15:11:35 2010 +0000
@@ -25,10 +25,10 @@
 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
+from .VariablesViewer import VariablesViewer
+from .ExceptionLogger import ExceptionLogger
+from .BreakPointViewer import BreakPointViewer
+from .WatchPointViewer import WatchPointViewer
 
 import Utilities
 import UI.PixmapCache
--- a/Debugger/DebuggerInterfacePython.py	Fri Jan 01 16:11:36 2010 +0000
+++ b/Debugger/DebuggerInterfacePython.py	Sat Jan 02 15:11:35 2010 +0000
@@ -17,8 +17,8 @@
 
 from E4Gui.E4Application import e4App
 
-from DebugProtocol import *
-import DebugClientCapabilities
+from .DebugProtocol import *
+from . import DebugClientCapabilities
 
 import Preferences
 import Utilities
@@ -122,7 +122,7 @@
         proc = QProcess()
         if environment is not None:
             env = []
-            for key, value in environment.items():
+            for key, value in list(environment.items()):
                 env.append("%s=%s" % (key, value))
             proc.setEnvironment(env)
         args = []
@@ -412,7 +412,7 @@
         
         @param env environment settings (dictionary)
         """
-        self.__sendCommand('%s%s\n' % (RequestEnv, unicode(env)))
+        self.__sendCommand('%s%s\n' % (RequestEnv, str(env)))
         
     def remoteLoad(self, fn, argv, wd, traceInterpreter = False, autoContinue = True, 
                    autoFork = False, forkChild = False):
@@ -435,7 +435,7 @@
         fn = self.translate(os.path.abspath(fn), False)
         self.__sendCommand('%s%s\n' % (RequestForkMode, repr((autoFork, forkChild))))
         self.__sendCommand('%s%s|%s|%s|%d\n' % \
-            (RequestLoad, wd, fn, unicode(Utilities.parseOptionString(argv)),
+            (RequestLoad, wd, fn, str(Utilities.parseOptionString(argv)),
              traceInterpreter))
         
     def remoteRun(self, fn, argv, wd):
@@ -449,7 +449,7 @@
         wd = self.translate(wd, False)
         fn = self.translate(os.path.abspath(fn), False)
         self.__sendCommand('%s%s|%s|%s\n' % \
-            (RequestRun, wd, fn, unicode(Utilities.parseOptionString(argv))))
+            (RequestRun, wd, fn, str(Utilities.parseOptionString(argv))))
         
     def remoteCoverage(self, fn, argv, wd, erase = False):
         """
@@ -464,7 +464,7 @@
         wd = self.translate(wd, False)
         fn = self.translate(os.path.abspath(fn), False)
         self.__sendCommand('%s%s@@%s@@%s@@%d\n' % \
-            (RequestCoverage, wd, fn, unicode(Utilities.parseOptionString(argv)),
+            (RequestCoverage, wd, fn, str(Utilities.parseOptionString(argv)),
              erase))
 
     def remoteProfile(self, fn, argv, wd, erase = False):
@@ -479,7 +479,7 @@
         wd = self.translate(wd, False)
         fn = self.translate(os.path.abspath(fn), False)
         self.__sendCommand('%s%s|%s|%s|%d\n' % \
-            (RequestProfile, wd, fn, unicode(Utilities.parseOptionString(argv)), erase))
+            (RequestProfile, wd, fn, str(Utilities.parseOptionString(argv)), erase))
 
     def remoteStatement(self, stmt):
         """
@@ -621,7 +621,7 @@
         @param framenr framenumber of the variables to retrieve (int)
         """
         self.__sendCommand('%s%d, %d, %s\n' % \
-            (RequestVariables, framenr, scope, unicode(filter)))
+            (RequestVariables, framenr, scope, str(filter)))
         
     def remoteClientVariable(self, scope, filter, var, framenr = 0):
         """
@@ -633,7 +633,7 @@
         @param framenr framenumber of the variables to retrieve (int)
         """
         self.__sendCommand('%s%s, %d, %d, %s\n' % \
-            (RequestVariable, unicode(var), framenr, scope, str(filter)))
+            (RequestVariable, str(var), framenr, scope, str(filter)))
         
     def remoteClientSetFilter(self, scope, filter):
         """
@@ -732,16 +732,15 @@
         while self.qsock and self.qsock.canReadLine():
             qs = self.qsock.readLine()
             if self.codec is not None:
-                us = self.codec.fromUnicode(unicode(qs))
+                line = self.codec.toUnicode(qs)
             else:
-                us = qs
-            line = str(us)
+                line = bytes(qs).decode()
             if line.endswith(EOT):
                 line = line[:-len(EOT)]
                 if not line:
                     continue
             
-##            print "Server: ", line          ##debug
+##            print("Server: ", line)          ##debug
             
             eoc = line.find('<') + 1
             
--- a/Debugger/DebuggerInterfacePython3.py	Fri Jan 01 16:11:36 2010 +0000
+++ b/Debugger/DebuggerInterfacePython3.py	Sat Jan 02 15:11:35 2010 +0000
@@ -17,8 +17,8 @@
 
 from E4Gui.E4Application import e4App
 
-from DebugProtocol import *
-import DebugClientCapabilities
+from .DebugProtocol import *
+from . import DebugClientCapabilities
 
 import Preferences
 import Utilities
@@ -129,7 +129,7 @@
         proc = QProcess()
         if environment is not None:
             env = []
-            for key, value in environment.items():
+            for key, value in list(environment.items()):
                 env.append("%s=%s" % (key, value))
             proc.setEnvironment(env)
         args = []
@@ -420,7 +420,7 @@
         
         @param env environment settings (dictionary)
         """
-        self.__sendCommand('%s%s\n' % (RequestEnv, unicode(env)))
+        self.__sendCommand('%s%s\n' % (RequestEnv, str(env)))
     
     def remoteLoad(self, fn, argv, wd, traceInterpreter = False, autoContinue = True, 
                    autoFork = False, forkChild = False):
@@ -443,7 +443,7 @@
         fn = self.translate(os.path.abspath(fn), False)
         self.__sendCommand('%s%s\n' % (RequestForkMode, repr((autoFork, forkChild))))
         self.__sendCommand('%s%s|%s|%s|%d\n' % \
-            (RequestLoad, wd, fn, unicode(Utilities.parseOptionString(argv)), 
+            (RequestLoad, wd, fn, str(Utilities.parseOptionString(argv)), 
              traceInterpreter))
     
     def remoteRun(self, fn, argv, wd):
@@ -457,7 +457,7 @@
         wd = self.translate(wd, False)
         fn = self.translate(os.path.abspath(fn), False)
         self.__sendCommand('%s%s|%s|%s\n' % \
-            (RequestRun, wd, fn, unicode(Utilities.parseOptionString(argv))))
+            (RequestRun, wd, fn, str(Utilities.parseOptionString(argv))))
     
     def remoteCoverage(self, fn, argv, wd, erase = False):
         """
@@ -472,7 +472,7 @@
         wd = self.translate(wd, False)
         fn = self.translate(os.path.abspath(fn), False)
         self.__sendCommand('%s%s@@%s@@%s@@%d\n' % \
-            (RequestCoverage, wd, fn, unicode(Utilities.parseOptionString(argv)),
+            (RequestCoverage, wd, fn, str(Utilities.parseOptionString(argv)),
              erase))
 
     def remoteProfile(self, fn, argv, wd, erase = False):
@@ -487,7 +487,7 @@
         wd = self.translate(wd, False)
         fn = self.translate(os.path.abspath(fn), False)
         self.__sendCommand('%s%s|%s|%s|%d\n' % \
-            (RequestProfile, wd, fn, unicode(Utilities.parseOptionString(argv)), erase))
+            (RequestProfile, wd, fn, str(Utilities.parseOptionString(argv)), erase))
 
     def remoteStatement(self, stmt):
         """
@@ -629,7 +629,7 @@
         @param framenr framenumber of the variables to retrieve (int)
         """
         self.__sendCommand('%s%d, %d, %s\n' % \
-            (RequestVariables, framenr, scope, unicode(filter)))
+            (RequestVariables, framenr, scope, str(filter)))
     
     def remoteClientVariable(self, scope, filter, var, framenr = 0):
         """
@@ -740,16 +740,15 @@
         while self.qsock and self.qsock.canReadLine():
             qs = self.qsock.readLine()
             if self.codec is not None:
-                us = self.codec.fromUnicode(unicode(qs))
+                line = self.codec.toUnicode(qs)
             else:
-                us = qs
-            line = str(us)
+                line = bytes(qs).decode()
             if line.endswith(EOT):
                 line = line[:-len(EOT)]
                 if not line:
                     continue
             
-##            print "Server: ", line          ##debug
+##            print("Server: ", line)          ##debug
             
             eoc = line.find('<') + 1
             
--- a/Debugger/DebuggerInterfaceRuby.py	Fri Jan 01 16:11:36 2010 +0000
+++ b/Debugger/DebuggerInterfaceRuby.py	Sat Jan 02 15:11:35 2010 +0000
@@ -17,8 +17,8 @@
 
 from E4Gui.E4Application import e4App
 
-from DebugProtocol import *
-import DebugClientCapabilities
+from .DebugProtocol import *
+from . import DebugClientCapabilities
 
 import Preferences
 import Utilities
@@ -118,7 +118,7 @@
         proc = QProcess()
         if environment is not None:
             env = []
-            for key, value in environment.items():
+            for key, value in list(environment.items()):
                 env.append("%s=%s" % (key, value))
             proc.setEnvironment(env)
         args = []
@@ -413,7 +413,7 @@
         wd = self.translate(wd, False)
         fn = self.translate(os.path.abspath(fn), False)
         self.__sendCommand('%s%s|%s|%s|%d\n' % \
-            (RequestLoad, wd, fn, unicode(Utilities.parseOptionString(argv)), 
+            (RequestLoad, wd, fn, str(Utilities.parseOptionString(argv)), 
              traceInterpreter))
         
     def remoteRun(self, fn, argv, wd):
@@ -427,7 +427,7 @@
         wd = self.translate(wd, False)
         fn = self.translate(os.path.abspath(fn), False)
         self.__sendCommand('%s%s|%s|%s\n' % \
-            (RequestRun, wd, fn, unicode(Utilities.parseOptionString(argv))))
+            (RequestRun, wd, fn, str(Utilities.parseOptionString(argv))))
         
     def remoteCoverage(self, fn, argv, wd, erase = False):
         """
@@ -592,7 +592,7 @@
         @param framenr framenumber of the variables to retrieve (int)
         """
         self.__sendCommand('%s%d, %d, %s\n' % \
-            (RequestVariables, framenr, scope, unicode(filter)))
+            (RequestVariables, framenr, scope, str(filter)))
         
     def remoteClientVariable(self, scope, filter, var, framenr = 0):
         """
@@ -604,7 +604,7 @@
         @param framenr framenumber of the variables to retrieve (int)
         """
         self.__sendCommand('%s%s, %d, %d, %s\n' % \
-            (RequestVariable, unicode(var), framenr, scope, str(filter)))
+            (RequestVariable, str(var), framenr, scope, str(filter)))
         
     def remoteClientSetFilter(self, scope, filter):
         """
@@ -685,16 +685,15 @@
         while self.qsock and self.qsock.canReadLine():
             qs = self.qsock.readLine()
             if self.codec is not None:
-                us = self.codec.fromUnicode(unicode(qs))
+                line = self.codec.toUnicode(qs)
             else:
-                us = qs
-            line = str(us)
+                line = bytes(qs).decode()
             if line.endswith(EOT):
                 line = line[:-len(EOT)]
                 if not line:
                     continue
             
-##            print "Server: ", line          ##debug
+##            print("Server: ", line)          ##debug
             
             eoc = line.find('<') + 1
             
--- a/Debugger/EditBreakpointDialog.py	Fri Jan 01 16:11:36 2010 +0000
+++ b/Debugger/EditBreakpointDialog.py	Sat Jan 02 15:11:35 2010 +0000
@@ -14,7 +14,7 @@
 
 from E4Gui.E4Completers import E4FileCompleter
 
-from Ui_EditBreakpointDialog import Ui_EditBreakpointDialog
+from .Ui_EditBreakpointDialog import Ui_EditBreakpointDialog
 
 import Utilities
 
--- a/Debugger/EditWatchpointDialog.py	Fri Jan 01 16:11:36 2010 +0000
+++ b/Debugger/EditWatchpointDialog.py	Sat Jan 02 15:11:35 2010 +0000
@@ -10,7 +10,7 @@
 from PyQt4.QtCore import *
 from PyQt4.QtGui import *
 
-from Ui_EditWatchpointDialog import Ui_EditWatchpointDialog
+from .Ui_EditWatchpointDialog import Ui_EditWatchpointDialog
 
 
 class EditWatchpointDialog(QDialog, Ui_EditWatchpointDialog):
--- a/Debugger/ExceptionsFilterDialog.py	Fri Jan 01 16:11:36 2010 +0000
+++ b/Debugger/ExceptionsFilterDialog.py	Sat Jan 02 15:11:35 2010 +0000
@@ -10,7 +10,7 @@
 from PyQt4.QtCore import *
 from PyQt4.QtGui import *
 
-from Ui_ExceptionsFilterDialog import Ui_ExceptionsFilterDialog
+from .Ui_ExceptionsFilterDialog import Ui_ExceptionsFilterDialog
 
 class ExceptionsFilterDialog(QDialog, Ui_ExceptionsFilterDialog):
     """
--- a/Debugger/StartDialog.py	Fri Jan 01 16:11:36 2010 +0000
+++ b/Debugger/StartDialog.py	Sat Jan 02 15:11:35 2010 +0000
@@ -60,16 +60,16 @@
         
         self.type = type
         if type == 0:
-            from Ui_StartDebugDialog import Ui_StartDebugDialog
+            from .Ui_StartDebugDialog import Ui_StartDebugDialog
             self.ui = Ui_StartDebugDialog()
         elif type == 1:
-            from Ui_StartRunDialog import Ui_StartRunDialog
+            from .Ui_StartRunDialog import Ui_StartRunDialog
             self.ui = Ui_StartRunDialog()
         elif type == 2:
-            from Ui_StartCoverageDialog import Ui_StartCoverageDialog
+            from .Ui_StartCoverageDialog import Ui_StartCoverageDialog
             self.ui = Ui_StartCoverageDialog()
         elif type == 3:
-            from Ui_StartProfileDialog import Ui_StartProfileDialog
+            from .Ui_StartProfileDialog import Ui_StartProfileDialog
             self.ui = Ui_StartProfileDialog()
         self.ui.setupUi(self)
         
--- a/Debugger/VariableDetailDialog.py	Fri Jan 01 16:11:36 2010 +0000
+++ b/Debugger/VariableDetailDialog.py	Sat Jan 02 15:11:35 2010 +0000
@@ -10,7 +10,7 @@
 from PyQt4.QtCore import *
 from PyQt4.QtGui import *
 
-from Ui_VariableDetailDialog import Ui_VariableDetailDialog
+from .Ui_VariableDetailDialog import Ui_VariableDetailDialog
 
 class VariableDetailDialog(QDialog, Ui_VariableDetailDialog):
     """
--- a/Debugger/VariablesFilterDialog.py	Fri Jan 01 16:11:36 2010 +0000
+++ b/Debugger/VariablesFilterDialog.py	Sat Jan 02 15:11:35 2010 +0000
@@ -13,7 +13,7 @@
 from Debugger.Config import ConfigVarTypeDispStrings
 import Preferences
 
-from Ui_VariablesFilterDialog import Ui_VariablesFilterDialog
+from .Ui_VariablesFilterDialog import Ui_VariablesFilterDialog
 
 
 class VariablesFilterDialog(QDialog, Ui_VariablesFilterDialog):
--- a/Debugger/VariablesViewer.py	Fri Jan 01 16:11:36 2010 +0000
+++ b/Debugger/VariablesViewer.py	Sat Jan 02 15:11:35 2010 +0000
@@ -16,8 +16,8 @@
 
 from E4Gui.E4Application import e4App
 
-from Config import ConfigVarTypeDispStrings, ConfigVarTypeStrings
-from VariableDetailDialog import VariableDetailDialog
+from .Config import ConfigVarTypeDispStrings, ConfigVarTypeStrings
+from .VariableDetailDialog import VariableDetailDialog
 from Utilities import toUnicode
 
 import Preferences
@@ -401,8 +401,7 @@
                 self.__addItem(None, vtype, var, value)
             
             # reexpand tree
-            openItems = self.openItems[:]
-            openItems.sort()
+            openItems = sorted(self.openItems[:])
             self.openItems = []
             for itemPath in openItems:
                 itm = self.__findItem(itemPath, 0)
@@ -451,8 +450,7 @@
             subelementsAdded = True
 
         # reexpand tree
-        openItems = self.openItems[:]
-        openItems.sort()
+        openItems = sorted(self.openItems[:])
         self.openItems = []
         for itemPath in openItems:
             itm = self.__findItem(itemPath, 0)
@@ -524,10 +522,11 @@
         @param s the string to be converted (string)
         @return unicode representation of s (unicode object)
         """
-        if type(s) is type(u""):
+        # TODO: remove me
+        if isinstance(s, type("")):
             return s
         try:
-            u = unicode(s, self.loc)
+            u = str(s, self.loc)
         except TypeError:
             u = str(s)
         except UnicodeError:
--- a/Debugger/WatchPointViewer.py	Fri Jan 01 16:11:36 2010 +0000
+++ b/Debugger/WatchPointViewer.py	Sat Jan 02 15:11:35 2010 +0000
@@ -12,7 +12,7 @@
 
 from E4Gui.E4Application import e4App
 
-from EditWatchpointDialog import EditWatchpointDialog
+from .EditWatchpointDialog import EditWatchpointDialog
 
 import Utilities
 
@@ -411,7 +411,7 @@
         
         @return count of items selected (integer)
         """
-        count = len(self.selectedIndexes()) / (self.__model.columnCount()-1)
+        count = len(self.selectedIndexes()) // (self.__model.columnCount()-1)
         # column count is 1 greater than selectable
         return count
     
--- a/DocumentationTools/APIGenerator.py	Fri Jan 01 16:11:36 2010 +0000
+++ b/DocumentationTools/APIGenerator.py	Sat Jan 02 15:11:35 2010 +0000
@@ -85,8 +85,7 @@
         """
         Private method to generate the api section for classes.
         """
-        classNames = self.module.classes.keys()
-        classNames.sort()
+        classNames = sorted(list(self.module.classes.keys()))
         for className in classNames:
             if not self.__isPrivate(self.module.classes[className]):
                 self.__addClassVariablesAPI(className)
@@ -99,10 +98,7 @@
         @param classname Name of the class containing the method. (string)
         """
         _class = self.module.classes[className]
-        methods = _class.methods.keys()
-        methods.sort()
-        
-        # first do the constructor
+        methods = sorted(list(_class.methods.keys()))
         if '__init__' in methods:
             methods.remove('__init__')
             if _class.isPublic():
@@ -156,8 +152,7 @@
         """
         Private method to generate the api section for functions.
         """
-        funcNames = self.module.functions.keys()
-        funcNames.sort()
+        funcNames = sorted(list(self.module.functions.keys()))
         for funcName in funcNames:
             if not self.__isPrivate(self.module.functions[funcName]): 
                 if self.module.functions[funcName].isPublic():
--- a/DocumentationTools/IndexGenerator.py	Fri Jan 01 16:11:36 2010 +0000
+++ b/DocumentationTools/IndexGenerator.py	Sat Jan 02 15:11:35 2010 +0000
@@ -10,8 +10,8 @@
 import sys
 import os
 
-import TemplatesListsStyle
-import TemplatesListsStyleCSS
+from . import TemplatesListsStyle
+from . import TemplatesListsStyleCSS
 
 from Utilities import joinext
 
@@ -131,8 +131,7 @@
         # 1) subpackages
         if package["subpackages"]:
             subpacks = package["subpackages"]
-            names = subpacks.keys()
-            names.sort()
+            names = sorted(list(subpacks.keys()))
             lst = []
             for name in names:
                 link = joinext("index-%s" % name, ".html")
@@ -148,8 +147,7 @@
         # 2) modules
         if package["modules"]:
             mods = package["modules"]
-            names = mods.keys()
-            names.sort()
+            names = sorted(list(mods.keys()))
             lst = []
             for name in names:
                 link = joinext(name, ".html")
@@ -176,7 +174,7 @@
               } + \
               self.footerTemplate
     
-        f = open(filename, "wb")
+        f = open(filename, "w")
         f.write(doc)
         f.close()
     
@@ -198,12 +196,12 @@
             basename = basename.replace(os.sep, ".")
             if not basename.endswith("."):
                 basename = "%s." % basename
-        for package, element in self.packages.items():
+        for package, element in list(self.packages.items()):
             try:
                 if basename:
                     package = package.replace(basename,"")
                 out = self.__writeIndex(package, element)
-            except IOError, v:
+            except IOError as v:
                 sys.stderr.write("%s error: %s\n" % (package, v[1]))
             else:
                 if out:
--- a/DocumentationTools/ModuleDocumentor.py	Fri Jan 01 16:11:36 2010 +0000
+++ b/DocumentationTools/ModuleDocumentor.py	Sat Jan 02 15:11:35 2010 +0000
@@ -14,8 +14,8 @@
 import sys
 import re
 
-import TemplatesListsStyle
-import TemplatesListsStyleCSS
+from . import TemplatesListsStyle
+from . import TemplatesListsStyleCSS
 
 from Utilities import html_uencode
 from Utilities.ModuleParser import RB_SOURCE
@@ -234,7 +234,7 @@
                     'ClassList' : classList,
                     'FunctionList' : functionList,
                 }
-        except TagError, e:
+        except TagError as e:
             sys.stderr.write("Error in tags of description of module %s.\n" % \
                 self.module.name)
             sys.stderr.write("%s\n" % e)
@@ -300,8 +300,7 @@
         
         @return The classes list section. (string)
         """
-        names = self.module.classes.keys()
-        names.sort()
+        names = sorted(list(self.module.classes.keys()))
         if names:
             self.empty = False
             s = self.__genListSection(names, self.module.classes)
@@ -318,8 +317,7 @@
         
         @return The modules list section. (string)
         """
-        names = self.module.modules.keys()
-        names.sort()
+        names = sorted(list(self.module.modules.keys()))
         if names:
             self.empty = False
             s = self.__genListSection(names, self.module.modules)
@@ -335,8 +333,7 @@
         
         @return The functions list section. (string)
         """
-        names = self.module.functions.keys()
-        names.sort()
+        names = sorted(list(self.module.functions.keys()))
         if names:
             self.empty = False
             s = self.__genListSection(names, self.module.functions)
@@ -352,8 +349,7 @@
         
         @return The classes details section. (string)
         """
-        classNames = self.module.classes.keys()
-        classNames.sort()
+        classNames = sorted(list(self.module.classes.keys()))
         classes = []
         for className in classNames:
             _class = self.module.classes[className]
@@ -376,7 +372,7 @@
                     'MethodList' : methList,
                     'MethodDetails' : methBodies,
                 }
-            except TagError, e:
+            except TagError as e:
                 sys.stderr.write("Error in tags of description of class %s.\n" % \
                     className)
                 sys.stderr.write("%s\n" % e)
@@ -432,10 +428,7 @@
         """
         methList = []
         methBodies = []
-        methods = obj.methods.keys()
-        methods.sort()
-        
-        # first do the constructor
+        methods = sorted(list(obj.methods.keys()))
         if '__init__' in methods:
             methods.remove('__init__')
             try:
@@ -447,7 +440,7 @@
                         self.__formatDescription(obj.methods['__init__'].description),
                     'Params' : ', '.join(obj.methods['__init__'].parameters[1:]),
                 }
-            except TagError, e:
+            except TagError as e:
                 sys.stderr.write("Error in tags of description of method %s.%s.\n" % \
                     (className, '__init__'))
                 sys.stderr.write("%s\n" % e)
@@ -464,7 +457,7 @@
                         self.__formatDescription(obj.methods[method].description),
                     'Params' : ', '.join(obj.methods[method].parameters[1:]),
                 }
-            except TagError, e:
+            except TagError as e:
                 sys.stderr.write("Error in tags of description of method %s.%s.\n" % \
                     (className, method))
                 sys.stderr.write("%s\n" % e)
@@ -485,8 +478,7 @@
         
         @return The Ruby modules details section. (string)
         """
-        rbModulesNames = self.module.modules.keys()
-        rbModulesNames.sort()
+        rbModulesNames = sorted(list(self.module.modules.keys()))
         rbModules = []
         for rbModuleName in rbModulesNames:
             rbModule = self.module.modules[rbModuleName]
@@ -506,7 +498,7 @@
                     'FunctionsList' : methList,
                     'FunctionsDetails' : methBodies,
                 }
-            except TagError, e:
+            except TagError as e:
                 sys.stderr.write("Error in tags of description of Ruby module %s.\n" % \
                     rbModuleName)
                 sys.stderr.write("%s\n" % e)
@@ -524,8 +516,7 @@
         @param modName Name of the Ruby module containing the classes. (string)
         @return The classes list and classes details section. (tuple of two string)
         """
-        classNames = obj.classes.keys()
-        classNames.sort()
+        classNames = sorted(list(obj.classes.keys()))
         classes = []
         for className in classNames:
             _class = obj.classes[className]
@@ -547,7 +538,7 @@
                     'MethodList' : methList,
                     'MethodDetails' : methBodies,
                 }
-            except TagError, e:
+            except TagError as e:
                 sys.stderr.write("Error in tags of description of class %s.\n" % \
                     className)
                 sys.stderr.write("%s\n" % e)
@@ -594,8 +585,7 @@
         @return The functions details section. (string)
         """
         funcBodies = []
-        funcNames = self.module.functions.keys()
-        funcNames.sort()
+        funcNames = sorted(list(self.module.functions.keys()))
         for funcName in funcNames:
             try:
                 funcBody = self.functionTemplate % { \
@@ -605,7 +595,7 @@
                         self.module.functions[funcName].description),
                     'Params' : ', '.join(self.module.functions[funcName].parameters),
                 }
-            except TagError, e:
+            except TagError as e:
                 sys.stderr.write("Error in tags of description of function %s.\n" % \
                     funcName)
                 sys.stderr.write("%s\n" % e)
@@ -709,8 +699,7 @@
         @return The list section. (string)
         """
         lst = []
-        keys = dictionary.keys()
-        keys.sort()
+        keys = sorted(list(dictionary.keys()))
         for key in keys:
             lst.append(template % { \
                 'Name' : key,
@@ -795,21 +784,21 @@
         while start != -1:
             stop = desc.find('}', start + 2)
             if stop == -1:
-                raise TagError, "Unterminated inline tag.\n%s" % desc
+                raise TagError("Unterminated inline tag.\n%s" % desc)
             
             tagText = desc[start + 1:stop]
             if tagText.startswith('@link'):
                 parts = tagText.split(None, 1)
                 if len(parts) < 2:
-                    raise TagError, "Wrong format in inline tag %s.\n%s" % \
-                                    (parts[0], desc)
+                    raise TagError("Wrong format in inline tag %s.\n%s" % \
+                                    (parts[0], desc))
                 
                 formattedTag = self.__formatCrossReferenceEntry(parts[1])
                 desc = desc.replace("{%s}" % tagText, formattedTag)
             else:
                 tag = tagText.split(None, 1)[0]
-                raise TagError, "Unknown inline tag encountered, %s.\n%s" % \
-                                (tag, desc)
+                raise TagError("Unknown inline tag encountered, %s.\n%s" % \
+                                (tag, desc))
             
             start = desc.find('{@')
         
@@ -851,7 +840,7 @@
                     inTagSection = True
                     parts = desc.split(None, 2)
                     if len(parts) < 2:
-                        raise TagError, "Wrong format in %s line.\n" % parts[0]
+                        raise TagError("Wrong format in %s line.\n" % parts[0])
                     paramName = parts[1]
                     if parts[0] == "@keyparam":
                         paramName += '='
@@ -864,7 +853,7 @@
                     inTagSection = True
                     parts = desc.split(None, 1)
                     if len(parts) < 2:
-                        raise TagError, "Wrong format in %s line.\n" % parts[0]
+                        raise TagError("Wrong format in %s line.\n" % parts[0])
                     returns = [parts[1]]
                     lastItem = returns
                 elif desc.startswith("@exception") or \
@@ -873,7 +862,7 @@
                     inTagSection = True
                     parts = desc.split(None, 2)
                     if len(parts) < 2:
-                        raise TagError, "Wrong format in %s line.\n" % parts[0]
+                        raise TagError("Wrong format in %s line.\n" % parts[0])
                     excName = parts[1]
                     try:
                         exceptionDict[excName] = [parts[2]]
@@ -884,7 +873,7 @@
                     inTagSection = True
                     m = _signal(desc,0)
                     if m is None:
-                        raise TagError, "Wrong format in %s line.\n" % parts[0]
+                        raise TagError("Wrong format in %s line.\n" % parts[0])
                     signalName = 1 and m.group("SignalName1") \
                                    or m.group("SignalName2")
                     signalDesc = 1 and m.group("SignalDescription1") \
@@ -897,7 +886,7 @@
                     inTagSection = True
                     m = _event(desc,0)
                     if m is None:
-                        raise TagError, "Wrong format in %s line.\n" % parts[0]
+                        raise TagError("Wrong format in %s line.\n" % parts[0])
                     eventName = 1 and m.group("EventName1") \
                                    or m.group("EventName2")
                     eventDesc = 1 and m.group("EventDescription1") \
@@ -910,35 +899,35 @@
                     inTagSection = True
                     parts = desc.split(None, 1)
                     if len(parts) < 2:
-                        raise TagError, "Wrong format in %s line.\n" % parts[0]
+                        raise TagError("Wrong format in %s line.\n" % parts[0])
                     deprecated = [parts[1]]
                     lastItem = deprecated
                 elif desc.startswith("@author"):
                     inTagSection = True
                     parts = desc.split(None, 1)
                     if len(parts) < 2:
-                        raise TagError, "Wrong format in %s line.\n" % parts[0]
+                        raise TagError("Wrong format in %s line.\n" % parts[0])
                     authorInfo = [parts[1]]
                     lastItem = authorInfo
                 elif desc.startswith("@since"):
                     inTagSection = True
                     parts = desc.split(None, 1)
                     if len(parts) < 2:
-                        raise TagError, "Wrong format in %s line.\n" % parts[0]
+                        raise TagError("Wrong format in %s line.\n" % parts[0])
                     sinceInfo = [parts[1]]
                     lastItem = sinceInfo
                 elif desc.startswith("@see"):
                     inTagSection = True
                     parts = desc.split(None, 1)
                     if len(parts) < 2:
-                        raise TagError, "Wrong format in %s line.\n" % parts[0]
+                        raise TagError("Wrong format in %s line.\n" % parts[0])
                     seeList.append([parts[1]])
                     lastItem = seeList[-1]
                 elif desc.startswith("@@"):
                     lastItem.append(desc[1:])
                 elif desc.startswith("@"):
                     tag = desc.split(None, 1)[0]
-                    raise TagError, "Unknown tag encountered, %s.\n" % tag
+                    raise TagError("Unknown tag encountered, %s.\n" % tag)
                 else:
                     lastItem.append(ditem)
             elif not inTagSection:
--- a/E4Graphics/E4GraphicsView.py	Fri Jan 01 16:11:36 2010 +0000
+++ b/E4Graphics/E4GraphicsView.py	Sat Jan 02 15:11:35 2010 +0000
@@ -133,11 +133,11 @@
         @param border border width to include in the calculation (integer)
         @return the minimum rectangle (QRectF)
         """
-        startx = sys.maxint
-        starty = sys.maxint
+        startx = sys.maxsize
+        starty = sys.maxsize
         endx = 0
         endy = 0
-        items = self.filteredItems(self.scene().items())
+        items = self.filteredItems(list(self.scene().items()))
         for itm in items:
             rect = itm.sceneBoundingRect()
             itmEndX = rect.x() + rect.width()
@@ -169,7 +169,7 @@
         """
         endx = 0
         endy = 0
-        items = self.filteredItems(self.scene().items())
+        items = self.filteredItems(list(self.scene().items()))
         for itm in items:
             rect = itm.sceneBoundingRect()
             itmEndX = rect.x() + rect.width()
--- a/E4Gui/E4Action.py	Fri Jan 01 16:11:36 2010 +0000
+++ b/E4Gui/E4Action.py	Sat Jan 02 15:11:35 2010 +0000
@@ -22,7 +22,7 @@
         """
         Constructor
         """
-        self.errorMessage = unicode(error)
+        self.errorMessage = str(error)
         
     def __repr__(self):
         """
@@ -30,7 +30,7 @@
         
         @return string representing the error message
         """
-        return unicode(self.errorMessage)
+        return str(self.errorMessage)
         
     def __str__(self):
         """
--- a/E4Gui/E4Application.py	Fri Jan 01 16:11:36 2010 +0000
+++ b/E4Gui/E4Application.py	Sat Jan 02 15:11:35 2010 +0000
@@ -33,7 +33,7 @@
         @param object reference to the object
         @exception KeyError raised when the given name is already in use
         """
-        if self.__objectRegistry.has_key(name):
+        if name in self.__objectRegistry:
             raise KeyError('Object "%s" already registered.' % name)
         else:
             self.__objectRegistry[name] = object
@@ -46,7 +46,7 @@
         @return reference to the registered object
         @exception KeyError raised when the given name is not known
         """
-        if self.__objectRegistry.has_key(name):
+        if name in self.__objectRegistry:
             return self.__objectRegistry[name]
         else:
             raise KeyError('Object "%s" is not registered.' % name)
@@ -60,7 +60,7 @@
         @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):
+        if name in self.__pluginObjectRegistry:
             raise KeyError('Pluginobject "%s" already registered.' % name)
         else:
             self.__pluginObjectRegistry[name] = (object, pluginType)
@@ -71,7 +71,7 @@
         
         @param name name of the plugin object (string)
         """
-        if self.__pluginObjectRegistry.has_key(name):
+        if name in self.__pluginObjectRegistry:
             del self.__pluginObjectRegistry[name]
         
     def getPluginObject(self, name):
@@ -82,7 +82,7 @@
         @return reference to the registered plugin object
         @exception KeyError raised when the given name is not known
         """
-        if self.__pluginObjectRegistry.has_key(name):
+        if name in self.__pluginObjectRegistry:
             return self.__pluginObjectRegistry[name][0]
         else:
             raise KeyError('Pluginobject "%s" is not registered.' % name)
@@ -107,7 +107,7 @@
         @return type of the plugin object (string)
         @exception KeyError raised when the given name is not known
         """
-        if self.__pluginObjectRegistry.has_key(name):
+        if name in self.__pluginObjectRegistry:
             return self.__pluginObjectRegistry[name][1]
         else:
             raise KeyError('Pluginobject "%s" is not registered.' % name)
--- a/E4Gui/E4ModelToolBar.py	Fri Jan 01 16:11:36 2010 +0000
+++ b/E4Gui/E4ModelToolBar.py	Sat Jan 02 15:11:35 2010 +0000
@@ -10,7 +10,7 @@
 from PyQt4.QtCore import *
 from PyQt4.QtGui import *
 
-from E4ModelMenu import E4ModelMenu
+from .E4ModelMenu import E4ModelMenu
 
 class E4ModelToolBar(QToolBar):
     """
--- a/E4Gui/E4ToolBarDialog.py	Fri Jan 01 16:11:36 2010 +0000
+++ b/E4Gui/E4ToolBarDialog.py	Sat Jan 02 15:11:35 2010 +0000
@@ -10,7 +10,7 @@
 from PyQt4.QtGui import *
 from PyQt4.QtCore import *
 
-from Ui_E4ToolBarDialog import Ui_E4ToolBarDialog
+from .Ui_E4ToolBarDialog import Ui_E4ToolBarDialog
 
 import UI.PixmapCache
 
@@ -78,7 +78,7 @@
                 item.setText(0, action.text())
                 item.setIcon(0, action.icon())
                 item.setTextAlignment(0, Qt.AlignLeft | Qt.AlignVCenter)
-                item.setData(0, E4ToolBarDialog.ActionIdRole, long(id(action)))
+                item.setData(0, E4ToolBarDialog.ActionIdRole, int(id(action)))
                 item.setData(0, E4ToolBarDialog.WidgetActionRole, False)
                 if self.__manager.isWidgetAction(action):
                     item.setData(0, E4ToolBarDialog.WidgetActionRole, True)
@@ -86,7 +86,7 @@
                     self.__widgetActionToToolBarItemID[id(action)] = None
             categoryItem.setExpanded(True)
         
-        for tbID, actions in self.__manager.toolBarsActions().items():
+        for tbID, actions in list(self.__manager.toolBarsActions().items()):
             tb = self.__manager.toolBarById(tbID)
             default = self.__manager.isDefaultToolBar(tb)
             tbItem = E4ToolBarItem(tbID, [], default)
@@ -103,7 +103,7 @@
                         self.__widgetActionToToolBarItemID[aID] = id(tbItem)
                         self.__toolBarItemToWidgetActionID[id(tbItem)].append(aID)
             tbItem.actionIDs = actionIDs
-            self.toolbarComboBox.addItem(tb.windowTitle(), long(id(tbItem)))
+            self.toolbarComboBox.addItem(tb.windowTitle(), int(id(tbItem)))
             if default:
                 self.toolbarComboBox.setItemData(self.toolbarComboBox.count() - 1, 
                     QColor(Qt.darkGreen), Qt.ForegroundRole)
@@ -139,7 +139,7 @@
             tbItem.isChanged = True
             self.__toolbarItems[id(tbItem)] = tbItem
             self.__toolBarItemToWidgetActionID[id(tbItem)] = []
-            self.toolbarComboBox.addItem(name, long(id(tbItem)))
+            self.toolbarComboBox.addItem(name, int(id(tbItem)))
             self.toolbarComboBox.model().sort(0)
             self.toolbarComboBox.setCurrentIndex(self.toolbarComboBox.findText(name))
     
@@ -241,7 +241,7 @@
                 item.setText(action.text())
                 item.setIcon(action.icon())
                 item.setTextAlignment(Qt.AlignLeft | Qt.AlignVCenter)
-                item.setData(E4ToolBarDialog.ActionIdRole, long(id(action)))
+                item.setData(E4ToolBarDialog.ActionIdRole, int(id(action)))
                 item.setData(E4ToolBarDialog.WidgetActionRole, False)
                 if self.__manager.isWidgetAction(action):
                     item.setData(E4ToolBarDialog.WidgetActionRole, True)
@@ -335,7 +335,7 @@
             item.setText(action.text())
             item.setIcon(action.icon())
             item.setTextAlignment(Qt.AlignLeft | Qt.AlignVCenter)
-            item.setData(E4ToolBarDialog.ActionIdRole, long(id(action)))
+            item.setData(E4ToolBarDialog.ActionIdRole, int(id(action)))
             item.setData(E4ToolBarDialog.WidgetActionRole, False)
             if self.__manager.isWidgetAction(action):
                 item.setData(E4ToolBarDialog.WidgetActionRole, True)
@@ -386,7 +386,7 @@
         self.__removedToolBarIDs = []
         
         # step 2: save configured toolbars
-        for tbItem in self.__toolbarItems.values():
+        for tbItem in list(self.__toolbarItems.values()):
             if not tbItem.isChanged:
                 continue
             
--- a/E4Gui/E4ToolBarManager.py	Fri Jan 01 16:11:36 2010 +0000
+++ b/E4Gui/E4ToolBarManager.py	Sat Jan 02 15:11:35 2010 +0000
@@ -55,7 +55,7 @@
         @param name object name of the toolbar (string)
         @return reference to the toolbar (QToolBar)
         """
-        for toolBar in self.__allToolBars.values():
+        for toolBar in list(self.__allToolBars.values()):
             if toolBar.objectName() == name:
                 return toolBar
         return None
@@ -68,12 +68,12 @@
         @return reference to the action (QAction)
         """
         # check objectName() first
-        for action in self.__allActions.values():
+        for action in list(self.__allActions.values()):
             if action.objectName() == name:
                 return action
         
         # check text() next
-        for action in self.__allActions.values():
+        for action in list(self.__allActions.values()):
             if action.text() == name:
                 return action
         
@@ -188,7 +188,7 @@
         @param toolBars dictionary with toolbar id as key and
             a list of actions as value
         """
-        for key, actions in toolBars.items():
+        for key, actions in list(toolBars.items()):
             tb = self.__allToolBars[key]
             self.setToolBar(tb, actions)
     
@@ -278,7 +278,7 @@
         
         @return list of all default toolbars (list of QToolBar)
         """
-        return self.__defaultToolBars.values()
+        return list(self.__defaultToolBars.values())
     
     def isDefaultToolBar(self, toolBar):
         """
@@ -370,7 +370,7 @@
         
         @return list of all toolbars (list of QToolBar)
         """
-        return self.__allToolBars.values()
+        return list(self.__allToolBars.values())
     
     def addAction(self, action, category):
         """
@@ -450,18 +450,18 @@
         for tbID in self.__defaultToolBars:
             tb = self.__allToolBars[tbID]
             if tb.objectName():
-                stream.writeString(tb.objectName())
+                stream.writeString(tb.objectName().encode())
             else:
-                stream.writeString(tb.windowTitle())
+                stream.writeString(tb.windowTitle().encode())
             stream.writeUInt16(len(self.__toolBars[tbID]))
             for action in self.__toolBars[tbID]:
                 if action is not None:
                     if action.objectName():
-                        stream.writeString(action.objectName())
+                        stream.writeString(action.objectName().encode())
                     else:
-                        stream.writeString(action.text())
+                        stream.writeString(action.text().encode())
                 else:
-                    stream.writeString("")
+                    stream.writeString("".encode())
         
         # save the custom toolbars
         stream.writeUInt16(E4ToolBarManager.CustomToolBarMarker)
@@ -469,17 +469,17 @@
         for tbID in self.__toolBars:
             if tbID not in self.__defaultToolBars:
                 tb = self.__allToolBars[tbID]
-                stream.writeString(tb.objectName())
-                stream.writeString(tb.windowTitle())
+                stream.writeString(tb.objectName().encode())
+                stream.writeString(tb.windowTitle().encode())
                 stream.writeUInt16(len(self.__toolBars[tbID]))
                 for action in self.__toolBars[tbID]:
                     if action is not None:
                         if action.objectName():
-                            stream.writeString(action.objectName())
+                            stream.writeString(action.objectName().encode())
                         else:
-                            stream.writeString(action.text())
+                            stream.writeString(action.text().encode())
                     else:
-                        stream.writeString("")
+                        stream.writeString("".encode())
         
         return data
     
@@ -507,11 +507,11 @@
         
         toolBarCount = stream.readUInt16()
         for i in range(toolBarCount):
-            objectName = stream.readString()
+            objectName = stream.readString().decode()
             actionCount = stream.readUInt16()
             actions = []
             for j in range(actionCount):
-                actionName = stream.readString()
+                actionName = stream.readString().decode()
                 if actionName:
                     action = self.__findAction(actionName)
                     if action is not None:
@@ -530,12 +530,12 @@
         
         toolBarCount = stream.readUInt16()
         for i in range(toolBarCount):
-            objectName = stream.readString()
-            toolBarTitle = stream.readString()
+            objectName = stream.readString().decode()
+            toolBarTitle = stream.readString().decode()
             actionCount = stream.readUInt16()
             actions = []
             for j in range(actionCount):
-                actionName = stream.readString()
+                actionName = stream.readString().decode()
                 if actionName:
                     action = self.__findAction(actionName)
                     if action is not None:
@@ -576,7 +576,7 @@
         @param actions dictionary with toolbar id as key and
             a list of widget actions as value
         """
-        for tbID in actions.keys()[:]:
+        for tbID in list(actions.keys())[:]:
             toolBar = self.__allToolBars[tbID]
             newActions = self.__toolBars[tbID][:]
             newActionsWithSeparators = self.__toolBarsWithSeparators[tbID][:]
@@ -611,7 +611,7 @@
         
         @return list of categories (list of string)
         """
-        return self.__categoryToActions.keys()
+        return list(self.__categoryToActions.keys())
     
     def categoryActions(self, category):
         """
--- a/E4Gui/E4ToolBox.py	Fri Jan 01 16:11:36 2010 +0000
+++ b/E4Gui/E4ToolBox.py	Sat Jan 02 15:11:35 2010 +0000
@@ -9,7 +9,7 @@
 
 from PyQt4.QtGui import QToolBox, QTabWidget
 
-from E4TabWidget import E4TabWidget
+from .E4TabWidget import E4TabWidget
 
 class E4VerticalToolBox(QToolBox):
     """
--- a/E4Network/E4NetworkHeaderDetailsDialog.py	Fri Jan 01 16:11:36 2010 +0000
+++ b/E4Network/E4NetworkHeaderDetailsDialog.py	Sat Jan 02 15:11:35 2010 +0000
@@ -10,7 +10,7 @@
 from PyQt4.QtGui import QDialog
 from PyQt4.QtCore import pyqtSlot
 
-from Ui_E4NetworkHeaderDetailsDialog import Ui_E4NetworkHeaderDetailsDialog
+from .Ui_E4NetworkHeaderDetailsDialog import Ui_E4NetworkHeaderDetailsDialog
 
 class E4NetworkHeaderDetailsDialog(QDialog, Ui_E4NetworkHeaderDetailsDialog):
     """
--- a/E4Network/E4NetworkMonitor.py	Fri Jan 01 16:11:36 2010 +0000
+++ b/E4Network/E4NetworkMonitor.py	Sat Jan 02 15:11:35 2010 +0000
@@ -13,9 +13,9 @@
 
 import UI.PixmapCache
 
-from E4NetworkHeaderDetailsDialog import E4NetworkHeaderDetailsDialog
+from .E4NetworkHeaderDetailsDialog import E4NetworkHeaderDetailsDialog
 
-from Ui_E4NetworkMonitor import Ui_E4NetworkMonitor
+from .Ui_E4NetworkMonitor import Ui_E4NetworkMonitor
 
 class E4NetworkRequest(object):
     """
@@ -292,7 +292,7 @@
         self.requests[offset].contentType = reply.header(QNetworkRequest.ContentTypeHeader)
         
         if status == 302:
-            target = reply.attribute(QNetworkRequest.RedirectionTargetAttribute)
+            target = reply.attribute(QNetworkRequest.RedirectionTargetAttribute) or QUrl()
             self.requests[offset].info = \
                 self.trUtf8("Redirect: {0}").format(target.toString())
     
--- a/E4XML/DebuggerPropertiesHandler.py	Fri Jan 01 16:11:36 2010 +0000
+++ b/E4XML/DebuggerPropertiesHandler.py	Sat Jan 02 15:11:35 2010 +0000
@@ -7,8 +7,8 @@
 Module implementing the handler class for reading an XML project debugger properties file.
 """
 
-from Config import debuggerPropertiesFileFormatVersion
-from XMLHandlerBase import XMLHandlerBase
+from .Config import debuggerPropertiesFileFormatVersion
+from .XMLHandlerBase import XMLHandlerBase
 
 class DebuggerPropertiesHandler(XMLHandlerBase):
     """
--- a/E4XML/DebuggerPropertiesWriter.py	Fri Jan 01 16:11:36 2010 +0000
+++ b/E4XML/DebuggerPropertiesWriter.py	Sat Jan 02 15:11:35 2010 +0000
@@ -12,8 +12,8 @@
 
 from E4Gui.E4Application import e4App
 
-from XMLWriterBase import XMLWriterBase
-from Config import debuggerPropertiesFileFormatVersion
+from .XMLWriterBase import XMLWriterBase
+from .Config import debuggerPropertiesFileFormatVersion
 
 import Preferences
 
--- a/E4XML/HighlightingStylesHandler.py	Fri Jan 01 16:11:36 2010 +0000
+++ b/E4XML/HighlightingStylesHandler.py	Sat Jan 02 15:11:35 2010 +0000
@@ -9,8 +9,8 @@
 
 from PyQt4.QtGui import QColor, QFont
 
-from Config import highlightingStylesFileFormatVersion
-from XMLHandlerBase import XMLHandlerBase
+from .Config import highlightingStylesFileFormatVersion
+from .XMLHandlerBase import XMLHandlerBase
 
 class HighlightingStylesHandler(XMLHandlerBase):
     """
--- a/E4XML/HighlightingStylesWriter.py	Fri Jan 01 16:11:36 2010 +0000
+++ b/E4XML/HighlightingStylesWriter.py	Sat Jan 02 15:11:35 2010 +0000
@@ -12,8 +12,8 @@
 
 from E4Gui.E4Application import e4App
 
-from XMLWriterBase import XMLWriterBase
-from Config import highlightingStylesFileFormatVersion
+from .XMLWriterBase import XMLWriterBase
+from .Config import highlightingStylesFileFormatVersion
 
 import Preferences
 
--- a/E4XML/MultiProjectHandler.py	Fri Jan 01 16:11:36 2010 +0000
+++ b/E4XML/MultiProjectHandler.py	Sat Jan 02 15:11:35 2010 +0000
@@ -7,8 +7,8 @@
 Module implementing the handler class for reading an XML multi project file.
 """
 
-from Config import multiProjectFileFormatVersion
-from XMLHandlerBase import XMLHandlerBase
+from .Config import multiProjectFileFormatVersion
+from .XMLHandlerBase import XMLHandlerBase
 
 import Utilities
 
--- a/E4XML/MultiProjectWriter.py	Fri Jan 01 16:11:36 2010 +0000
+++ b/E4XML/MultiProjectWriter.py	Sat Jan 02 15:11:35 2010 +0000
@@ -12,8 +12,8 @@
 
 from E4Gui.E4Application import e4App
 
-from XMLWriterBase import XMLWriterBase
-from Config import multiProjectFileFormatVersion
+from .XMLWriterBase import XMLWriterBase
+from .Config import multiProjectFileFormatVersion
 
 import Preferences
 import Utilities
--- a/E4XML/PluginRepositoryHandler.py	Fri Jan 01 16:11:36 2010 +0000
+++ b/E4XML/PluginRepositoryHandler.py	Sat Jan 02 15:11:35 2010 +0000
@@ -7,8 +7,8 @@
 Module implementing the handler class for reading an XML tasks file.
 """
 
-from Config import pluginRepositoryFileFormatVersion
-from XMLHandlerBase import XMLHandlerBase
+from .Config import pluginRepositoryFileFormatVersion
+from .XMLHandlerBase import XMLHandlerBase
 
 import Preferences
 
--- a/E4XML/ProjectHandler.py	Fri Jan 01 16:11:36 2010 +0000
+++ b/E4XML/ProjectHandler.py	Sat Jan 02 15:11:35 2010 +0000
@@ -9,8 +9,8 @@
 
 import os
 
-from Config import projectFileFormatVersion
-from XMLHandlerBase import XMLHandlerBase
+from .Config import projectFileFormatVersion
+from .XMLHandlerBase import XMLHandlerBase
 
 import Utilities
 
--- a/E4XML/ProjectWriter.py	Fri Jan 01 16:11:36 2010 +0000
+++ b/E4XML/ProjectWriter.py	Sat Jan 02 15:11:35 2010 +0000
@@ -12,8 +12,8 @@
 
 from E4Gui.E4Application import e4App
 
-from XMLWriterBase import XMLWriterBase
-from Config import projectFileFormatVersion
+from .XMLWriterBase import XMLWriterBase
+from .Config import projectFileFormatVersion
 
 import Preferences
 import Utilities
@@ -164,7 +164,7 @@
         
         # do the filetype associations
         self._write("  <FiletypeAssociations>")
-        for pattern, filetype in self.pdata["FILETYPES"].items():
+        for pattern, filetype in list(self.pdata["FILETYPES"].items()):
             self._write('    <FiletypeAssociation pattern="%s" type="%s" />' % \
                 (pattern, filetype))
         self._write("  </FiletypeAssociations>")
@@ -172,7 +172,7 @@
         # do the lexer associations
         if self.pdata["LEXERASSOCS"]:
             self._write("  <LexerAssociations>")
-            for pattern, lexer in self.pdata["LEXERASSOCS"].items():
+            for pattern, lexer in list(self.pdata["LEXERASSOCS"].items()):
                 self._write('    <LexerAssociation pattern="%s" lexer="%s" />' % \
                     (pattern, lexer))
             self._write("  </LexerAssociations>")
--- a/E4XML/SessionHandler.py	Fri Jan 01 16:11:36 2010 +0000
+++ b/E4XML/SessionHandler.py	Sat Jan 02 15:11:35 2010 +0000
@@ -9,8 +9,8 @@
 
 from E4Gui.E4Application import e4App
 
-from Config import sessionFileFormatVersion
-from XMLHandlerBase import XMLHandlerBase
+from .Config import sessionFileFormatVersion
+from .XMLHandlerBase import XMLHandlerBase
 
 class SessionHandler(XMLHandlerBase):
     """
--- a/E4XML/SessionWriter.py	Fri Jan 01 16:11:36 2010 +0000
+++ b/E4XML/SessionWriter.py	Sat Jan 02 15:11:35 2010 +0000
@@ -12,8 +12,8 @@
 
 from E4Gui.E4Application import e4App
 
-from XMLWriterBase import XMLWriterBase
-from Config import sessionFileFormatVersion
+from .XMLWriterBase import XMLWriterBase
+from .Config import sessionFileFormatVersion
 
 import Preferences
 
--- a/E4XML/ShortcutsHandler.py	Fri Jan 01 16:11:36 2010 +0000
+++ b/E4XML/ShortcutsHandler.py	Sat Jan 02 15:11:35 2010 +0000
@@ -7,8 +7,8 @@
 Module implementing the handler class for reading a keyboard shortcuts file.
 """
 
-from Config import shortcutsFileFormatVersion
-from XMLHandlerBase import XMLHandlerBase
+from .Config import shortcutsFileFormatVersion
+from .XMLHandlerBase import XMLHandlerBase
 
 class ShortcutsHandler(XMLHandlerBase):
     """
@@ -75,7 +75,7 @@
         Handler method for the "Shortcut" end tag.
         """
         if self.category:
-            if not self.shortcuts.has_key(self.category):
+            if self.category not in self.shortcuts:
                 self.shortcuts[self.category] = {}
             self.shortcuts[self.category][self.name] = (self.accel, self.altAccel)
         
--- a/E4XML/ShortcutsWriter.py	Fri Jan 01 16:11:36 2010 +0000
+++ b/E4XML/ShortcutsWriter.py	Sat Jan 02 15:11:35 2010 +0000
@@ -11,8 +11,8 @@
 
 from E4Gui.E4Application import e4App
 
-from XMLWriterBase import XMLWriterBase
-from Config import shortcutsFileFormatVersion
+from .XMLWriterBase import XMLWriterBase
+from .Config import shortcutsFileFormatVersion
 
 import Preferences
 
--- a/E4XML/TasksHandler.py	Fri Jan 01 16:11:36 2010 +0000
+++ b/E4XML/TasksHandler.py	Sat Jan 02 15:11:35 2010 +0000
@@ -12,8 +12,8 @@
 
 from E4Gui.E4Application import e4App
 
-from Config import tasksFileFormatVersion
-from XMLHandlerBase import XMLHandlerBase
+from .Config import tasksFileFormatVersion
+from .XMLHandlerBase import XMLHandlerBase
 
 import Utilities
 
--- a/E4XML/TasksWriter.py	Fri Jan 01 16:11:36 2010 +0000
+++ b/E4XML/TasksWriter.py	Sat Jan 02 15:11:35 2010 +0000
@@ -12,8 +12,8 @@
 
 from E4Gui.E4Application import e4App
 
-from XMLWriterBase import XMLWriterBase
-from Config import tasksFileFormatVersion
+from .XMLWriterBase import XMLWriterBase
+from .Config import tasksFileFormatVersion
 
 import Preferences
 import Utilities
--- a/E4XML/TemplatesHandler.py	Fri Jan 01 16:11:36 2010 +0000
+++ b/E4XML/TemplatesHandler.py	Sat Jan 02 15:11:35 2010 +0000
@@ -12,8 +12,8 @@
 
 from E4Gui.E4Application import e4App
 
-from Config import templatesFileFormatVersion
-from XMLHandlerBase import XMLHandlerBase
+from .Config import templatesFileFormatVersion
+from .XMLHandlerBase import XMLHandlerBase
 
 class TemplatesHandler(XMLHandlerBase):
     """
--- a/E4XML/TemplatesWriter.py	Fri Jan 01 16:11:36 2010 +0000
+++ b/E4XML/TemplatesWriter.py	Sat Jan 02 15:11:35 2010 +0000
@@ -10,8 +10,8 @@
 import os
 import time
 
-from XMLWriterBase import XMLWriterBase
-from Config import templatesFileFormatVersion
+from .XMLWriterBase import XMLWriterBase
+from .Config import templatesFileFormatVersion
 
 class TemplatesWriter(XMLWriterBase):
     """
--- a/E4XML/UserProjectHandler.py	Fri Jan 01 16:11:36 2010 +0000
+++ b/E4XML/UserProjectHandler.py	Sat Jan 02 15:11:35 2010 +0000
@@ -9,8 +9,8 @@
 
 import os
 
-from Config import userProjectFileFormatVersion
-from XMLHandlerBase import XMLHandlerBase
+from .Config import userProjectFileFormatVersion
+from .XMLHandlerBase import XMLHandlerBase
 
 import Preferences
 
--- a/E4XML/UserProjectWriter.py	Fri Jan 01 16:11:36 2010 +0000
+++ b/E4XML/UserProjectWriter.py	Sat Jan 02 15:11:35 2010 +0000
@@ -11,8 +11,8 @@
 
 from E4Gui.E4Application import e4App
 
-from XMLWriterBase import XMLWriterBase
-from Config import userProjectFileFormatVersion
+from .XMLWriterBase import XMLWriterBase
+from .Config import userProjectFileFormatVersion
 
 import Preferences
 
--- a/E4XML/XMLErrorHandler.py	Fri Jan 01 16:11:36 2010 +0000
+++ b/E4XML/XMLErrorHandler.py	Sat Jan 02 15:11:35 2010 +0000
@@ -10,7 +10,7 @@
 from xml.sax.handler import ErrorHandler
 from xml.sax import SAXParseException
 
-from XMLMessageDialog import XMLMessageDialog
+from .XMLMessageDialog import XMLMessageDialog
 
 class XMLParseError(Exception):
     """
--- a/E4XML/XMLHandlerBase.py	Fri Jan 01 16:11:36 2010 +0000
+++ b/E4XML/XMLHandlerBase.py	Sat Jan 02 15:11:35 2010 +0000
@@ -8,11 +8,8 @@
 """
 
 import sys
-from types import UnicodeType
-try:
-    import cPickle as pickle
-except ImportError:
-    import pickle
+##from types import UnicodeType
+import pickle as pickle
 
 from xml.sax.handler import ContentHandler
 
@@ -45,8 +42,8 @@
         self.stack = []
         self._marker = '__MARKER__'
         
-        self.NEWPARA = unichr(0x2029)
-        self.NEWLINE = unichr(0x2028)
+        self.NEWPARA = chr(0x2029)
+        self.NEWLINE = chr(0x2028)
         
     def utf8_to_code(self, text):
         """
@@ -54,8 +51,9 @@
         
         @param text the text to encode (string)
         """
-        if type(text) is not UnicodeType:
-            text = unicode(text, "utf-8")
+        # TODO: convert calls to this method to not use it anymore
+##        if not isinstance(text, UnicodeType):
+##            text = str(text, "utf-8")
         return text
         
     def unescape(self, text, attribute = False):
@@ -158,7 +156,7 @@
         """
         Handler method for the "long" end tag.
         """
-        self.stack.append(long(self.buffer.strip()))
+        self.stack.append(int(self.buffer.strip()))
         
     def endBool(self):
         """
@@ -193,7 +191,7 @@
         """
         Handler method for the "unicode" end tag.
         """
-        u = unicode(self.utf8_to_code(self.unescape(self.buffer)))
+        u = str(self.utf8_to_code(self.unescape(self.buffer)))
         self.stack.append(u)
         
     def startList(self, attrs):
--- a/E4XML/XMLMessageDialog.py	Fri Jan 01 16:11:36 2010 +0000
+++ b/E4XML/XMLMessageDialog.py	Sat Jan 02 15:11:35 2010 +0000
@@ -10,7 +10,7 @@
 from PyQt4.QtCore import *
 from PyQt4.QtGui import *
 
-from Ui_XMLMessageDialog import Ui_XMLMessageDialog
+from .Ui_XMLMessageDialog import Ui_XMLMessageDialog
 
 
 class XMLMessageDialog(QDialog, Ui_XMLMessageDialog):
--- a/E4XML/XMLWriterBase.py	Fri Jan 01 16:11:36 2010 +0000
+++ b/E4XML/XMLWriterBase.py	Sat Jan 02 15:11:35 2010 +0000
@@ -8,11 +8,7 @@
 """
 
 import os
-from types import *
-try:
-    import cPickle as pickle
-except ImportError:
-    import pickle
+import pickle
 
 class XMLWriterBase(object):
     """
@@ -27,21 +23,21 @@
         self.pf = file
         
         self.basics = {
-            NoneType    : self._write_none,
-            IntType     : self._write_int,
-            LongType    : self._write_long,
-            FloatType   : self._write_float,
-            ComplexType : self._write_complex,
-            BooleanType : self._write_bool,
-            StringType  : self._write_string,
-            UnicodeType : self._write_unicode,
-            TupleType   : self._write_tuple,
-            ListType    : self._write_list,
-            DictType    : self._write_dictionary,
+            type(None) : self._write_none,
+            type(1)    : self._write_int,
+            type(1.1)  : self._write_float,
+            type(1+1j) : self._write_complex,
+            type(True) : self._write_bool,
+            type("")   : self._write_string,
+##            UnicodeType : self._write_unicode,  # should be bytes
+            type((1,)) : self._write_tuple,
+            type([])   : self._write_list,
+            type({})   : self._write_dictionary,
+            # TODO: add set
         }
         
-        self.NEWPARA = unichr(0x2029)
-        self.NEWLINE = unichr(0x2028)
+        self.NEWPARA = chr(0x2029)
+        self.NEWLINE = chr(0x2028)
         
     def _write(self, s, newline = True):
         """
@@ -50,7 +46,8 @@
         @param s string to be written to the XML file
         @param newline flag indicating a linebreak
         """
-        self.pf.write("%s%s" % (s.encode('utf-8'), 
+##        self.pf.write("%s%s" % (s.encode('utf-8'), 
+        self.pf.write("%s%s" % (s, 
             newline and os.linesep or ""))
         
     def writeXML(self):
@@ -163,6 +160,7 @@
         """
         self._write('%s<string>%s</string>' % ("  " * indent, self.escape(value)))
         
+    # TODO: add method for writing bytes
     def _write_unicode(self, value, indent):
         """
         Protected method to dump an UnicodeType object.
@@ -208,8 +206,7 @@
         self._write('%s<dict>' % ("  " * indent))
         nindent1 = indent + 1
         nindent2 = indent + 2
-        keys = value.keys()
-        keys.sort()
+        keys = sorted(list(value.keys()))
         for key in keys:
             self._write('%s<key>' % ("  " * nindent1))
             self._writeBasics(key, nindent2)
--- a/Examples/hallo.py	Fri Jan 01 16:11:36 2010 +0000
+++ b/Examples/hallo.py	Sat Jan 02 15:11:35 2010 +0000
@@ -3,7 +3,7 @@
 import sys
 
 def main():
-    print "Hello World!"
+    print("Hello World!")
     sys.exit(0)
     
 if __name__ == "__main__":
--- a/Examples/rhallo.py	Fri Jan 01 16:11:36 2010 +0000
+++ b/Examples/rhallo.py	Sat Jan 02 15:11:35 2010 +0000
@@ -5,7 +5,7 @@
 import eric4dbgstub
 
 def main():
-    print "Hello World!"
+    print("Hello World!")
     sys.exit(0)
     
 if __name__ == "__main__":
--- a/Graphics/ApplicationDiagram.py	Fri Jan 01 16:11:36 2010 +0000
+++ b/Graphics/ApplicationDiagram.py	Sat Jan 02 15:11:35 2010 +0000
@@ -13,10 +13,10 @@
 from PyQt4.QtCore import *
 from PyQt4.QtGui import *
 
-from UMLDialog import UMLDialog
-from PackageItem import PackageItem, PackageModel
-from AssociationItem import AssociationItem, Imports
-import GraphicsUtilities
+from .UMLDialog import UMLDialog
+from .PackageItem import PackageItem, PackageModel
+from .AssociationItem import AssociationItem, Imports
+from . import GraphicsUtilities
 
 import Utilities.ModuleParser
 import Utilities
@@ -130,7 +130,7 @@
                         n = "%s.%s" % (project, i)
                         if n in modules:
                             impLst.append(n)
-            for i in modules[module].from_imports.keys():
+            for i in list(modules[module].from_imports.keys()):
                 if i.startswith('.'):
                     dots = len(i) - len(i.lstrip('.'))
                     if dots == 1:
--- a/Graphics/ClassItem.py	Fri Jan 01 16:11:36 2010 +0000
+++ b/Graphics/ClassItem.py	Sat Jan 02 15:11:35 2010 +0000
@@ -10,7 +10,7 @@
 from PyQt4.QtCore import *
 from PyQt4.QtGui import *
 
-from UMLItem import UMLItem
+from .UMLItem import UMLItem
 
 class ClassModel(object):
     """
--- a/Graphics/GraphicsUtilities.py	Fri Jan 01 16:11:36 2010 +0000
+++ b/Graphics/GraphicsUtilities.py	Sat Jan 02 15:11:35 2010 +0000
@@ -42,7 +42,7 @@
         stage.append(nodes[0])
     
     taken.extend(stage)
-    nodes = filter(lambda x, l = stage: x not in l, nodes)
+    nodes = list(filter(lambda x, l = stage: x not in l, nodes))
     while nodes:
         previousStageChildren = []
         nodelen = len(nodes)
@@ -73,7 +73,7 @@
         
         stages.append(stage)
         taken.extend(stage)
-        nodes = filter(lambda x, l = stage: x not in l, nodes)
+        nodes = list(filter(lambda x, l = stage: x not in l, nodes))
         if nodelen == len(nodes):
             if noRecursion:
                 raise recursionError(nodes)
--- a/Graphics/ImportsDiagram.py	Fri Jan 01 16:11:36 2010 +0000
+++ b/Graphics/ImportsDiagram.py	Sat Jan 02 15:11:35 2010 +0000
@@ -14,10 +14,10 @@
 from PyQt4.QtCore import *
 from PyQt4.QtGui import *
 
-from UMLDialog import UMLDialog
-from ModuleItem import ModuleItem, ModuleModel
-from AssociationItem import AssociationItem, Imports
-import GraphicsUtilities
+from .UMLDialog import UMLDialog
+from .ModuleItem import ModuleItem, ModuleModel
+from .AssociationItem import AssociationItem, Imports
+from . import GraphicsUtilities
 
 import Utilities.ModuleParser
 import Utilities
@@ -130,7 +130,7 @@
                     impLst.append(n)
                     if not n in externalMods:
                         externalMods.append(n)
-            for i in modules[module].from_imports.keys():
+            for i in list(modules[module].from_imports.keys()):
                 if i.startswith('.'):
                     dots = len(i) - len(i.lstrip('.'))
                     if dots == 1:
@@ -153,7 +153,7 @@
                     if not n in externalMods:
                         externalMods.append(n)
             classNames = []
-            for cls in modules[module].classes.keys():
+            for cls in list(modules[module].classes.keys()):
                 className = modules[module].classes[cls].name
                 if className not in classNames:
                     classNames.append(className)
@@ -219,7 +219,7 @@
         
         @param shapes list of shapes
         """
-        for module in shapes.keys():
+        for module in list(shapes.keys()):
             for rel in shapes[module][1]:
                 assoc = AssociationItem(\
                         shapes[module][0], shapes[rel][0],
--- a/Graphics/ModuleItem.py	Fri Jan 01 16:11:36 2010 +0000
+++ b/Graphics/ModuleItem.py	Sat Jan 02 15:11:35 2010 +0000
@@ -10,7 +10,7 @@
 from PyQt4.QtCore import *
 from PyQt4.QtGui import *
 
-from UMLItem import UMLItem
+from .UMLItem import UMLItem
 
 class ModuleModel(object):
     """
--- a/Graphics/PackageDiagram.py	Fri Jan 01 16:11:36 2010 +0000
+++ b/Graphics/PackageDiagram.py	Sat Jan 02 15:11:35 2010 +0000
@@ -13,10 +13,10 @@
 from PyQt4.QtCore import *
 from PyQt4.QtGui import *
 
-from UMLDialog import UMLDialog
-from ClassItem import ClassItem, ClassModel
-from AssociationItem import AssociationItem, Generalisation
-import GraphicsUtilities
+from .UMLDialog import UMLDialog
+from .ClassItem import ClassItem, ClassModel
+from .AssociationItem import AssociationItem, Generalisation
+from . import GraphicsUtilities
 
 import Utilities.ModuleParser
 import Utilities
@@ -118,9 +118,9 @@
         # step 1: build all classes found in the modules
         classesFound = False
         
-        for modName in modules.keys():
+        for modName in list(modules.keys()):
             module = modules[modName]
-            for cls in module.classes.keys():
+            for cls in list(module.classes.keys()):
                 classesFound = True
                 self.__addLocalClass(cls, module.classes[cls], 0, 0)
         if not classesFound:
@@ -134,12 +134,12 @@
         routes = []
         nodes = []
         
-        for modName in modules.keys():
+        for modName in list(modules.keys()):
             module = modules[modName]
             todo = [module.createHierarchy()]
             while todo:
                 hierarchy = todo[0]
-                for className in hierarchy.keys():
+                for className in list(hierarchy.keys()):
                     cw = self.__getCurrentShape(className)
                     if not cw and className.find('.') >= 0:
                         cw = self.__getCurrentShape(className.split('.')[-1])
@@ -168,7 +168,7 @@
                     
                     if hierarchy.get(className):
                         todo.append(hierarchy.get(className))
-                        children = hierarchy.get(className).keys()
+                        children = list(hierarchy.get(className).keys())
                         for child in children:
                             if (className, child) not in routes:
                                 routes.append((className, child))
--- a/Graphics/PackageItem.py	Fri Jan 01 16:11:36 2010 +0000
+++ b/Graphics/PackageItem.py	Sat Jan 02 15:11:35 2010 +0000
@@ -10,7 +10,7 @@
 from PyQt4.QtCore import *
 from PyQt4.QtGui import *
 
-from UMLItem import UMLItem
+from .UMLItem import UMLItem
 
 class PackageModel(object):
     """
--- a/Graphics/PixmapDiagram.py	Fri Jan 01 16:11:36 2010 +0000
+++ b/Graphics/PixmapDiagram.py	Sat Jan 02 15:11:35 2010 +0000
@@ -10,7 +10,7 @@
 from PyQt4.QtCore import *
 from PyQt4.QtGui import *
 
-from ZoomDialog import ZoomDialog
+from .ZoomDialog import ZoomDialog
 
 import UI.Config
 
--- a/Graphics/SvgDiagram.py	Fri Jan 01 16:11:36 2010 +0000
+++ b/Graphics/SvgDiagram.py	Sat Jan 02 15:11:35 2010 +0000
@@ -11,7 +11,7 @@
 from PyQt4.QtGui import *
 from PyQt4.QtSvg import QSvgWidget
 
-from ZoomDialog import ZoomDialog
+from .ZoomDialog import ZoomDialog
 
 import UI.Config
 
--- a/Graphics/UMLClassDiagram.py	Fri Jan 01 16:11:36 2010 +0000
+++ b/Graphics/UMLClassDiagram.py	Sat Jan 02 15:11:35 2010 +0000
@@ -12,10 +12,10 @@
 
 import Utilities.ModuleParser
 
-from UMLDialog import UMLDialog
-from ClassItem import ClassItem, ClassModel
-from AssociationItem import AssociationItem, Generalisation
-import GraphicsUtilities
+from .UMLDialog import UMLDialog
+from .ClassItem import ClassItem, ClassModel
+from .AssociationItem import AssociationItem, Generalisation
+from . import GraphicsUtilities
 
 class UMLClassDiagram(UMLDialog):
     """
@@ -69,7 +69,7 @@
                     .format(self.file))
             return
         
-        if not self.allModules.has_key(self.file):
+        if self.file not in self.allModules:
             self.allModules[self.file] = []
         
         routes = []
@@ -113,7 +113,7 @@
                 
                 if hierarchy.get(className):
                     todo.append(hierarchy.get(className))
-                    children = hierarchy.get(className).keys()
+                    children = list(hierarchy.get(className).keys())
                     for child in children:
                         if (className, child) not in routes:
                             routes.append((className, child))
--- a/Graphics/UMLDialog.py	Fri Jan 01 16:11:36 2010 +0000
+++ b/Graphics/UMLDialog.py	Sat Jan 02 15:11:35 2010 +0000
@@ -10,7 +10,7 @@
 from PyQt4.QtCore import *
 from PyQt4.QtGui import *
 
-from UMLGraphicsView import UMLGraphicsView
+from .UMLGraphicsView import UMLGraphicsView
 
 import UI.Config
 import UI.PixmapCache
--- a/Graphics/UMLGraphicsView.py	Fri Jan 01 16:11:36 2010 +0000
+++ b/Graphics/UMLGraphicsView.py	Sat Jan 02 15:11:35 2010 +0000
@@ -14,9 +14,9 @@
 
 from E4Graphics.E4GraphicsView import E4GraphicsView
 
-from UMLItem import UMLItem
-from UMLSceneSizeDialog import UMLSceneSizeDialog
-from ZoomDialog import ZoomDialog
+from .UMLItem import UMLItem
+from .UMLSceneSizeDialog import UMLSceneSizeDialog
+from .ZoomDialog import ZoomDialog
 
 import UI.Config
 import UI.PixmapCache
@@ -356,7 +356,7 @@
         Private method to handle the re-layout context menu entry.
         """
         scene = self.scene()
-        for itm in scene.items()[:]:
+        for itm in list(scene.items())[:]:
             if itm.scene() == scene:
                 scene.removeItem(itm)
         self.emit(SIGNAL("relayout()"))
@@ -473,16 +473,16 @@
                 xOffset = (rect.x() + rect.width()) - \
                           (itemrect.x() + itemrect.width())
             elif alignment == Qt.AlignHCenter:
-                xOffset = (rect.x() + rect.width() / 2) - \
-                          (itemrect.x() + itemrect.width() / 2)
+                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)
+                yOffset = (rect.y() + rect.height() // 2) - \
+                          (itemrect.y() + itemrect.height() // 2)
             item.moveBy(xOffset, yOffset)
         
         self.scene().update()
--- a/Graphics/UMLSceneSizeDialog.py	Fri Jan 01 16:11:36 2010 +0000
+++ b/Graphics/UMLSceneSizeDialog.py	Sat Jan 02 15:11:35 2010 +0000
@@ -9,7 +9,7 @@
 
 from PyQt4.QtGui import QDialog
 
-from Ui_UMLSceneSizeDialog import Ui_UMLSceneSizeDialog
+from .Ui_UMLSceneSizeDialog import Ui_UMLSceneSizeDialog
 
 
 class UMLSceneSizeDialog(QDialog, Ui_UMLSceneSizeDialog):
--- a/Graphics/ZoomDialog.py	Fri Jan 01 16:11:36 2010 +0000
+++ b/Graphics/ZoomDialog.py	Sat Jan 02 15:11:35 2010 +0000
@@ -9,7 +9,7 @@
 
 from PyQt4.QtGui import QDialog
 
-from Ui_ZoomDialog import Ui_ZoomDialog
+from .Ui_ZoomDialog import Ui_ZoomDialog
 
 class ZoomDialog(QDialog, Ui_ZoomDialog):
     """
--- a/Helpviewer/AdBlock/AdBlockAccessHandler.py	Fri Jan 01 16:11:36 2010 +0000
+++ b/Helpviewer/AdBlock/AdBlockAccessHandler.py	Sat Jan 02 15:11:35 2010 +0000
@@ -10,7 +10,7 @@
 from PyQt4.QtGui import QMessageBox
 from PyQt4.QtNetwork import QNetworkAccessManager
 
-from AdBlockSubscription import AdBlockSubscription
+from .AdBlockSubscription import AdBlockSubscription
 
 import Helpviewer.HelpWindow
 from Helpviewer.Network.SchemeAccessHandler import SchemeAccessHandler
--- a/Helpviewer/AdBlock/AdBlockDialog.py	Fri Jan 01 16:11:36 2010 +0000
+++ b/Helpviewer/AdBlock/AdBlockDialog.py	Sat Jan 02 15:11:35 2010 +0000
@@ -14,10 +14,10 @@
 
 import Helpviewer.HelpWindow
 
-from Ui_AdBlockDialog import Ui_AdBlockDialog
+from .Ui_AdBlockDialog import Ui_AdBlockDialog
 
-from AdBlockModel import AdBlockModel
-from AdBlockRule import AdBlockRule
+from .AdBlockModel import AdBlockModel
+from .AdBlockRule import AdBlockRule
 
 import UI.PixmapCache
 
--- a/Helpviewer/AdBlock/AdBlockManager.py	Fri Jan 01 16:11:36 2010 +0000
+++ b/Helpviewer/AdBlock/AdBlockManager.py	Sat Jan 02 15:11:35 2010 +0000
@@ -13,10 +13,10 @@
 
 import Helpviewer.HelpWindow
 
-from AdBlockNetwork import AdBlockNetwork
-from AdBlockPage import AdBlockPage
-from AdBlockSubscription import AdBlockSubscription
-from AdBlockDialog import AdBlockDialog
+from .AdBlockNetwork import AdBlockNetwork
+from .AdBlockPage import AdBlockPage
+from .AdBlockSubscription import AdBlockSubscription
+from .AdBlockDialog import AdBlockDialog
 
 from Utilities.AutoSaver import AutoSaver
 import Utilities
@@ -114,7 +114,7 @@
         @return URL for custom subscriptions (QUrl)
         """
         location = self.__customSubscriptionLocation()
-        encodedUrl = unicode(location.toEncoded())
+        encodedUrl = bytes(location.toEncoded()).decode()
         url = QUrl("abp:subscribe?location=%s&title=%s" % \
             (encodedUrl, self.trUtf8("Custom Rules")))
         return url
@@ -195,7 +195,7 @@
         for subscription in self.__subscriptions:
             if subscription is None:
                 continue
-            subscriptions.append(unicode(subscription.url().toEncoded()))
+            subscriptions.append(bytes(subscription.url().toEncoded()).decode())
             subscription.saveRules()
         Preferences.setHelp("AdBlockSubscriptions", subscriptions)
     
@@ -212,7 +212,7 @@
         
         defaultSubscriptions = []
         defaultSubscriptions.append(
-            unicode(self.__customSubscriptionUrl().toEncoded()))
+            bytes(self.__customSubscriptionUrl().toEncoded()).decode())
         defaultSubscriptions.append(
             "abp:subscribe?location=http://adblockplus.mozdev.org/easylist/easylist.txt&title=EasyList")
         
--- a/Helpviewer/AdBlock/AdBlockModel.py	Fri Jan 01 16:11:36 2010 +0000
+++ b/Helpviewer/AdBlock/AdBlockModel.py	Sat Jan 02 15:11:35 2010 +0000
@@ -245,7 +245,7 @@
                 self.disconnect(self.__manager, SIGNAL("rulesChanged()"), 
                                 self.__rulesChanged)
                 self.beginRemoveRows(parent, row, row + count - 1)
-                for i in reversed(range(row, row + count)):
+                for i in reversed(list(range(row, row + count))):
                     sub.removeRule(i)
                 self.endRemoveRows()
                 self.connect(self.__manager, SIGNAL("rulesChanged()"), 
--- a/Helpviewer/AdBlock/AdBlockNetwork.py	Fri Jan 01 16:11:36 2010 +0000
+++ b/Helpviewer/AdBlock/AdBlockNetwork.py	Sat Jan 02 15:11:35 2010 +0000
@@ -11,7 +11,7 @@
 
 import Helpviewer.HelpWindow
 
-from AdBlockBlockedNetworkReply import AdBlockBlockedNetworkReply
+from .AdBlockBlockedNetworkReply import AdBlockBlockedNetworkReply
 
 class AdBlockNetwork(QObject):
     """
@@ -32,7 +32,7 @@
         if not manager.isEnabled():
             return None
         
-        urlString = unicode(url.toEncoded())
+        urlString = bytes(url.toEncoded()).decode()
         blockedRule = None
         blockingSubscription = None
         
--- a/Helpviewer/AdBlock/AdBlockSubscription.py	Fri Jan 01 16:11:36 2010 +0000
+++ b/Helpviewer/AdBlock/AdBlockSubscription.py	Sat Jan 02 15:11:35 2010 +0000
@@ -13,7 +13,7 @@
 from PyQt4.QtNetwork import QNetworkRequest, QNetworkReply
 from PyQt4.QtGui import QMessageBox
 
-from AdBlockRule import AdBlockRule
+from .AdBlockRule import AdBlockRule
 
 import Helpviewer.HelpWindow
 
@@ -87,7 +87,7 @@
         url.setPath("subscribe")
         
         queryItems = []
-        queryItems.append(("location", unicode(self.__location)))
+        queryItems.append(("location", str(self.__location)))
         queryItems.append(("title", self.__title))
         if self.__enabled:
             queryItems.append(("enabled", "false"))
@@ -250,7 +250,7 @@
         reply = self.sender()
         
         response = reply.readAll()
-        redirect = reply.attribute(QNetworkRequest.RedirectionTargetAttribute)
+        redirect = reply.attribute(QNetworkRequest.RedirectionTargetAttribute) or QUrl()
         reply.close()
         reply.deleteLater()
         
--- a/Helpviewer/Bookmarks/AddBookmarkDialog.py	Fri Jan 01 16:11:36 2010 +0000
+++ b/Helpviewer/Bookmarks/AddBookmarkDialog.py	Sat Jan 02 15:11:35 2010 +0000
@@ -12,9 +12,9 @@
 
 import Helpviewer.HelpWindow
 
-from BookmarkNode import BookmarkNode
+from .BookmarkNode import BookmarkNode
 
-from Ui_AddBookmarkDialog import Ui_AddBookmarkDialog
+from .Ui_AddBookmarkDialog import Ui_AddBookmarkDialog
 
 class AddBookmarkProxyModel(QSortFilterProxyModel):
     """
--- a/Helpviewer/Bookmarks/BookmarksDialog.py	Fri Jan 01 16:11:36 2010 +0000
+++ b/Helpviewer/Bookmarks/BookmarksDialog.py	Sat Jan 02 15:11:35 2010 +0000
@@ -13,10 +13,10 @@
 from E4Gui.E4TreeSortFilterProxyModel import E4TreeSortFilterProxyModel
 
 import Helpviewer.HelpWindow
-from BookmarkNode import BookmarkNode
-from BookmarksModel import BookmarksModel
+from .BookmarkNode import BookmarkNode
+from .BookmarksModel import BookmarksModel
 
-from Ui_BookmarksDialog import Ui_BookmarksDialog
+from .Ui_BookmarksDialog import Ui_BookmarksDialog
 
 import UI.PixmapCache
 
--- a/Helpviewer/Bookmarks/BookmarksManager.py	Fri Jan 01 16:11:36 2010 +0000
+++ b/Helpviewer/Bookmarks/BookmarksManager.py	Sat Jan 02 15:11:35 2010 +0000
@@ -13,11 +13,11 @@
 from PyQt4.QtGui import *
 from PyQt4.QtWebKit import QWebPage
 
-from BookmarkNode import BookmarkNode
-from BookmarksModel import BookmarksModel
-from DefaultBookmarks import DefaultBookmarks
-from XbelReader import XbelReader
-from XbelWriter import XbelWriter
+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
@@ -348,7 +348,7 @@
                 return
             
             webpage = QWebPage()
-            webpage.mainFrame().setHtml(unicode(inFile.readAll()))
+            webpage.mainFrame().setHtml(inFile.readAll())
             result = webpage.mainFrame().evaluateJavaScript(extract_js)
             buffer_ = QBuffer(result)
             buffer_.open(QIODevice.ReadOnly)
--- a/Helpviewer/Bookmarks/BookmarksMenu.py	Fri Jan 01 16:11:36 2010 +0000
+++ b/Helpviewer/Bookmarks/BookmarksMenu.py	Sat Jan 02 15:11:35 2010 +0000
@@ -14,8 +14,8 @@
 
 import Helpviewer.HelpWindow
 
-from BookmarksModel import BookmarksModel
-from BookmarkNode import BookmarkNode
+from .BookmarksModel import BookmarksModel
+from .BookmarkNode import BookmarkNode
 
 class BookmarksMenu(E4ModelMenu):
     """
--- a/Helpviewer/Bookmarks/BookmarksModel.py	Fri Jan 01 16:11:36 2010 +0000
+++ b/Helpviewer/Bookmarks/BookmarksModel.py	Sat Jan 02 15:11:35 2010 +0000
@@ -9,9 +9,9 @@
 
 from PyQt4.QtCore import *
 
-from BookmarkNode import BookmarkNode
-from XbelWriter import XbelWriter
-from XbelReader import XbelReader
+from .BookmarkNode import BookmarkNode
+from .XbelWriter import XbelWriter
+from .XbelReader import XbelReader
 
 import Helpviewer.HelpWindow
 
@@ -382,7 +382,7 @@
                 return False
             
             node = BookmarkNode(BookmarkNode.Bookmark, parentNode)
-            node.url = unicode(data.urls()[0].toEncoded())
+            node.url = bytes(data.urls()[0].toEncoded()).decode()
             
             if data.hasText():
                 node.title = data.text()
--- a/Helpviewer/Bookmarks/BookmarksToolBar.py	Fri Jan 01 16:11:36 2010 +0000
+++ b/Helpviewer/Bookmarks/BookmarksToolBar.py	Sat Jan 02 15:11:35 2010 +0000
@@ -14,10 +14,10 @@
 
 import Helpviewer.HelpWindow
 
-from BookmarksModel import BookmarksModel
-from BookmarkNode import BookmarkNode
-from BookmarksMenu import BookmarksMenu
-from AddBookmarkDialog import AddBookmarkDialog
+from .BookmarksModel import BookmarksModel
+from .BookmarkNode import BookmarkNode
+from .BookmarksMenu import BookmarksMenu
+from .AddBookmarkDialog import AddBookmarkDialog
 
 import UI.PixmapCache
 
--- a/Helpviewer/Bookmarks/XbelReader.py	Fri Jan 01 16:11:36 2010 +0000
+++ b/Helpviewer/Bookmarks/XbelReader.py	Sat Jan 02 15:11:35 2010 +0000
@@ -9,7 +9,7 @@
 
 from PyQt4.QtCore import *
 
-from BookmarkNode import BookmarkNode
+from .BookmarkNode import BookmarkNode
 
 class XmlEntityResolver(QXmlStreamEntityResolver):
     """
--- a/Helpviewer/Bookmarks/XbelWriter.py	Fri Jan 01 16:11:36 2010 +0000
+++ b/Helpviewer/Bookmarks/XbelWriter.py	Sat Jan 02 15:11:35 2010 +0000
@@ -9,7 +9,7 @@
 
 from PyQt4.QtCore import *
 
-from BookmarkNode import BookmarkNode
+from .BookmarkNode import BookmarkNode
 
 class XbelWriter(QXmlStreamWriter):
     """
--- a/Helpviewer/CookieJar/CookieDetailsDialog.py	Fri Jan 01 16:11:36 2010 +0000
+++ b/Helpviewer/CookieJar/CookieDetailsDialog.py	Sat Jan 02 15:11:35 2010 +0000
@@ -10,7 +10,7 @@
 from PyQt4.QtGui import QDialog
 from PyQt4.QtCore import pyqtSlot
 
-from Ui_CookieDetailsDialog import Ui_CookieDetailsDialog
+from .Ui_CookieDetailsDialog import Ui_CookieDetailsDialog
 
 class CookieDetailsDialog(QDialog, Ui_CookieDetailsDialog):
     """
--- a/Helpviewer/CookieJar/CookieExceptionsModel.py	Fri Jan 01 16:11:36 2010 +0000
+++ b/Helpviewer/CookieJar/CookieExceptionsModel.py	Sat Jan 02 15:11:35 2010 +0000
@@ -10,7 +10,7 @@
 from PyQt4.QtCore import *
 from PyQt4.QtGui import *
 
-from CookieJar import CookieJar
+from .CookieJar import CookieJar
 
 class CookieExceptionsModel(QAbstractTableModel):
     """
@@ -46,7 +46,7 @@
         """
         if role == Qt.SizeHintRole:
             fm = QFontMetrics(QFont())
-            height = fm.height() + fm.height() / 3
+            height = fm.height() + fm.height() // 3
             width = \
                 fm.width(self.headerData(section, orientation, Qt.DisplayRole))
             return QSize(width, height)
--- a/Helpviewer/CookieJar/CookieModel.py	Fri Jan 01 16:11:36 2010 +0000
+++ b/Helpviewer/CookieJar/CookieModel.py	Sat Jan 02 15:11:35 2010 +0000
@@ -46,7 +46,7 @@
         """
         if role == Qt.SizeHintRole:
             fm = QFontMetrics(QFont())
-            height = fm.height() + fm.height() / 3
+            height = fm.height() + fm.height() // 3
             width = \
                 fm.width(self.headerData(section, orientation, Qt.DisplayRole))
             return QSize(width, height)
--- a/Helpviewer/CookieJar/CookiesConfigurationDialog.py	Fri Jan 01 16:11:36 2010 +0000
+++ b/Helpviewer/CookieJar/CookiesConfigurationDialog.py	Sat Jan 02 15:11:35 2010 +0000
@@ -10,11 +10,11 @@
 from PyQt4.QtCore import *
 from PyQt4.QtGui import *
 
-from CookiesDialog import CookiesDialog
-from CookiesExceptionsDialog import CookiesExceptionsDialog
-from CookieJar import CookieJar
+from .CookiesDialog import CookiesDialog
+from .CookiesExceptionsDialog import CookiesExceptionsDialog
+from .CookieJar import CookieJar
 
-from Ui_CookiesConfigurationDialog import Ui_CookiesConfigurationDialog
+from .Ui_CookiesConfigurationDialog import Ui_CookiesConfigurationDialog
 
 import Preferences
 
--- a/Helpviewer/CookieJar/CookiesDialog.py	Fri Jan 01 16:11:36 2010 +0000
+++ b/Helpviewer/CookieJar/CookiesDialog.py	Sat Jan 02 15:11:35 2010 +0000
@@ -10,11 +10,11 @@
 from PyQt4.QtCore import *
 from PyQt4.QtGui import *
 
-from CookieModel import CookieModel
-from CookieDetailsDialog import CookieDetailsDialog
-from CookiesExceptionsDialog import CookiesExceptionsDialog
+from .CookieModel import CookieModel
+from .CookieDetailsDialog import CookieDetailsDialog
+from .CookiesExceptionsDialog import CookiesExceptionsDialog
 
-from Ui_CookiesDialog import Ui_CookiesDialog
+from .Ui_CookiesDialog import Ui_CookiesDialog
 
 import UI.PixmapCache
 
@@ -60,7 +60,7 @@
                      self.__tableModelReset)
         
         fm = QFontMetrics(QFont())
-        height = fm.height() + fm.height() / 3
+        height = fm.height() + fm.height() // 3
         self.cookiesTable.verticalHeader().setDefaultSectionSize(height)
         self.cookiesTable.verticalHeader().setMinimumSectionSize(-1)
         for section in range(model.columnCount()):
@@ -99,7 +99,7 @@
         path = model.data(model.index(row, 2))
         secure = model.data(model.index(row, 3))
         expires = model.data(model.index(row, 4)).toString("yyyy-MM-dd hh:mm")
-        value = unicode(
+        value = str(
             QByteArray.fromPercentEncoding(model.data(model.index(row, 5))))
         
         if self.__detailsDialog is None:
--- a/Helpviewer/CookieJar/CookiesExceptionsDialog.py	Fri Jan 01 16:11:36 2010 +0000
+++ b/Helpviewer/CookieJar/CookiesExceptionsDialog.py	Sat Jan 02 15:11:35 2010 +0000
@@ -10,11 +10,11 @@
 from PyQt4.QtCore import *
 from PyQt4.QtGui import *
 
-from CookieJar import CookieJar
-from CookieExceptionsModel import CookieExceptionsModel
-from CookieModel import CookieModel
+from .CookieJar import CookieJar
+from .CookieExceptionsModel import CookieExceptionsModel
+from .CookieModel import CookieModel
 
-from Ui_CookiesExceptionsDialog import Ui_CookiesExceptionsDialog
+from .Ui_CookiesExceptionsDialog import Ui_CookiesExceptionsDialog
 
 import UI.PixmapCache
 
@@ -55,7 +55,7 @@
         f = QFont()
         f.setPointSize(10)
         fm = QFontMetrics(f)
-        height = fm.height() + fm.height() / 3
+        height = fm.height() + fm.height() // 3
         self.exceptionsTable.verticalHeader().setDefaultSectionSize(height)
         self.exceptionsTable.verticalHeader().setMinimumSectionSize(-1)
         for section in range(self.__exceptionsModel.columnCount()):
--- a/Helpviewer/DownloadDialog.py	Fri Jan 01 16:11:36 2010 +0000
+++ b/Helpviewer/DownloadDialog.py	Sat Jan 02 15:11:35 2010 +0000
@@ -15,7 +15,7 @@
 
 import Helpviewer.HelpWindow
 
-from Ui_DownloadDialog import Ui_DownloadDialog
+from .Ui_DownloadDialog import Ui_DownloadDialog
 
 class DownloadDialog(QWidget, Ui_DownloadDialog):
     """
@@ -157,7 +157,7 @@
         """
         path = ""
         if self.__reply.hasRawHeader("Content-Disposition"):
-            header = unicode(self.__reply.rawHeader("Content-Disposition"))
+            header = str(self.__reply.rawHeader("Content-Disposition"))
             if header:
                 pos = header.find("filename=")
                 if pos != -1:
@@ -367,10 +367,10 @@
         if size < 1024:
             unit = self.trUtf8("bytes")
         elif size < 1024 * 1024:
-            size /= 1024
+            size //= 1024
             unit = self.trUtf8("kB")
         else:
-            size /= 1024 * 1024
+            size //= 1024 * 1024
             unit = self.trUtf8("MB")
         return "{0} {1}".format(size, unit)
     
--- a/Helpviewer/HelpBrowserWV.py	Fri Jan 01 16:11:36 2010 +0000
+++ b/Helpviewer/HelpBrowserWV.py	Sat Jan 02 15:11:35 2010 +0000
@@ -20,16 +20,16 @@
 import Utilities
 import UI.PixmapCache
 
-from DownloadDialog import DownloadDialog
-from HelpWebSearchWidget import HelpWebSearchWidget
-from Bookmarks.AddBookmarkDialog import AddBookmarkDialog
-from JavaScriptResources import fetchLinks_js
-from HTMLResources import notFoundPage_html
+from .DownloadDialog import DownloadDialog
+from .HelpWebSearchWidget import HelpWebSearchWidget
+from .Bookmarks.AddBookmarkDialog import AddBookmarkDialog
+from .JavaScriptResources import fetchLinks_js
+from .HTMLResources import notFoundPage_html
 import Helpviewer.HelpWindow
 
-from Network.NetworkAccessManagerProxy import NetworkAccessManagerProxy
+from .Network.NetworkAccessManagerProxy import NetworkAccessManagerProxy
 
-from OpenSearch.OpenSearchEngineAction import OpenSearchEngineAction
+from .OpenSearch.OpenSearchEngineAction import OpenSearchEngineAction
 
 ##########################################################################################
 
@@ -108,9 +108,9 @@
         @param searchStr search term (string)
         @return search URL (string)
         """
-        return unicode(
+        return bytes(
             HelpWebSearchWidget.openSearchManager().currentEngine()\
-            .searchUrl(searchStr).toEncoded())
+            .searchUrl(searchStr).toEncoded()).decode()
 
 ##########################################################################################
 
@@ -501,8 +501,8 @@
         @param evt reference to the wheel event (QWheelEvent)
         """
         if evt.modifiers() & Qt.ControlModifier:
-            degrees = evt.delta() / 8
-            steps = degrees / 15
+            degrees = evt.delta() // 8
+            steps = degrees // 15
             self.__currentZoom += steps * 10
             self.__applyZoom()
             evt.accept()
@@ -637,7 +637,7 @@
             return
         
         dlg = AddBookmarkDialog()
-        dlg.setUrl(unicode(url.toEncoded()))
+        dlg.setUrl(bytes(url.toEncoded()).decode())
         dlg.exec_()
     
     def __downloadLink(self):
@@ -708,7 +708,7 @@
         Private slot to bookmark the current link.
         """
         dlg = AddBookmarkDialog()
-        dlg.setUrl(unicode(self.url().toEncoded()))
+        dlg.setUrl(bytes(self.url().toEncoded()).decode())
         dlg.setTitle(self.title())
         dlg.exec_()
     
@@ -851,7 +851,7 @@
                 return
             header = reply.header(QNetworkRequest.ContentLengthHeader)
             size = header
-            if ok and size == 0:
+            if size == 0:
                 return
             
             if requestFilename is None:
@@ -866,7 +866,7 @@
                 return
             
             html = notFoundPage_html
-            urlString = unicode(replyUrl.toEncoded())
+            urlString = bytes(replyUrl.toEncoded()).decode()
             title = self.trUtf8("Error loading page: {0}").format(urlString)
             pixmap = qApp.style()\
                      .standardIcon(QStyle.SP_MessageBoxWarning, None, self)\
@@ -875,7 +875,7 @@
             imageBuffer.open(QIODevice.ReadWrite)
             if pixmap.save(imageBuffer, "PNG"):
                 html.replace("IMAGE_BINARY_DATA_HERE", 
-                             unicode(imageBuffer.buffer().toBase64()))
+                             str(imageBuffer.buffer().toBase64()))
             html = html.format(
                 title, 
                 reply.errorString(), 
--- a/Helpviewer/HelpClearPrivateDataDialog.py	Fri Jan 01 16:11:36 2010 +0000
+++ b/Helpviewer/HelpClearPrivateDataDialog.py	Sat Jan 02 15:11:35 2010 +0000
@@ -10,7 +10,7 @@
 from PyQt4.QtGui import QDialog
 from PyQt4.QtCore import pyqtSlot, qVersion
 
-from Ui_HelpClearPrivateDataDialog import Ui_HelpClearPrivateDataDialog
+from .Ui_HelpClearPrivateDataDialog import Ui_HelpClearPrivateDataDialog
 
 class HelpClearPrivateDataDialog(QDialog, Ui_HelpClearPrivateDataDialog):
     """
--- a/Helpviewer/HelpIndexWidget.py	Fri Jan 01 16:11:36 2010 +0000
+++ b/Helpviewer/HelpIndexWidget.py	Sat Jan 02 15:11:35 2010 +0000
@@ -10,7 +10,7 @@
 from PyQt4.QtCore import *
 from PyQt4.QtGui import *
 
-from HelpTopicDialog import HelpTopicDialog
+from .HelpTopicDialog import HelpTopicDialog
 
 class HelpIndexWidget(QWidget):
     """
@@ -139,7 +139,7 @@
                         keyword = model.data(idx, Qt.DisplayRole)
                         links = model.linksForKeyword(keyword)
                         if len(links) == 1:
-                            self.__mw.newTab(links.values()[0])
+                            self.__mw.newTab(list(links.values())[0])
                         elif len(links) > 1:
                             dlg = HelpTopicDialog(self, keyword, links)
                             if dlg.exec_() == QDialog.Accepted:
@@ -153,7 +153,7 @@
                     keyword = model.data(idx, Qt.DisplayRole)
                     links = model.linksForKeyword(keyword)
                     if len(links) == 1:
-                        self.__mw.newTab(links.values()[0])
+                        self.__mw.newTab(list(links.values())[0])
                     elif len(links) > 1:
                         dlg = HelpTopicDialog(self, keyword, links)
                         if dlg.exec_() == QDialog.Accepted:
--- a/Helpviewer/HelpLanguagesDialog.py	Fri Jan 01 16:11:36 2010 +0000
+++ b/Helpviewer/HelpLanguagesDialog.py	Sat Jan 02 15:11:35 2010 +0000
@@ -10,7 +10,7 @@
 from PyQt4.QtCore import *
 from PyQt4.QtGui import *
 
-from Ui_HelpLanguagesDialog import Ui_HelpLanguagesDialog
+from .Ui_HelpLanguagesDialog import Ui_HelpLanguagesDialog
 
 import Preferences
 
--- a/Helpviewer/HelpTopicDialog.py	Fri Jan 01 16:11:36 2010 +0000
+++ b/Helpviewer/HelpTopicDialog.py	Sat Jan 02 15:11:35 2010 +0000
@@ -10,7 +10,7 @@
 from PyQt4.QtGui import QDialog
 from PyQt4.QtCore import pyqtSlot, SIGNAL, QUrl
 
-from Ui_HelpTopicDialog import Ui_HelpTopicDialog
+from .Ui_HelpTopicDialog import Ui_HelpTopicDialog
 
 class HelpTopicDialog(QDialog, Ui_HelpTopicDialog):
     """
--- a/Helpviewer/HelpWebSearchWidget.py	Fri Jan 01 16:11:36 2010 +0000
+++ b/Helpviewer/HelpWebSearchWidget.py	Sat Jan 02 15:11:35 2010 +0000
@@ -20,8 +20,8 @@
 
 from E4Gui.E4LineEdit import E4LineEdit
 
-from OpenSearch.OpenSearchManager import OpenSearchManager
-from OpenSearch.OpenSearchEngineAction import OpenSearchEngineAction
+from .OpenSearch.OpenSearchManager import OpenSearchManager
+from .OpenSearch.OpenSearchEngineAction import OpenSearchEngineAction
 
 class HelpWebSearchWidget(QWidget):
     """
--- a/Helpviewer/HelpWindow.py	Fri Jan 01 16:11:36 2010 +0000
+++ b/Helpviewer/HelpWindow.py	Sat Jan 02 15:11:35 2010 +0000
@@ -15,32 +15,32 @@
 from PyQt4.QtWebKit import QWebSettings
 from PyQt4.QtHelp import QHelpEngine, QHelpEngineCore, QHelpSearchQuery
 
-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 .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
@@ -1468,7 +1468,7 @@
         elif mode == Qt.ElideLeft:
             return "...{0}".format(txt[-length:])
         elif mode == Qt.ElideMiddle:
-            return "{0}...{1}".format(txt[:length / 2], txt[-(length / 2):])
+            return "{0}...{1}".format(txt[:length // 2], txt[-(length // 2):])
         elif mode == Qt.ElideRight:
             return "{0}...".format(txt[:length])
         else:
@@ -1711,7 +1711,7 @@
         Private slot called to add the displayed file to the bookmarks.
         """
         view = self.currentBrowser()
-        url = unicode(view.url().toEncoded())
+        url = bytes(view.url().toEncoded()).decode()
         title = view.title()
         
         dlg = AddBookmarkDialog()
@@ -1766,7 +1766,7 @@
                 continue
             
             bookmark = BookmarkNode(BookmarkNode.Bookmark)
-            bookmark.url = unicode(tab.url().toEncoded())
+            bookmark.url = bytes(tab.url().toEncoded()).decode()
             bookmark.title = tab.title()
             
             self.bookmarksManager().addBookmark(folder, bookmark)
@@ -2145,7 +2145,7 @@
         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):
+        for i in list(range(self.tabWidget.count() - 1, index, -1)) + list(range(index - 1, -1, -1)):
             self.__closeAt(i)
     
     def __tabContextMenuPrint(self):
@@ -2587,7 +2587,7 @@
         @param act reference to the selected action (QAction)
         """
         index = act.data()
-        if ok:
+        if index is not None:
             self.tabWidget.setCurrentIndex(index)
         
     def __showBackMenu(self):
--- a/Helpviewer/History/HistoryCompleter.py	Fri Jan 01 16:11:36 2010 +0000
+++ b/Helpviewer/History/HistoryCompleter.py	Sat Jan 02 15:11:35 2010 +0000
@@ -10,8 +10,8 @@
 from PyQt4.QtCore import *
 from PyQt4.QtGui import *
 
-from HistoryModel import HistoryModel
-from HistoryFilterModel import HistoryFilterModel
+from .HistoryModel import HistoryModel
+from .HistoryFilterModel import HistoryFilterModel
 
 class HistoryCompletionView(QTableView):
     """
--- a/Helpviewer/History/HistoryDialog.py	Fri Jan 01 16:11:36 2010 +0000
+++ b/Helpviewer/History/HistoryDialog.py	Sat Jan 02 15:11:35 2010 +0000
@@ -13,9 +13,9 @@
 from E4Gui.E4TreeSortFilterProxyModel import E4TreeSortFilterProxyModel
 
 import Helpviewer.HelpWindow
-from HistoryModel import HistoryModel
+from .HistoryModel import HistoryModel
 
-from Ui_HistoryDialog import Ui_HistoryDialog
+from .Ui_HistoryDialog import Ui_HistoryDialog
 
 import UI.PixmapCache
 
--- a/Helpviewer/History/HistoryFilterModel.py	Fri Jan 01 16:11:36 2010 +0000
+++ b/Helpviewer/History/HistoryFilterModel.py	Sat Jan 02 15:11:35 2010 +0000
@@ -10,7 +10,7 @@
 from PyQt4.QtCore import *
 from PyQt4.QtGui import QAbstractProxyModel
 
-from HistoryModel import HistoryModel
+from .HistoryModel import HistoryModel
 
 class HistoryData(object):
     """
--- a/Helpviewer/History/HistoryManager.py	Fri Jan 01 16:11:36 2010 +0000
+++ b/Helpviewer/History/HistoryManager.py	Sat Jan 02 15:11:35 2010 +0000
@@ -11,9 +11,9 @@
 from PyQt4.QtGui import *
 from PyQt4.QtWebKit import QWebHistoryInterface, QWebSettings
 
-from HistoryModel import HistoryModel
-from HistoryFilterModel import HistoryFilterModel
-from HistoryTreeModel import HistoryTreeModel
+from .HistoryModel import HistoryModel
+from .HistoryFilterModel import HistoryFilterModel
+from .HistoryTreeModel import HistoryTreeModel
 
 from Utilities.AutoSaver import AutoSaver
 import Utilities
@@ -353,9 +353,9 @@
             if ver != HISTORY_VERSION:
                 continue
             itm = HistoryEntry()
-            itm.url = stream.readString()
+            itm.url = stream.readString().decode()
             stream >> itm.dateTime
-            itm.title = stream.readString()
+            itm.title = stream.readString().decode()
             
             if not itm.dateTime.isValid():
                 continue
@@ -422,9 +422,9 @@
             stream = QDataStream(data, QIODevice.WriteOnly)
             itm = self.__history[index]
             stream.writeUInt32(HISTORY_VERSION)
-            stream.writeString(itm.url)
+            stream.writeString(itm.url.encode())
             stream << itm.dateTime
-            stream.writeString(itm.title)
+            stream.writeString(itm.title.encode())
             f.write(data)
         
         f.close()
--- a/Helpviewer/History/HistoryMenu.py	Fri Jan 01 16:11:36 2010 +0000
+++ b/Helpviewer/History/HistoryMenu.py	Sat Jan 02 15:11:35 2010 +0000
@@ -16,8 +16,8 @@
 
 import Helpviewer.HelpWindow
 
-from HistoryModel import HistoryModel
-from HistoryDialog import HistoryDialog
+from .HistoryModel import HistoryModel
+from .HistoryDialog import HistoryDialog
 
 import UI.PixmapCache
 
@@ -80,7 +80,7 @@
                 folders -= 1
             return bumpedItems + folders
         
-        if parent.internalId() == sys.maxint:
+        if parent.internalId() == sys.maxsize:
             if parent.row() < self.bumpedRows():
                 return 0
         
@@ -112,7 +112,7 @@
         if not proxyIndex.isValid():
             return QModelIndex()
         
-        if proxyIndex.internalId() == sys.maxint:
+        if proxyIndex.internalId() == sys.maxsize:
             bumpedItems = self.bumpedRows()
             if proxyIndex.row() < bumpedItems:
                 return self.__treeModel.index(proxyIndex.row(), proxyIndex.column(), 
@@ -144,7 +144,7 @@
             return QModelIndex()
         
         if not parent.isValid():
-            return self.createIndex(row, column, sys.maxint)
+            return self.createIndex(row, column, sys.maxsize)
         
         treeIndexParent = self.mapToSource(parent)
         
@@ -166,7 +166,7 @@
         @return index of parent (QModelIndex)
         """
         offset = index.internalId()
-        if offset == sys.maxint or not index.isValid():
+        if offset == sys.maxsize or not index.isValid():
             return QModelIndex()
         
         historyIndex = self.__treeModel.sourceModel().index(index.internalId(), 0)
--- a/Helpviewer/History/HistoryTreeModel.py	Fri Jan 01 16:11:36 2010 +0000
+++ b/Helpviewer/History/HistoryTreeModel.py	Sat Jan 02 15:11:35 2010 +0000
@@ -12,7 +12,7 @@
 from PyQt4.QtCore import *
 from PyQt4.QtGui import QAbstractProxyModel
 
-from HistoryModel import HistoryModel
+from .HistoryModel import HistoryModel
 
 import UI.PixmapCache
 
--- a/Helpviewer/Network/AboutAccessHandler.py	Fri Jan 01 16:11:36 2010 +0000
+++ b/Helpviewer/Network/AboutAccessHandler.py	Sat Jan 02 15:11:35 2010 +0000
@@ -7,9 +7,9 @@
 Module implementing a scheme access handler for about schemes.
 """
 
-from SchemeAccessHandler import SchemeAccessHandler
+from .SchemeAccessHandler import SchemeAccessHandler
 
-from NetworkProtocolUnknownErrorReply import NetworkProtocolUnknownErrorReply
+from .NetworkProtocolUnknownErrorReply import NetworkProtocolUnknownErrorReply
 
 class AboutAccessHandler(SchemeAccessHandler):
     """
--- a/Helpviewer/Network/NetworkAccessManager.py	Fri Jan 01 16:11:36 2010 +0000
+++ b/Helpviewer/Network/NetworkAccessManager.py	Sat Jan 02 15:11:35 2010 +0000
@@ -25,13 +25,13 @@
 from Helpviewer.HelpLanguagesDialog import HelpLanguagesDialog
 import Helpviewer.HelpWindow
 
-from NetworkReply import NetworkReply
-from NetworkProtocolUnknownErrorReply import NetworkProtocolUnknownErrorReply
-from NetworkDiskCache import NetworkDiskCache
+from .NetworkReply import NetworkReply
+from .NetworkProtocolUnknownErrorReply import NetworkProtocolUnknownErrorReply
+from .NetworkDiskCache import NetworkDiskCache
 
-from QtHelpAccessHandler import QtHelpAccessHandler
-from PyrcAccessHandler import PyrcAccessHandler
-from AboutAccessHandler import AboutAccessHandler
+from .QtHelpAccessHandler import QtHelpAccessHandler
+from .PyrcAccessHandler import PyrcAccessHandler
+from .AboutAccessHandler import AboutAccessHandler
 
 from Helpviewer.AdBlock.AdBlockAccessHandler import AdBlockAccessHandler
 
--- a/Helpviewer/Network/NetworkReply.py	Fri Jan 01 16:11:36 2010 +0000
+++ b/Helpviewer/Network/NetworkReply.py	Sat Jan 02 15:11:35 2010 +0000
@@ -58,7 +58,7 @@
         @return string containing the data (string)
         """
         len_ = min(maxlen, self.__data.length())
-        buffer = str(self.__data[:len_])
+        buffer = bytes(self.__data[:len_])
         self.__data.remove(0, len_)
         if self.__data.length() == 0:
             QTimer.singleShot(0, self, SIGNAL("finished()"))
--- a/Helpviewer/Network/PyrcAccessHandler.py	Fri Jan 01 16:11:36 2010 +0000
+++ b/Helpviewer/Network/PyrcAccessHandler.py	Sat Jan 02 15:11:35 2010 +0000
@@ -11,10 +11,10 @@
 
 from Helpviewer.HTMLResources import startPage_html
 
-from SchemeAccessHandler import SchemeAccessHandler
+from .SchemeAccessHandler import SchemeAccessHandler
 
-from NetworkReply import NetworkReply
-from NetworkProtocolUnknownErrorReply import NetworkProtocolUnknownErrorReply
+from .NetworkReply import NetworkReply
+from .NetworkProtocolUnknownErrorReply import NetworkProtocolUnknownErrorReply
 
 import UI.PixmapCache
 
@@ -39,7 +39,7 @@
             imageBuffer.open(QIODevice.ReadWrite)
             if pixmap.save(imageBuffer, "PNG"):
                 html.replace("IMAGE_BINARY_DATA_HERE", 
-                             unicode(imageBuffer.buffer().toBase64()))
+                             str(imageBuffer.buffer().toBase64()))
             return NetworkReply(request, QByteArray(html), "text/html")
         
         return NetworkProtocolUnknownErrorReply("pyrc")
--- a/Helpviewer/Network/QtHelpAccessHandler.py	Fri Jan 01 16:11:36 2010 +0000
+++ b/Helpviewer/Network/QtHelpAccessHandler.py	Sat Jan 02 15:11:35 2010 +0000
@@ -7,9 +7,9 @@
 Module implementing a scheme access handler for QtHelp.
 """
 
-from SchemeAccessHandler import SchemeAccessHandler
+from .SchemeAccessHandler import SchemeAccessHandler
 
-from NetworkReply import NetworkReply
+from .NetworkReply import NetworkReply
 
 class QtHelpAccessHandler(SchemeAccessHandler):
     """
--- a/Helpviewer/OpenSearch/OpenSearchDialog.py	Fri Jan 01 16:11:36 2010 +0000
+++ b/Helpviewer/OpenSearch/OpenSearchDialog.py	Sat Jan 02 15:11:35 2010 +0000
@@ -14,10 +14,10 @@
 
 from Helpviewer.HelpWebSearchWidget import HelpWebSearchWidget
 
-from OpenSearchEngineModel import OpenSearchEngineModel
-from OpenSearchEditDialog import OpenSearchEditDialog
+from .OpenSearchEngineModel import OpenSearchEngineModel
+from .OpenSearchEditDialog import OpenSearchEditDialog
 
-from Ui_OpenSearchDialog import Ui_OpenSearchDialog
+from .Ui_OpenSearchDialog import Ui_OpenSearchDialog
 
 class OpenSearchDialog(QDialog, Ui_OpenSearchDialog):
     """
--- a/Helpviewer/OpenSearch/OpenSearchEditDialog.py	Fri Jan 01 16:11:36 2010 +0000
+++ b/Helpviewer/OpenSearch/OpenSearchEditDialog.py	Sat Jan 02 15:11:35 2010 +0000
@@ -9,7 +9,7 @@
 
 from PyQt4.QtGui import QDialog
 
-from Ui_OpenSearchEditDialog import Ui_OpenSearchEditDialog
+from .Ui_OpenSearchEditDialog import Ui_OpenSearchEditDialog
 
 class OpenSearchEditDialog(QDialog, Ui_OpenSearchEditDialog):
     """
--- a/Helpviewer/OpenSearch/OpenSearchEngine.py	Fri Jan 01 16:11:36 2010 +0000
+++ b/Helpviewer/OpenSearch/OpenSearchEngine.py	Sat Jan 02 15:11:35 2010 +0000
@@ -79,7 +79,7 @@
         result = result.replace("{inputEncoding}", "UTF-8")
         result = result.replace("{outputEncoding}", "UTF-8")
         result = result.replace("{searchTerms}", 
-                                unicode(QUrl.toPercentEncoding(searchTerm)))
+                                str(QUrl.toPercentEncoding(searchTerm)))
         result = re.sub(r"""\{([^\}]*:|)source\??\}""", Program, result)
 
         return result
@@ -352,7 +352,7 @@
             imageBuffer.open(QIODevice.ReadWrite)
             if image.save(imageBuffer, "PNG"):
                 self._imageUrl = "data:image/png;base64,{0}"\
-                                .format(unicode(imageBuffer.buffer().toBase64()))
+                                .format(str(imageBuffer.buffer().toBase64()))
         
         self.__image = QImage(image)
         self.emit(SIGNAL("imageChanged()"))
@@ -433,7 +433,7 @@
         """
         Private slot to receive the suggestions.
         """
-        response = unicode(self.__suggestionsReply.readAll(), "utf-8")
+        response = str(self.__suggestionsReply.readAll(), "utf-8")
         response = response.strip()
         
         self.__suggestionsReply.close()
--- a/Helpviewer/OpenSearch/OpenSearchManager.py	Fri Jan 01 16:11:36 2010 +0000
+++ b/Helpviewer/OpenSearch/OpenSearchManager.py	Sat Jan 02 15:11:35 2010 +0000
@@ -13,10 +13,10 @@
 from PyQt4.QtGui import QMessageBox
 from PyQt4.QtNetwork import QNetworkRequest, QNetworkReply
 
-from OpenSearchDefaultEngines import OpenSearchDefaultEngines
-from OpenSearchEngine import OpenSearchEngine
-from OpenSearchReader import OpenSearchReader
-from OpenSearchWriter import OpenSearchWriter
+from .OpenSearchDefaultEngines import OpenSearchDefaultEngines
+from .OpenSearchEngine import OpenSearchEngine
+from .OpenSearchReader import OpenSearchReader
+from .OpenSearchWriter import OpenSearchWriter
 
 from Utilities.AutoSaver import AutoSaver
 import Utilities
@@ -232,7 +232,7 @@
         QFile.remove(file_)
         
         if name == self.__current:
-            self.setCurrentEngineName(self.__engines.keys()[0])
+            self.setCurrentEngineName(list(self.__engines.keys())[0])
         
         self.emit(SIGNAL("changed()"))
     
@@ -271,7 +271,7 @@
         
         writer = OpenSearchWriter()
         
-        for engine in self.__engines.values():
+        for engine in list(self.__engines.values()):
             name = self.generateEngineFileName(engine.name())
             fileName = dir.filePath(name)
             
@@ -333,7 +333,7 @@
         
         if self.__current not in self.__engines and \
            len(self.__engines) > 0:
-            self.__current = self.__engines.keys()[0]
+            self.__current = list(self.__engines.keys())[0]
         
         self.__loading = False
         self.emit(SIGNAL("currentEngineChanged()"))
--- a/Helpviewer/OpenSearch/OpenSearchReader.py	Fri Jan 01 16:11:36 2010 +0000
+++ b/Helpviewer/OpenSearch/OpenSearchReader.py	Sat Jan 02 15:11:35 2010 +0000
@@ -9,7 +9,7 @@
 
 from PyQt4.QtCore import *
 
-from OpenSearchEngine import OpenSearchEngine
+from .OpenSearchEngine import OpenSearchEngine
 
 class OpenSearchReader(QXmlStreamReader):
     """
--- a/Helpviewer/Passwords/PasswordManager.py	Fri Jan 01 16:11:36 2010 +0000
+++ b/Helpviewer/Passwords/PasswordManager.py	Sat Jan 02 15:11:35 2010 +0000
@@ -168,14 +168,14 @@
         loginFile = os.path.join(Utilities.getConfigDir(), "browser", "logins")
         try:
             f = open(loginFile, "w")
-            for key, login in self.__logins.items():
+            for key, login in list(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():
+                for key, form in list(self.__loginForms.items()):
                     f.write("%s\n" % key)
                     form.save(f)
                     f.write("%s\n" % self.SEPARATOR)
@@ -184,11 +184,11 @@
                 for key in self.__never:
                     f.write("%s\n") % key
             f.close()
-        except IOError, err:
+        except IOError as err:
             QMessageBox.critical(None,
                 self.trUtf8("Saving login data"),
                 self.trUtf8("""<p>Login data could not be saved to <b>{0}</b></p>"""
-                            """<p>Reason: {1}</p>""").format(loginFile, unicode(err)))
+                            """<p>Reason: {1}</p>""").format(loginFile, str(err)))
             return
     
     def __load(self):
@@ -201,13 +201,13 @@
                 f = open(loginFile, "r")
                 lines = f.read()
                 f.close()
-            except IOError, err:
+            except IOError as err:
                 QMessageBox.critical(None,
                     self.trUtf8("Loading login data"),
                     self.trUtf8("""<p>Login data could not be loaded """
                                 """from <b>{0}</b></p>"""
                                 """<p>Reason: {1}</p>""")\
-                        .format(loginFile, unicode(err)))
+                        .format(loginFile, str(err)))
                 return
             
             data = []
@@ -492,8 +492,8 @@
         """
         args = set()
         
-        dataStr = unicode(data)
-        boundaryStr = unicode(boundary)
+        dataStr = str(data)
+        boundaryStr = str(boundary)
         
         parts = dataStr.split(boundaryStr + "\r\n")
         for part in parts:
--- a/Helpviewer/Passwords/PasswordsDialog.py	Fri Jan 01 16:11:36 2010 +0000
+++ b/Helpviewer/Passwords/PasswordsDialog.py	Sat Jan 02 15:11:35 2010 +0000
@@ -12,9 +12,9 @@
 
 import Helpviewer.HelpWindow
 
-from PasswordModel import PasswordModel
+from .PasswordModel import PasswordModel
 
-from Ui_PasswordsDialog import Ui_PasswordsDialog
+from .Ui_PasswordsDialog import Ui_PasswordsDialog
 
 import UI.PixmapCache
 
@@ -52,7 +52,7 @@
         self.passwordsTable.setModel(self.__proxyModel)
         
         fm = QFontMetrics(QFont())
-        height = fm.height() + fm.height() / 3
+        height = fm.height() + fm.height() // 3
         self.passwordsTable.verticalHeader().setDefaultSectionSize(height)
         self.passwordsTable.verticalHeader().setMinimumSectionSize(-1)
         
--- a/Helpviewer/QtHelpDocumentationDialog.py	Fri Jan 01 16:11:36 2010 +0000
+++ b/Helpviewer/QtHelpDocumentationDialog.py	Sat Jan 02 15:11:35 2010 +0000
@@ -11,7 +11,7 @@
 from PyQt4.QtCore import *
 from PyQt4.QtHelp import QHelpEngineCore
 
-from Ui_QtHelpDocumentationDialog import Ui_QtHelpDocumentationDialog
+from .Ui_QtHelpDocumentationDialog import Ui_QtHelpDocumentationDialog
 
 class QtHelpDocumentationDialog(QDialog, Ui_QtHelpDocumentationDialog):
     """
@@ -104,7 +104,7 @@
         items = self.documentsList.selectedItems()
         for item in items:
             ns = item.text()
-            if ns in openedDocs.values():
+            if ns in list(openedDocs.values()):
                 res = QMessageBox.information(self,
                     self.trUtf8("Remove Documentation"),
                     self.trUtf8("""Some documents currently opened reference the """
--- a/Helpviewer/QtHelpFiltersDialog.py	Fri Jan 01 16:11:36 2010 +0000
+++ b/Helpviewer/QtHelpFiltersDialog.py	Sat Jan 02 15:11:35 2010 +0000
@@ -11,7 +11,7 @@
 from PyQt4.QtCore import *
 from PyQt4.QtHelp import QHelpEngineCore
 
-from Ui_QtHelpFiltersDialog import Ui_QtHelpFiltersDialog
+from .Ui_QtHelpFiltersDialog import Ui_QtHelpFiltersDialog
 
 class QtHelpFiltersDialog(QDialog, Ui_QtHelpFiltersDialog):
     """
--- a/Helpviewer/SearchWidget.py	Fri Jan 01 16:11:36 2010 +0000
+++ b/Helpviewer/SearchWidget.py	Sat Jan 02 15:11:35 2010 +0000
@@ -10,7 +10,7 @@
 from PyQt4.QtCore import *
 from PyQt4.QtGui import *
 
-from Ui_SearchWidget import Ui_SearchWidget
+from .Ui_SearchWidget import Ui_SearchWidget
 
 import UI.PixmapCache
 
--- a/IconEditor/IconEditorGrid.py	Fri Jan 01 16:11:36 2010 +0000
+++ b/IconEditor/IconEditorGrid.py	Sat Jan 02 15:11:35 2010 +0000
@@ -10,9 +10,9 @@
 from PyQt4.QtCore import *
 from PyQt4.QtGui import *
 
-import cursors.cursors_rc
+from .cursors import cursors_rc
 
-from IconSizeDialog import IconSizeDialog
+from .IconSizeDialog import IconSizeDialog
 
 class IconEditCommand(QUndoCommand):
     """
--- a/IconEditor/IconEditorWindow.py	Fri Jan 01 16:11:36 2010 +0000
+++ b/IconEditor/IconEditorWindow.py	Sat Jan 02 15:11:35 2010 +0000
@@ -12,9 +12,9 @@
 
 from E4Gui.E4Action import E4Action, createActionGroup
 
-from IconEditorGrid import IconEditorGrid
-from IconZoomDialog import IconZoomDialog
-from IconEditorPalette import IconEditorPalette
+from .IconEditorGrid import IconEditorGrid
+from .IconZoomDialog import IconZoomDialog
+from .IconEditorPalette import IconEditorPalette
 
 import UI.PixmapCache
 import UI.Config
@@ -128,7 +128,7 @@
         readFormats = QImageReader.supportedImageFormats()
         for readFormat in readFormats:
             try:
-                inputFormats.append(filters[unicode(readFormat)])
+                inputFormats.append(filters[str(readFormat)])
             except KeyError:
                 pass
         inputFormats.sort()
@@ -139,7 +139,7 @@
         writeFormats = QImageWriter.supportedImageFormats()
         for writeFormat in writeFormats:
             try:
-                outputFormats.append(filters[unicode(writeFormat)])
+                outputFormats.append(filters[str(writeFormat)])
             except KeyError:
                 pass
         outputFormats.sort()
--- a/IconEditor/IconSizeDialog.py	Fri Jan 01 16:11:36 2010 +0000
+++ b/IconEditor/IconSizeDialog.py	Sat Jan 02 15:11:35 2010 +0000
@@ -7,7 +7,7 @@
 from PyQt4.QtGui import QDialog
 from PyQt4.QtCore import pyqtSlot
 
-from Ui_IconSizeDialog import Ui_IconSizeDialog
+from .Ui_IconSizeDialog import Ui_IconSizeDialog
 
 class IconSizeDialog(QDialog, Ui_IconSizeDialog):
     """
--- a/IconEditor/IconZoomDialog.py	Fri Jan 01 16:11:36 2010 +0000
+++ b/IconEditor/IconZoomDialog.py	Sat Jan 02 15:11:35 2010 +0000
@@ -9,7 +9,7 @@
 
 from PyQt4.QtGui import QDialog
 
-from Ui_IconZoomDialog import Ui_IconZoomDialog
+from .Ui_IconZoomDialog import Ui_IconZoomDialog
 
 class IconZoomDialog(QDialog, Ui_IconZoomDialog):
     """
@@ -34,4 +34,4 @@
         
         @return zoom factor (int)
         """
-        return self.zoomSpinBox.value() / 100
+        return self.zoomSpinBox.value() // 100
--- a/IconEditor/cursors/cursors_rc.py	Fri Jan 01 16:11:36 2010 +0000
+++ b/IconEditor/cursors/cursors_rc.py	Sat Jan 02 15:11:35 2010 +0000
@@ -2,14 +2,14 @@
 
 # Resource object code
 #
-# Created: Mi. Aug 19 15:47:59 2009
-#      by: The Resource Compiler for PyQt (Qt v4.5.2)
+# Created: Do. Dez 31 16:47:09 2009
+#      by: The Resource Compiler for PyQt (Qt v4.5.3)
 #
 # WARNING! All changes made in this file will be lost!
 
 from PyQt4 import QtCore
 
-qt_resource_data = "\
+qt_resource_data = b"\
 \x00\x00\x03\x14\
 \x2f\
 \x2a\x20\x58\x50\x4d\x20\x2a\x2f\x0a\x73\x74\x61\x74\x69\x63\x20\
@@ -279,7 +279,7 @@
 \x3b\x0a\
 "
 
-qt_resource_name = "\
+qt_resource_name = b"\
 \x00\x16\
 \x0c\xac\xdf\x8d\
 \x00\x63\
@@ -309,7 +309,7 @@
 \x00\x2e\x00\x78\x00\x70\x00\x6d\
 "
 
-qt_resource_struct = "\
+qt_resource_struct = b"\
 \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\
--- a/MultiProject/AddProjectDialog.py	Fri Jan 01 16:11:36 2010 +0000
+++ b/MultiProject/AddProjectDialog.py	Sat Jan 02 15:11:35 2010 +0000
@@ -12,7 +12,7 @@
 
 from E4Gui.E4Completers import E4FileCompleter
 
-from Ui_AddProjectDialog import Ui_AddProjectDialog
+from .Ui_AddProjectDialog import Ui_AddProjectDialog
 
 import Utilities
 
--- a/MultiProject/MultiProject.py	Fri Jan 01 16:11:36 2010 +0000
+++ b/MultiProject/MultiProject.py	Sat Jan 02 15:11:35 2010 +0000
@@ -9,7 +9,7 @@
 
 import os
 import sys
-import cStringIO
+import io
 
 from PyQt4.QtCore import *
 from PyQt4.QtGui import *
@@ -18,8 +18,8 @@
 
 from Globals import recentNameMultiProject
 
-from PropertiesDialog import PropertiesDialog
-from AddProjectDialog import AddProjectDialog
+from .PropertiesDialog import PropertiesDialog
+from .AddProjectDialog import AddProjectDialog
 
 from E4XML.XMLUtilities import make_parser
 from E4XML.XMLErrorHandler import XMLErrorHandler, XMLFatalParseError
@@ -203,9 +203,9 @@
                         self.trUtf8("""Compressed multiproject files not supported."""
                                     """ The compression library is missing."""))
                     return False
-                f = gzip.open(fn, "rb")
+                f = gzip.open(fn, "r")
             else:
-                f = open(fn, "rb")
+                f = open(fn, "r")
             line = f.readline()
             dtdLine = f.readline()
             f.close()
@@ -274,15 +274,15 @@
                         self.trUtf8("""Compressed multiproject files not supported."""
                                     """ The compression library is missing."""))
                     return False
-                f = gzip.open(fn, "rb")
+                f = gzip.open(fn, "r")
             else:
-                f = open(fn, "rb")
+                f = open(fn, "r")
             try:
                 try:
                     parser.parse(f)
                 except UnicodeEncodeError:
                     f.seek(0)
-                    buf = cStringIO.StringIO(f.read())
+                    buf = io.StringIO(f.read())
                     parser.parse(buf)
             finally:
                 f.close()
@@ -351,9 +351,9 @@
                         self.trUtf8("""Compressed multiproject files not supported."""
                                     """ The compression library is missing."""))
                     return False
-                f = gzip.open(fn, "wb")
+                f = gzip.open(fn, "w")
             else:
-                f = open(fn, "wb")
+                f = open(fn, "w")
             
             MultiProjectWriter(self, f, os.path.splitext(os.path.basename(fn))[0])\
                 .writeXML()
--- a/MultiProject/MultiProjectBrowser.py	Fri Jan 01 16:11:36 2010 +0000
+++ b/MultiProject/MultiProjectBrowser.py	Sat Jan 02 15:11:35 2010 +0000
@@ -12,7 +12,7 @@
 
 from E4Gui.E4Application import e4App
 
-from AddProjectDialog import AddProjectDialog
+from .AddProjectDialog import AddProjectDialog
 
 import UI.PixmapCache
 
--- a/MultiProject/PropertiesDialog.py	Fri Jan 01 16:11:36 2010 +0000
+++ b/MultiProject/PropertiesDialog.py	Sat Jan 02 15:11:35 2010 +0000
@@ -9,7 +9,7 @@
 
 from PyQt4.QtGui import QDialog
 
-from Ui_PropertiesDialog import Ui_PropertiesDialog
+from .Ui_PropertiesDialog import Ui_PropertiesDialog
 
 class PropertiesDialog(QDialog, Ui_PropertiesDialog):
     """
--- a/PluginManager/PluginDetailsDialog.py	Fri Jan 01 16:11:36 2010 +0000
+++ b/PluginManager/PluginDetailsDialog.py	Sat Jan 02 15:11:35 2010 +0000
@@ -11,7 +11,7 @@
 from PyQt4.QtGui import QDialog
 from PyQt4.QtCore import pyqtSlot
 
-from Ui_PluginDetailsDialog import Ui_PluginDetailsDialog
+from .Ui_PluginDetailsDialog import Ui_PluginDetailsDialog
 
 class PluginDetailsDialog(QDialog, Ui_PluginDetailsDialog):
     """
--- a/PluginManager/PluginExceptions.py	Fri Jan 01 16:11:36 2010 +0000
+++ b/PluginManager/PluginExceptions.py	Sat Jan 02 15:11:35 2010 +0000
@@ -26,7 +26,7 @@
         
         @return string representing the error message
         """
-        return unicode(self._errorMessage)
+        return str(self._errorMessage)
         
     def __str__(self):
         """
--- a/PluginManager/PluginInfoDialog.py	Fri Jan 01 16:11:36 2010 +0000
+++ b/PluginManager/PluginInfoDialog.py	Sat Jan 02 15:11:35 2010 +0000
@@ -12,9 +12,9 @@
 from PyQt4.QtGui import QDialog, QTreeWidgetItem, QHeaderView, QMenu, QBrush
 from PyQt4.QtCore import pyqtSlot
 
-from PluginDetailsDialog import PluginDetailsDialog
+from .PluginDetailsDialog import PluginDetailsDialog
 
-from Ui_PluginInfoDialog import Ui_PluginInfoDialog
+from .Ui_PluginInfoDialog import Ui_PluginInfoDialog
 
 class PluginInfoDialog(QDialog, Ui_PluginInfoDialog):
     """
--- a/PluginManager/PluginInstallDialog.py	Fri Jan 01 16:11:36 2010 +0000
+++ b/PluginManager/PluginInstallDialog.py	Sat Jan 02 15:11:35 2010 +0000
@@ -12,15 +12,15 @@
 import shutil
 import zipfile
 import compileall
-import urlparse
+import urllib.parse
 
 from PyQt4.QtGui import *
 from PyQt4.QtCore import *
 
 from E4Gui.E4Completers import E4FileCompleter
 
-from PluginManager import PluginManager
-from Ui_PluginInstallDialog import Ui_PluginInstallDialog
+from .PluginManager import PluginManager
+from .Ui_PluginInstallDialog import Ui_PluginInstallDialog
 
 import Utilities
 import Preferences
@@ -243,7 +243,7 @@
                 .toString()
         
         # check if archive is a local url
-        url = urlparse.urlparse(archive)
+        url = urllib.parse.urlparse(archive)
         if url[0].lower() == 'file':
             archive = url[2]
 
@@ -373,8 +373,7 @@
         try:
             if packageName != "None":
                 packageDirs = ["%s/" % packageName, "%s\\" % packageName]
-                namelist = zip.namelist()
-                namelist.sort()
+                namelist = sorted(zip.namelist())
                 tot = len(namelist)
                 prog = 0
                 self.progress.setMaximum(tot)
@@ -398,7 +397,7 @@
                             d = os.path.dirname(outname)
                             if not os.path.exists(d):
                                 self.__makedirs(d)
-                            f = open(outname, "wb")
+                            f = open(outname, "w")
                             f.write(zip.read(name))
                             f.close()
                             self.__installedFiles.append(outname)
@@ -407,27 +406,27 @@
                 compileUiFiles(os.path.join(destination, packageName), True)
             else:
                 outname = os.path.join(destination, pluginFileName)
-                f = open(outname, "wb")
+                f = open(outname, "w")
                 f.write(pluginSource)
                 f.close()
                 self.__installedFiles.append(outname)
-        except os.error, why:
+        except os.error as why:
             self.__rollback()
             return False, \
-                self.trUtf8("Error installing plugin. Reason: {0}").format(unicode(why)), \
+                self.trUtf8("Error installing plugin. Reason: {0}").format(str(why)), \
                 False
-        except IOError, why:
+        except IOError as why:
             self.__rollback()
             return False, \
-                self.trUtf8("Error installing plugin. Reason: {0}").format(unicode(why)), \
+                self.trUtf8("Error installing plugin. Reason: {0}").format(str(why)), \
                 False
-        except OSError, why:
+        except OSError as why:
             self.__rollback()
             return False, \
-                self.trUtf8("Error installing plugin. Reason: {0}").format(unicode(why)), \
+                self.trUtf8("Error installing plugin. Reason: {0}").format(str(why)), \
                 False
         except:
-            print >>sys.stderr, "Unspecific exception installing plugin."
+            print("Unspecific exception installing plugin.", file=sys.stderr)
             self.__rollback()
             return False, \
                 self.trUtf8("Unspecific exception installing plugin."), \
@@ -455,7 +454,7 @@
             if os.path.exists(dname):
                 shutil.rmtree(dname)
     
-    def __makedirs(self, name, mode = 0777):
+    def __makedirs(self, name, mode = 0o777):
         """
         Private method to create a directory and all intermediate ones.
         
--- a/PluginManager/PluginManager.py	Fri Jan 01 16:11:36 2010 +0000
+++ b/PluginManager/PluginManager.py	Sat Jan 02 15:11:35 2010 +0000
@@ -14,7 +14,7 @@
 from PyQt4.QtCore import *
 from PyQt4.QtGui import QPixmap, QMessageBox
 
-from PluginExceptions import *
+from .PluginExceptions import *
 
 import UI.PixmapCache
 
@@ -108,8 +108,8 @@
         """
         Public method to finalize the setup of the plugin manager.
         """
-        for module in self.__onDemandInactiveModules.values() + \
-                      self.__onDemandActiveModules.values():
+        for module in list(self.__onDemandInactiveModules.values()) + \
+                      list(self.__onDemandActiveModules.values()):
             if hasattr(module, "moduleSetup"):
                 module.moduleSetup()
         
@@ -141,7 +141,7 @@
             fname = os.path.join(path, "__init__.py")
             if not os.path.exists(fname):
                 try:
-                    f = open(fname, "wb")
+                    f = open(fname, "w")
                     f.close()
                 except IOError:
                     return (False, 
@@ -152,9 +152,9 @@
             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)
+                    os.mkdir(self.pluginDirs["user"],  0o755)
                 try:
-                    f = open(fname, "wb")
+                    f = open(fname, "w")
                     f.close()
                 except IOError:
                     del self.pluginDirs["user"]
@@ -162,7 +162,7 @@
             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)
+                os.mkdir(self.pluginDirs["global"], 0o755)
                 fname = os.path.join(self.pluginDirs["global"], "__init__.py")
                 f = open()
                 f.write('# -*- coding: utf-8 -*-' + os.linesep)
@@ -313,14 +313,14 @@
             if reload_:
                 reload(module)
         except PluginLoadError:
-            print "Error loading plugin module:", name
-        except StandardError, err:
+            print("Error loading plugin module:", name)
+        except Exception as err:
             module = imp.new_module(name)
             module.error = \
-                self.trUtf8("Module failed to load. Error: {0}").format(unicode(err))
+                self.trUtf8("Module failed to load. Error: {0}").format(str(err))
             self.__failedModules[name] = module
-            print "Error loading plugin module:",  name
-            print unicode(err)
+            print("Error loading plugin module:",  name)
+            print(str(err))
     
     def unloadPlugin(self, name, directory):
         """
@@ -373,7 +373,7 @@
         found = False
         if not package:
             package = "__None__"
-        for moduleName in sys.modules.keys()[:]:
+        for moduleName in list(sys.modules.keys())[:]:
             if moduleName == pluginName or moduleName.split(".")[0] in packages:
                 found = True
                 del sys.modules[moduleName]
@@ -469,8 +469,8 @@
                 module.error = self.trUtf8("Incompatible plugin activation method.")
                 obj = None
                 ok = True
-            except StandardError, err:
-                module.error = unicode(err)
+            except Exception as err:
+                module.error = str(err)
                 obj = None
                 ok = False
             if not ok:
@@ -528,11 +528,11 @@
                 raise PluginClassFormatError(module.eric4PluginModuleName, 
                     className, "deactivate")
             return True
-        except PluginModuleFormatError, e:
-            print repr(e)
+        except PluginModuleFormatError as e:
+            print(repr(e))
             return False
-        except PluginClassFormatError, e:
-            print repr(e)
+        except PluginClassFormatError as e:
+            print(repr(e))
             return False
     
     def deactivatePlugin(self, name, onDemand = False):
@@ -596,13 +596,13 @@
             already (boolean)
         @return reference to the initialized plugin object
         """
-        for name, module in self.__onDemandInactiveModules.items():
+        for name, module in list(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():
+            for name, module in list(self.__onDemandActiveModules.items()):
                 if getattr(module, "pluginType") == type_ and \
                    getattr(module, "pluginTypename") == typename:
                     self.deactivatePlugin(name, onDemand = True)
@@ -620,23 +620,23 @@
         """
         infos = []
         
-        for name in self.__activeModules.keys():
+        for name in list(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():
+        for name in list(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():
+        for name in list(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():
+        for name in list(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():
+        for name in list(self.__failedModules.keys()):
             pname,  shortDesc, error, version = \
                 self.__getShortInfo(self.__failedModules[name])
             infos.append((name,  pname, version, False, False, shortDesc, error))
@@ -706,7 +706,7 @@
         Public method called to perform actions upon shutdown of the IDE.
         """
         names = []
-        for name in self.__inactiveModules.keys():
+        for name in list(self.__inactiveModules.keys()):
             names.append(name)
         Preferences.Prefs.settings.setValue(self.__inactivePluginsKey, names)
         
@@ -723,7 +723,7 @@
         pluginDict = {}
         
         for name, module in \
-            self.__onDemandActiveModules.items() + self.__onDemandInactiveModules.items():
+            list(self.__onDemandActiveModules.items()) + list(self.__onDemandInactiveModules.items()):
             if getattr(module, "pluginType") == type_ and \
                getattr(module, "error", "") == "":
                 plugin_name = getattr(module, "pluginTypename")
@@ -748,7 +748,7 @@
         @return preview pixmap (QPixmap)
         """
         for modname, module in \
-            self.__onDemandActiveModules.items() + self.__onDemandInactiveModules.items():
+            list(self.__onDemandActiveModules.items()) + list(self.__onDemandInactiveModules.items()):
             if getattr(module, "pluginType") == type_ and \
                getattr(module, "pluginTypename") == name:
                 if hasattr(module, "previewPix"):
@@ -767,8 +767,8 @@
         """
         apis = []
         
-        for module in self.__activeModules.values() + \
-                      self.__onDemandActiveModules.values():
+        for module in list(self.__activeModules.values()) + \
+                      list(self.__onDemandActiveModules.values()):
             if hasattr(module, "apiFiles"):
                 apis.extend(module.apiFiles(language))
         
@@ -807,12 +807,12 @@
         """
         infos = []
         
-        for module in self.__activeModules.values() + \
-                      self.__inactiveModules.values():
+        for module in list(self.__activeModules.values()) + \
+                      list(self.__inactiveModules.values()):
             if hasattr(module, "exeDisplayData"):
                 infos.append(module.exeDisplayData())
-        for module in self.__onDemandActiveModules.values() + \
-                      self.__onDemandInactiveModules.values():
+        for module in list(self.__onDemandActiveModules.values()) + \
+                      list(self.__onDemandInactiveModules.values()):
             if hasattr(module, "exeDisplayData"):
                 infos.append(module.exeDisplayData())
         
@@ -846,9 +846,9 @@
         </dl>
         """
         configData = {}
-        for module in self.__activeModules.values() + \
-                      self.__onDemandActiveModules.values() + \
-                      self.__onDemandInactiveModules.values():
+        for module in list(self.__activeModules.values()) + \
+                      list(self.__onDemandActiveModules.values()) + \
+                      list(self.__onDemandInactiveModules.values()):
             if hasattr(module, 'getConfigData'):
                 configData.update(module.getConfigData())
         return configData
@@ -897,11 +897,11 @@
         vcsDict = {}
         
         for name, module in \
-            self.__onDemandActiveModules.items() + self.__onDemandInactiveModules.items():
+            list(self.__onDemandActiveModules.items()) + list(self.__onDemandInactiveModules.items()):
             if getattr(module, "pluginType") == "version_control":
                 if hasattr(module, "getVcsSystemIndicator"):
                     res = module.getVcsSystemIndicator()
-                    for indicator, vcsData in res.items():
+                    for indicator, vcsData in list(res.items()):
                         if indicator in vcsDict:
                             vcsDict[indicator].append(vcsData)
                         else:
@@ -913,7 +913,7 @@
         """
         Public method to deactivated all activated VCS plugins.
         """
-        for name, module in self.__onDemandActiveModules.items():
+        for name, module in list(self.__onDemandActiveModules.items()):
             if getattr(module, "pluginType") == "version_control":
                 self.deactivatePlugin(name, True)
 
@@ -927,21 +927,21 @@
         
         if not os.path.exists(downloadDir):
             try:
-                os.mkdir(downloadDir, 0755)
-            except (OSError, IOError), err:
+                os.mkdir(downloadDir, 0o755)
+            except (OSError, IOError) as 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:
+                        os.mkdir(downloadDir, 0o755)
+                    except (OSError, IOError) as err:
                         QMessageBox.critical(self.__ui,
                             self.trUtf8("Plugin Manager Error"),
                             self.trUtf8("""<p>The plugin download directory <b>{0}</b> """
                                         """could not be created. Please configure it """
                                         """via the configuration dialog.</p>"""
                                         """<p>Reason: {1}</p>""")\
-                                .format(downloadDir, unicode(err)))
+                                .format(downloadDir, str(err)))
                         downloadDir = ""
         
         Preferences.setPluginManager("DownloadPath", downloadDir)
--- a/PluginManager/PluginRepositoryDialog.py	Fri Jan 01 16:11:36 2010 +0000
+++ b/PluginManager/PluginRepositoryDialog.py	Sat Jan 02 15:11:35 2010 +0000
@@ -11,13 +11,13 @@
 import sys
 import os
 import zipfile
-import cStringIO
+import io
 
 from PyQt4.QtGui import *
 from PyQt4.QtCore import *
 from PyQt4.QtNetwork import QHttp, QNetworkProxy
 
-from Ui_PluginRepositoryDialog import Ui_PluginRepositoryDialog
+from .Ui_PluginRepositoryDialog import Ui_PluginRepositoryDialog
 
 from UI.AuthenticationDialog import AuthenticationDialog
 
@@ -250,7 +250,7 @@
         if os.path.exists(self.pluginRepositoryFile):
             self.__repositoryMissing = False
             try:
-                f = open(self.pluginRepositoryFile, "rb")
+                f = open(self.pluginRepositoryFile, "r")
                 line = f.readline()
                 dtdLine = f.readline()
                 f.close()
@@ -274,13 +274,13 @@
                 parser.setErrorHandler(eh)
                 
                 try:
-                    f = open(self.pluginRepositoryFile, "rb")
+                    f = open(self.pluginRepositoryFile, "r")
                     try:
                         try:
                             parser.parse(f)
                         except UnicodeEncodeError:
                             f.seek(0)
-                            buf = cStringIO.StringIO(f.read())
+                            buf = io.StringIO(f.read())
                             parser.parse(buf)
                     finally:
                         f.close()
--- a/PluginManager/PluginUninstallDialog.py	Fri Jan 01 16:11:36 2010 +0000
+++ b/PluginManager/PluginUninstallDialog.py	Sat Jan 02 15:11:35 2010 +0000
@@ -15,8 +15,8 @@
 from PyQt4.QtGui import *
 from PyQt4.QtCore import *
 
-from PluginManager import PluginManager
-from Ui_PluginUninstallDialog import Ui_PluginUninstallDialog
+from .PluginManager import PluginManager
+from .Ui_PluginUninstallDialog import Ui_PluginUninstallDialog
 
 class PluginUninstallWidget(QWidget, Ui_PluginUninstallDialog):
     """
@@ -58,8 +58,7 @@
         """
         pluginDirectory = self.pluginDirectoryCombo\
                 .itemData(index)
-        pluginNames = self.__pluginManager.getPluginModules(pluginDirectory)
-        pluginNames.sort()
+        pluginNames = sorted(self.__pluginManager.getPluginModules(pluginDirectory))
         self.pluginNameCombo.clear()
         for pluginName in pluginNames:
             fname = "%s.py" % os.path.join(pluginDirectory, pluginName)
@@ -139,12 +138,12 @@
                 os.remove(fnamec)
             
             os.remove(pluginFile)
-        except OSError, err:
+        except OSError as err:
             QMessageBox.critical(None,
                 self.trUtf8("Plugin Uninstallation"),
                 self.trUtf8("""<p>The plugin package <b>{0}</b> could not be"""
                             """ removed. Aborting...</p>"""
-                            """<p>Reason: {1}</p>""").format(packageDir, unicode(err)),
+                            """<p>Reason: {1}</p>""").format(packageDir, str(err)),
                 QMessageBox.StandardButtons(\
                     QMessageBox.Ok))
             return False
--- a/Plugins/AboutPlugin/AboutDialog.py	Fri Jan 01 16:11:36 2010 +0000
+++ b/Plugins/AboutPlugin/AboutDialog.py	Sat Jan 02 15:11:35 2010 +0000
@@ -34,7 +34,7 @@
 ).format(Program, Homepage, BugAddress, FeatureAddress)
 
 authorsText = \
-u"""\
+"""\
 Detlev Offenbach
     Project Manager, Maintainer and German translation
     
@@ -65,7 +65,7 @@
 """
 
 thanksText = \
-u"""Phil Thompson for providing PyQt and QScintilla and pushing me into this business.
+"""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 independance.
@@ -732,7 +732,7 @@
 
 import UI.PixmapCache
 
-from Ui_AboutDialog import Ui_AboutDialog
+from .Ui_AboutDialog import Ui_AboutDialog
 
 class AboutDialog(QDialog, Ui_AboutDialog):
     """
--- a/Plugins/CheckerPlugins/SyntaxChecker/SyntaxCheckerDialog.py	Fri Jan 01 16:11:36 2010 +0000
+++ b/Plugins/CheckerPlugins/SyntaxChecker/SyntaxCheckerDialog.py	Sat Jan 02 15:11:35 2010 +0000
@@ -16,7 +16,7 @@
 
 from E4Gui.E4Application import e4App
 
-from Ui_SyntaxCheckerDialog import Ui_SyntaxCheckerDialog
+from .Ui_SyntaxCheckerDialog import Ui_SyntaxCheckerDialog
 
 import Utilities
 
@@ -74,7 +74,7 @@
         @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:
+        if isinstance(fn, list):
             files = fn
         elif os.path.isdir(fn):
             files = Utilities.direntries(fn, 1, '*.py', 0)
--- a/Plugins/CheckerPlugins/Tabnanny/Tabnanny.py	Fri Jan 01 16:11:36 2010 +0000
+++ b/Plugins/CheckerPlugins/Tabnanny/Tabnanny.py	Sat Jan 02 15:11:35 2010 +0000
@@ -43,7 +43,7 @@
 import os
 import sys
 import tokenize
-import cStringIO
+import io
 
 import Utilities
 
@@ -106,39 +106,39 @@
     check_equal = 0
 
     try:
-        f = open(file)
-    except IOError, msg:
-        return (True, file, "1", "I/O Error: %s" % unicode(msg))
+        f = open(file, "r")
+    except IOError as msg:
+        return (True, file, "1", "I/O Error: %s" % str(msg))
 
     try:
-        text = Utilities.decode(f.read())[0].encode('utf-8')
+        text = f.read()
     finally:
         f.close()
         
     # convert eols
     text = Utilities.convertLineEnds(text, os.linesep)
     
-    source = cStringIO.StringIO(text)
+    source = io.StringIO(text)
     try:
         process_tokens(tokenize.generate_tokens(source.readline))
     
-    except tokenize.TokenError, msg:
+    except tokenize.TokenError as msg:
         f.close()
-        return (True, file, "1", "Token Error: %s" % unicode(msg))
+        return (True, file, "1", "Token Error: %s" % str(msg))
     
-    except IndentationError, err:
+    except IndentationError as err:
         f.close()
-        return (True, file, err.lineno, "Indentation Error: %s" % unicode(err.msg))
+        return (True, file, err.lineno, "Indentation Error: %s" % str(err.msg))
     
-    except NannyNag, nag:
+    except NannyNag as nag:
         badline = nag.get_lineno()
         line = nag.get_line()
         f.close()
         return (True, file, str(badline), line)
     
-    except Exception, err:
+    except Exception as err:
         f.close()
-        return (True, file, "1", "Unspecific Error: %s" % unicode(err))
+        return (True, file, "1", "Unspecific Error: %s" % str(err))
     
     f.close()
     return (False, None, None, None)
@@ -337,7 +337,7 @@
     @param w A list of witnesses
     @return A formated string of the witnesses.
     """
-    firsts = map(lambda tup: str(tup[0]), w)
+    firsts = [str(tup[0]) for tup in w]
     prefix = "at tab size"
     if len(w) > 1:
         prefix = prefix + "s"
--- a/Plugins/CheckerPlugins/Tabnanny/TabnannyDialog.py	Fri Jan 01 16:11:36 2010 +0000
+++ b/Plugins/CheckerPlugins/Tabnanny/TabnannyDialog.py	Sat Jan 02 15:11:35 2010 +0000
@@ -16,9 +16,9 @@
 
 from E4Gui.E4Application import e4App
 
-from Ui_TabnannyDialog import Ui_TabnannyDialog
+from .Ui_TabnannyDialog import Ui_TabnannyDialog
 
-import Tabnanny
+from . import Tabnanny
 import Utilities
 
 class TabnannyDialog(QDialog, Ui_TabnannyDialog):
@@ -68,7 +68,7 @@
         @param fn File or list of files or directory to be checked
                 (string or list of strings)
         """
-        if type(fn) is types.ListType:
+        if isinstance(fn, list):
             files = fn
         elif os.path.isdir(fn):
             files = Utilities.direntries(fn, 1, '*.py', 0)
--- a/Plugins/DocumentationPlugins/Ericapi/EricapiConfigDialog.py	Fri Jan 01 16:11:36 2010 +0000
+++ b/Plugins/DocumentationPlugins/Ericapi/EricapiConfigDialog.py	Sat Jan 02 15:11:35 2010 +0000
@@ -16,7 +16,7 @@
 
 from E4Gui.E4Completers import E4FileCompleter, E4DirCompleter
 
-from Ui_EricapiConfigDialog import Ui_EricapiConfigDialog
+from .Ui_EricapiConfigDialog import Ui_EricapiConfigDialog
 import Utilities
 import DocumentationTools
 
@@ -51,7 +51,7 @@
         
         # combine it with the values of parms
         if parms is not None:
-            for key, value in parms.items():
+            for key, value in list(parms.items()):
                 self.parameters[key] = parms[key]
         
         self.outputFileCompleter = E4FileCompleter(self.outputFileEdit)
--- a/Plugins/DocumentationPlugins/Ericapi/EricapiExecDialog.py	Fri Jan 01 16:11:36 2010 +0000
+++ b/Plugins/DocumentationPlugins/Ericapi/EricapiExecDialog.py	Sat Jan 02 15:11:35 2010 +0000
@@ -12,7 +12,9 @@
 from PyQt4.QtCore import *
 from PyQt4.QtGui import *
 
-from Ui_EricapiExecDialog import Ui_EricapiExecDialog
+from .Ui_EricapiExecDialog import Ui_EricapiExecDialog
+
+import Preferences
 
 class EricapiExecDialog(QDialog, Ui_EricapiExecDialog):
     """
@@ -132,7 +134,9 @@
         self.process.setReadChannel(QProcess.StandardOutput)
         
         while self.process.canReadLine():
-            s = unicode(self.process.readLine())
+            s = str(self.process.readLine(), 
+                    Preferences.getSystem("IOEncoding"), 
+                    'replace')
             self.contents.insertPlainText(s)
             self.contents.ensureCursorVisible()
         
@@ -147,6 +151,8 @@
         
         while self.process.canReadLine():
             self.errorGroup.show()
-            s = unicode(self.process.readLine())
+            s = str(self.process.readLine(), 
+                    Preferences.getSystem("IOEncoding"), 
+                    'replace')
             self.errors.insertPlainText(s)
             self.errors.ensureCursorVisible()
--- a/Plugins/DocumentationPlugins/Ericdoc/EricdocConfigDialog.py	Fri Jan 01 16:11:36 2010 +0000
+++ b/Plugins/DocumentationPlugins/Ericdoc/EricdocConfigDialog.py	Sat Jan 02 15:11:35 2010 +0000
@@ -16,7 +16,7 @@
 
 from E4Gui.E4Completers import E4DirCompleter
 
-from Ui_EricdocConfigDialog import Ui_EricdocConfigDialog
+from .Ui_EricdocConfigDialog import Ui_EricdocConfigDialog
 from DocumentationTools.Config import eric4docDefaultColors, eric4docColorParameterNames
 import Utilities
 
@@ -66,7 +66,7 @@
         
         # combine it with the values of parms
         if parms is not None:
-            for key, value in parms.items():
+            for key, value in list(parms.items()):
                 if key.endswith("Color"):
                     self.colors[key] = parms[key]
                 else:
@@ -188,7 +188,7 @@
                 args.append(self.parameters['cssFile'])
             else:
                 args.append(os.path.join(self.ppath, self.parameters['cssFile']))
-        for key, value in self.colors.items():
+        for key, value in list(self.colors.items()):
             if self.colors[key] != eric4docDefaultColors[key]:
                 parms[key] = self.colors[key]
                 args.append("--%s=%s" % \
--- a/Plugins/DocumentationPlugins/Ericdoc/EricdocExecDialog.py	Fri Jan 01 16:11:36 2010 +0000
+++ b/Plugins/DocumentationPlugins/Ericdoc/EricdocExecDialog.py	Sat Jan 02 15:11:35 2010 +0000
@@ -12,7 +12,9 @@
 from PyQt4.QtCore import *
 from PyQt4.QtGui import *
 
-from Ui_EricdocExecDialog import Ui_EricdocExecDialog
+from .Ui_EricdocExecDialog import Ui_EricdocExecDialog
+
+import Preferences
 
 class EricdocExecDialog(QDialog, Ui_EricdocExecDialog):
     """
@@ -132,7 +134,9 @@
         self.process.setReadChannel(QProcess.StandardOutput)
         
         while self.process.canReadLine():
-            s = unicode(self.process.readLine())
+            s = str(self.process.readLine(), 
+                    Preferences.getSystem("IOEncoding"), 
+                    'replace')
             self.contents.insertPlainText(s)
             self.contents.ensureCursorVisible()
         
@@ -147,6 +151,8 @@
         
         while self.process.canReadLine():
             self.errorGroup.show()
-            s = unicode(self.process.readLine())
+            s = str(self.process.readLine(), 
+                    Preferences.getSystem("IOEncoding"), 
+                    'replace')
             self.errors.insertPlainText(s)
-            self.errors.ensureCursorVisible()
+            self.errors.ensureCursorVisible()
\ No newline at end of file
--- a/Plugins/PluginSyntaxChecker.py	Fri Jan 01 16:11:36 2010 +0000
+++ b/Plugins/PluginSyntaxChecker.py	Sat Jan 02 15:11:35 2010 +0000
@@ -157,7 +157,7 @@
         @param menu reference to the menu (QMenu)
         """
         if menuName == "Checks" and \
-           e4App().getObject("Project").getProjectLanguage() == "Python":
+           e4App().getObject("Project").getProjectLanguage() == "Python3":
             self.__projectBrowserMenu = menu
             if self.__projectBrowserAct is None:
                 self.__projectBrowserAct = E4Action(self.trUtf8('Check Syntax'),
@@ -239,7 +239,7 @@
         if menuName == "Checks":
             if not self.__editorAct in menu.actions():
                 menu.addAction(self.__editorAct)
-            self.__editorAct.setEnabled(editor.isPyFile())
+            self.__editorAct.setEnabled(editor.isPy3File())
     
     def __editorSyntaxCheck(self):
         """
--- a/Plugins/PluginTabnanny.py	Fri Jan 01 16:11:36 2010 +0000
+++ b/Plugins/PluginTabnanny.py	Sat Jan 02 15:11:35 2010 +0000
@@ -158,7 +158,7 @@
         @param menu reference to the menu (QMenu)
         """
         if menuName == "Checks" and \
-           e4App().getObject("Project").getProjectLanguage() == "Python":
+           e4App().getObject("Project").getProjectLanguage() == "Python3":
             self.__projectBrowserMenu = menu
             if self.__projectBrowserAct is None:
                 self.__projectBrowserAct = E4Action(self.trUtf8('Check Indentations'),
@@ -241,7 +241,7 @@
         if menuName == "Checks":
             if not self.__editorAct in menu.actions():
                 menu.addAction(self.__editorAct)
-            self.__editorAct.setEnabled(editor.isPyFile())
+            self.__editorAct.setEnabled(editor.isPy3File())
     
     def __editorTabnanny(self):
         """
--- a/Plugins/VcsPlugins/vcsPySvn/ConfigurationPage/SubversionPage.py	Fri Jan 01 16:11:36 2010 +0000
+++ b/Plugins/VcsPlugins/vcsPySvn/ConfigurationPage/SubversionPage.py	Sat Jan 02 15:11:35 2010 +0000
@@ -12,7 +12,7 @@
 from QScintilla.MiniEditor import MiniEditor
 
 from Preferences.ConfigurationPages.ConfigurationPageBase import ConfigurationPageBase
-from Ui_SubversionPage import Ui_SubversionPage
+from .Ui_SubversionPage import Ui_SubversionPage
 
 class SubversionPage(ConfigurationPageBase, Ui_SubversionPage):
     """
--- a/Plugins/VcsPlugins/vcsPySvn/SvnBlameDialog.py	Fri Jan 01 16:11:36 2010 +0000
+++ b/Plugins/VcsPlugins/vcsPySvn/SvnBlameDialog.py	Sat Jan 02 15:11:35 2010 +0000
@@ -15,8 +15,8 @@
 from PyQt4.QtCore import *
 from PyQt4.QtGui import *
 
-from SvnDialogMixin import SvnDialogMixin
-from Ui_SvnBlameDialog import Ui_SvnBlameDialog
+from .SvnDialogMixin import SvnDialogMixin
+from .Ui_SvnBlameDialog import Ui_SvnBlameDialog
 
 import Utilities
 
@@ -76,7 +76,7 @@
             for annotation in annotations:
                 self.__generateItem(annotation["revision"].number,
                     annotation["author"], annotation["number"] + 1, annotation["line"])
-        except pysvn.ClientError, e:
+        except pysvn.ClientError as e:
             locker.unlock()
             self.__showError(e.args[0]+'\n')
         self.__finish()
--- a/Plugins/VcsPlugins/vcsPySvn/SvnCommandDialog.py	Fri Jan 01 16:11:36 2010 +0000
+++ b/Plugins/VcsPlugins/vcsPySvn/SvnCommandDialog.py	Sat Jan 02 15:11:35 2010 +0000
@@ -12,7 +12,7 @@
 
 from E4Gui.E4Completers import E4DirCompleter
 
-from Ui_SvnCommandDialog import Ui_SvnCommandDialog
+from .Ui_SvnCommandDialog import Ui_SvnCommandDialog
 
 import Utilities
 
--- a/Plugins/VcsPlugins/vcsPySvn/SvnCommitDialog.py	Fri Jan 01 16:11:36 2010 +0000
+++ b/Plugins/VcsPlugins/vcsPySvn/SvnCommitDialog.py	Sat Jan 02 15:11:35 2010 +0000
@@ -12,7 +12,7 @@
 from PyQt4.QtCore import *
 from PyQt4.QtGui import *
 
-from Ui_SvnCommitDialog import Ui_SvnCommitDialog
+from .Ui_SvnCommitDialog import Ui_SvnCommitDialog
 
 import Preferences
 
--- a/Plugins/VcsPlugins/vcsPySvn/SvnCopyDialog.py	Fri Jan 01 16:11:36 2010 +0000
+++ b/Plugins/VcsPlugins/vcsPySvn/SvnCopyDialog.py	Sat Jan 02 15:11:35 2010 +0000
@@ -14,7 +14,7 @@
 
 from E4Gui.E4Completers import E4FileCompleter, E4DirCompleter
 
-from Ui_SvnCopyDialog import Ui_SvnCopyDialog
+from .Ui_SvnCopyDialog import Ui_SvnCopyDialog
 
 class SvnCopyDialog(QDialog, Ui_SvnCopyDialog):
     """
--- a/Plugins/VcsPlugins/vcsPySvn/SvnDialog.py	Fri Jan 01 16:11:36 2010 +0000
+++ b/Plugins/VcsPlugins/vcsPySvn/SvnDialog.py	Sat Jan 02 15:11:35 2010 +0000
@@ -14,10 +14,10 @@
 from PyQt4.QtCore import *
 from PyQt4.QtGui import *
 
-from SvnConst import svnNotifyActionMap
+from .SvnConst import svnNotifyActionMap
 
-from SvnDialogMixin import SvnDialogMixin
-from Ui_SvnDialog import Ui_SvnDialog
+from .SvnDialogMixin import SvnDialogMixin
+from .Ui_SvnDialog import Ui_SvnDialog
 
 import Preferences
 
--- a/Plugins/VcsPlugins/vcsPySvn/SvnDialogMixin.py	Fri Jan 01 16:11:36 2010 +0000
+++ b/Plugins/VcsPlugins/vcsPySvn/SvnDialogMixin.py	Sat Jan 02 15:11:35 2010 +0000
@@ -59,7 +59,7 @@
             as strings and save is a flag indicating, that username and
             password should be saved.
         """
-        from SvnLoginDialog import SvnLoginDialog
+        from .SvnLoginDialog import SvnLoginDialog
         cursor = QApplication.overrideCursor()
         if cursor is not None:
             QApplication.restoreOverrideCursor()
@@ -132,7 +132,7 @@
         
         @return a flag indicating success and the log message (string)
         """
-        from SvnCommitDialog import SvnCommitDialog
+        from .SvnCommitDialog import SvnCommitDialog
         if self.logMessage:
             return True, self.logMessage
         else:
--- a/Plugins/VcsPlugins/vcsPySvn/SvnDiffDialog.py	Fri Jan 01 16:11:36 2010 +0000
+++ b/Plugins/VcsPlugins/vcsPySvn/SvnDiffDialog.py	Sat Jan 02 15:11:35 2010 +0000
@@ -18,8 +18,8 @@
 
 from E4Gui.E4Application import e4App
 
-from SvnDialogMixin import SvnDialogMixin
-from Ui_SvnDiffDialog import Ui_SvnDiffDialog
+from .SvnDialogMixin import SvnDialogMixin
+from .Ui_SvnDiffDialog import Ui_SvnDiffDialog
 
 import Utilities
 
@@ -72,7 +72,7 @@
         @param version revision (integer or string)
         @return revision object (pysvn.Revision)
         """
-        if type(version) == type(1) or type(version) == type(1L):
+        if isinstance(version, int):
             return pysvn.Revision(pysvn.opt_revision_kind.number, version)
         elif version.startswith("{"):
             dateStr = version[1:-1]
@@ -176,7 +176,7 @@
             rev1 = self.__getVersionArg("HEAD")
             rev2 = self.__getVersionArg("HEAD")
         
-        if type(fn) is types.ListType:
+        if isinstance(fn, list):
             dname, fnames = self.vcs.splitPathList(fn)
         else:
             dname, fname = self.vcs.splitPath(fn)
@@ -230,7 +230,7 @@
                             break
                 if self._clientCancelCallback():
                     break
-        except pysvn.ClientError, e:
+        except pysvn.ClientError as e:
             self.__showError(e.args[0])
         locker.unlock()
         os.chdir(cwd)
@@ -303,7 +303,7 @@
         It saves the diff shown in the dialog to a file in the local
         filesystem.
         """
-        if type(self.filename) is types.ListType:
+        if isinstance(self.filename, list):
             if len(self.filename) > 1:
                 fname = self.vcs.splitPathList(self.filename)[0]
             else:
@@ -345,14 +345,14 @@
         fname = Utilities.toNativeSeparators(fname)
         
         try:
-            f = open(fname, "wb")
+            f = open(fname, "w")
             f.write(self.contents.toPlainText())
             f.close()
-        except IOError, why:
+        except IOError as why:
             QMessageBox.critical(self, self.trUtf8('Save Diff'),
                 self.trUtf8('<p>The patch file <b>{0}</b> could not be saved.'
                     '<br>Reason: {1}</p>')
-                    .format(fname, unicode(why)))
+                    .format(fname, str(why)))
         
     def __showError(self, msg):
         """
--- a/Plugins/VcsPlugins/vcsPySvn/SvnInfoDialog.py	Fri Jan 01 16:11:36 2010 +0000
+++ b/Plugins/VcsPlugins/vcsPySvn/SvnInfoDialog.py	Sat Jan 02 15:11:35 2010 +0000
@@ -14,8 +14,8 @@
 from PyQt4.QtCore import *
 from PyQt4.QtGui import *
 
-from SvnUtilities import formatTime
-from SvnDialogMixin import SvnDialogMixin
+from .SvnUtilities import formatTime
+from .SvnDialogMixin import SvnDialogMixin
 from VCS.Ui_RepositoryInfoDialog import Ui_VcsRepositoryInfoDialog
 
 class SvnInfoDialog(QDialog, SvnDialogMixin, Ui_VcsRepositoryInfoDialog):
@@ -159,7 +159,7 @@
                             .format(wcInfo['checksum'])
             infoStr += "</table>"
             self.infoBrowser.setHtml(infoStr)
-        except pysvn.ClientError, e:
+        except pysvn.ClientError as e:
             self.__showError(e.args[0])
         locker.unlock()
         os.chdir(cwd)
--- a/Plugins/VcsPlugins/vcsPySvn/SvnLogBrowserDialog.py	Fri Jan 01 16:11:36 2010 +0000
+++ b/Plugins/VcsPlugins/vcsPySvn/SvnLogBrowserDialog.py	Sat Jan 02 15:11:35 2010 +0000
@@ -14,11 +14,11 @@
 from PyQt4.QtCore import *
 from PyQt4.QtGui import *
 
-from SvnUtilities import formatTime, dateFromTime_t
-from SvnDialogMixin import SvnDialogMixin
-from SvnDiffDialog import SvnDiffDialog
+from .SvnUtilities import formatTime, dateFromTime_t
+from .SvnDialogMixin import SvnDialogMixin
+from .SvnDiffDialog import SvnDiffDialog
 
-from Ui_SvnLogBrowserDialog import Ui_SvnLogBrowserDialog
+from .Ui_SvnLogBrowserDialog import Ui_SvnLogBrowserDialog
 
 import UI.PixmapCache
 
@@ -167,7 +167,7 @@
             }
             changes.append(change)
         itm.setData(0, self.__messageRole, message)
-        itm.setData(0, self.__changesRole, unicode(changes))
+        itm.setData(0, self.__changesRole, str(changes))
         
         itm.setTextAlignment(0, Qt.AlignRight)
         itm.setTextAlignment(1, Qt.AlignLeft)
@@ -270,7 +270,7 @@
             self.__resizeColumnsLog()
             self.__resortLog()
             self.__filterLogs()
-        except pysvn.ClientError, e:
+        except pysvn.ClientError as e:
             locker.unlock()
             self.__showError(e.args[0])
         os.chdir(cwd)
--- a/Plugins/VcsPlugins/vcsPySvn/SvnLogDialog.py	Fri Jan 01 16:11:36 2010 +0000
+++ b/Plugins/VcsPlugins/vcsPySvn/SvnLogDialog.py	Sat Jan 02 15:11:35 2010 +0000
@@ -15,11 +15,11 @@
 from PyQt4.QtCore import *
 from PyQt4.QtGui import *
 
-from SvnUtilities import formatTime
+from .SvnUtilities import formatTime
 
-from SvnDialogMixin import SvnDialogMixin
-from Ui_SvnLogDialog import Ui_SvnLogDialog
-from SvnDiffDialog import SvnDiffDialog
+from .SvnDialogMixin import SvnDialogMixin
+from .Ui_SvnLogDialog import Ui_SvnLogDialog
+from .SvnDiffDialog import SvnDiffDialog
 
 import Utilities
 
@@ -170,7 +170,7 @@
                         self.contents.insertHtml(dstr)
                 
                 self.contents.insertHtml('<hr /><br />\n')
-        except pysvn.ClientError, e:
+        except pysvn.ClientError as e:
             locker.unlock()
             self.__showError(e.args[0])
         os.chdir(cwd)
@@ -215,7 +215,7 @@
         if Utilities.isWindowsPlatform():
             if filename.startswith("/"):
                 filename = filename[1:]
-        ver = unicode(url.encodedQuery())
+        ver = str(url.encodedQuery())
         v1 = ver.split('_')[0]
         v2 = ver.split('_')[1]
         if not v1 or not v2:
--- a/Plugins/VcsPlugins/vcsPySvn/SvnLoginDialog.py	Fri Jan 01 16:11:36 2010 +0000
+++ b/Plugins/VcsPlugins/vcsPySvn/SvnLoginDialog.py	Sat Jan 02 15:11:35 2010 +0000
@@ -9,7 +9,7 @@
 
 from PyQt4.QtGui import QDialog
 
-from Ui_SvnLoginDialog import Ui_SvnLoginDialog
+from .Ui_SvnLoginDialog import Ui_SvnLoginDialog
 
 class SvnLoginDialog(QDialog, Ui_SvnLoginDialog):
     """
--- a/Plugins/VcsPlugins/vcsPySvn/SvnMergeDialog.py	Fri Jan 01 16:11:36 2010 +0000
+++ b/Plugins/VcsPlugins/vcsPySvn/SvnMergeDialog.py	Sat Jan 02 15:11:35 2010 +0000
@@ -10,7 +10,7 @@
 from PyQt4.QtCore import *
 from PyQt4.QtGui import *
 
-from Ui_SvnMergeDialog import Ui_SvnMergeDialog
+from .Ui_SvnMergeDialog import Ui_SvnMergeDialog
 
 class SvnMergeDialog(QDialog, Ui_SvnMergeDialog):
     """
--- a/Plugins/VcsPlugins/vcsPySvn/SvnNewProjectOptionsDialog.py	Fri Jan 01 16:11:36 2010 +0000
+++ b/Plugins/VcsPlugins/vcsPySvn/SvnNewProjectOptionsDialog.py	Sat Jan 02 15:11:35 2010 +0000
@@ -14,9 +14,9 @@
 
 from E4Gui.E4Completers import E4DirCompleter
 
-from SvnRepoBrowserDialog import SvnRepoBrowserDialog
-from Ui_SvnNewProjectOptionsDialog import Ui_SvnNewProjectOptionsDialog
-from Config import ConfigSvnProtocols
+from .SvnRepoBrowserDialog import SvnRepoBrowserDialog
+from .Ui_SvnNewProjectOptionsDialog import Ui_SvnNewProjectOptionsDialog
+from .Config import ConfigSvnProtocols
 
 import Utilities
 
--- a/Plugins/VcsPlugins/vcsPySvn/SvnOptionsDialog.py	Fri Jan 01 16:11:36 2010 +0000
+++ b/Plugins/VcsPlugins/vcsPySvn/SvnOptionsDialog.py	Sat Jan 02 15:11:35 2010 +0000
@@ -14,9 +14,9 @@
 
 from E4Gui.E4Completers import E4DirCompleter
 
-from SvnRepoBrowserDialog import SvnRepoBrowserDialog
-from Ui_SvnOptionsDialog import Ui_SvnOptionsDialog
-from Config import ConfigSvnProtocols
+from .SvnRepoBrowserDialog import SvnRepoBrowserDialog
+from .Ui_SvnOptionsDialog import Ui_SvnOptionsDialog
+from .Config import ConfigSvnProtocols
 
 import Utilities
 
--- a/Plugins/VcsPlugins/vcsPySvn/SvnPropDelDialog.py	Fri Jan 01 16:11:36 2010 +0000
+++ b/Plugins/VcsPlugins/vcsPySvn/SvnPropDelDialog.py	Sat Jan 02 15:11:35 2010 +0000
@@ -10,7 +10,7 @@
 from PyQt4.QtCore import *
 from PyQt4.QtGui import *
 
-from Ui_SvnPropDelDialog import Ui_SvnPropDelDialog
+from .Ui_SvnPropDelDialog import Ui_SvnPropDelDialog
 
 class SvnPropDelDialog(QDialog, Ui_SvnPropDelDialog):
     """
--- a/Plugins/VcsPlugins/vcsPySvn/SvnPropListDialog.py	Fri Jan 01 16:11:36 2010 +0000
+++ b/Plugins/VcsPlugins/vcsPySvn/SvnPropListDialog.py	Sat Jan 02 15:11:35 2010 +0000
@@ -15,8 +15,8 @@
 from PyQt4.QtCore import *
 from PyQt4.QtGui import *
 
-from SvnDialogMixin import SvnDialogMixin
-from Ui_SvnPropListDialog import Ui_SvnPropListDialog
+from .SvnDialogMixin import SvnDialogMixin
+from .Ui_SvnPropListDialog import Ui_SvnPropListDialog
 
 class SvnPropListDialog(QWidget, SvnDialogMixin, Ui_SvnPropListDialog):
     """
@@ -84,7 +84,7 @@
         
         QApplication.processEvents()
         self.propsFound = False
-        if type(fn) is types.ListType:
+        if isinstance(fn, list):
             dname, fnames = self.vcs.splitPathList(fn)
         else:
             dname, fname = self.vcs.splitPath(fn)
@@ -98,7 +98,7 @@
                 proplist = self.client.proplist(name, recurse = recursive)
                 counter = 0
                 for path, prop in proplist:
-                    for propName, propVal in prop.items():
+                    for propName, propVal in list(prop.items()):
                         self.__generateItem(path, propName, propVal)
                         self.propsFound = True
                     counter += 1
@@ -109,7 +109,7 @@
                             break
                 if self._clientCancelCallback():
                     break
-        except pysvn.ClientError, e:
+        except pysvn.ClientError as e:
             self.__showError(e.args[0])
         locker.unlock()
         self.__finish()
--- a/Plugins/VcsPlugins/vcsPySvn/SvnPropSetDialog.py	Fri Jan 01 16:11:36 2010 +0000
+++ b/Plugins/VcsPlugins/vcsPySvn/SvnPropSetDialog.py	Sat Jan 02 15:11:35 2010 +0000
@@ -10,7 +10,7 @@
 from PyQt4.QtCore import *
 from PyQt4.QtGui import *
 
-from Ui_SvnPropSetDialog import Ui_SvnPropSetDialog
+from .Ui_SvnPropSetDialog import Ui_SvnPropSetDialog
 
 class SvnPropSetDialog(QDialog, Ui_SvnPropSetDialog):
     """
--- a/Plugins/VcsPlugins/vcsPySvn/SvnRelocateDialog.py	Fri Jan 01 16:11:36 2010 +0000
+++ b/Plugins/VcsPlugins/vcsPySvn/SvnRelocateDialog.py	Sat Jan 02 15:11:35 2010 +0000
@@ -10,7 +10,7 @@
 from PyQt4.QtCore import *
 from PyQt4.QtGui import *
 
-from Ui_SvnRelocateDialog import Ui_SvnRelocateDialog
+from .Ui_SvnRelocateDialog import Ui_SvnRelocateDialog
 
 class SvnRelocateDialog(QDialog, Ui_SvnRelocateDialog):
     """
--- a/Plugins/VcsPlugins/vcsPySvn/SvnRepoBrowserDialog.py	Fri Jan 01 16:11:36 2010 +0000
+++ b/Plugins/VcsPlugins/vcsPySvn/SvnRepoBrowserDialog.py	Sat Jan 02 15:11:35 2010 +0000
@@ -12,10 +12,10 @@
 from PyQt4.QtGui import *
 from PyQt4.QtCore import *
 
-from SvnUtilities import formatTime
-from SvnDialogMixin import SvnDialogMixin
+from .SvnUtilities import formatTime
+from .SvnDialogMixin import SvnDialogMixin
 
-from Ui_SvnRepoBrowserDialog import Ui_SvnRepoBrowserDialog
+from .Ui_SvnRepoBrowserDialog import Ui_SvnRepoBrowserDialog
 
 import UI.PixmapCache
 
@@ -183,7 +183,7 @@
                                 dirent["kind"], dirent["path"])
                 self.__resort()
                 self.__resizeColumns()
-            except pysvn.ClientError, e:
+            except pysvn.ClientError as e:
                 self.__showError(e.args[0])
             except AttributeError:
                 self.__showError(\
--- a/Plugins/VcsPlugins/vcsPySvn/SvnRevisionSelectionDialog.py	Fri Jan 01 16:11:36 2010 +0000
+++ b/Plugins/VcsPlugins/vcsPySvn/SvnRevisionSelectionDialog.py	Sat Jan 02 15:11:35 2010 +0000
@@ -10,7 +10,7 @@
 from PyQt4.QtCore import *
 from PyQt4.QtGui import *
 
-from Ui_SvnRevisionSelectionDialog import Ui_SvnRevisionSelectionDialog
+from .Ui_SvnRevisionSelectionDialog import Ui_SvnRevisionSelectionDialog
 
 
 class SvnRevisionSelectionDialog(QDialog, Ui_SvnRevisionSelectionDialog):
--- a/Plugins/VcsPlugins/vcsPySvn/SvnStatusDialog.py	Fri Jan 01 16:11:36 2010 +0000
+++ b/Plugins/VcsPlugins/vcsPySvn/SvnStatusDialog.py	Sat Jan 02 15:11:35 2010 +0000
@@ -17,9 +17,9 @@
 
 from E4Gui.E4Application import e4App
 
-from SvnConst import svnStatusMap
-from SvnDialogMixin import SvnDialogMixin
-from Ui_SvnStatusDialog import Ui_SvnStatusDialog
+from .SvnConst import svnStatusMap
+from .SvnDialogMixin import SvnDialogMixin
+from .Ui_SvnStatusDialog import Ui_SvnStatusDialog
 
 import Preferences
 
@@ -221,7 +221,7 @@
         self.activateWindow()
         self.raise_()
         
-        if type(fn) is types.ListType:
+        if isinstance(fn, list):
             self.dname, fnames = self.vcs.splitPathList(fn)
         else:
             self.dname, fname = self.vcs.splitPath(fn)
@@ -303,7 +303,7 @@
                             break
                 if self._clientCancelCallback():
                     break
-        except pysvn.ClientError, e:
+        except pysvn.ClientError as e:
             self.__showError(e.args[0]+'\n')
         locker.unlock()
         self.__finish()
--- a/Plugins/VcsPlugins/vcsPySvn/SvnStatusMonitorThread.py	Fri Jan 01 16:11:36 2010 +0000
+++ b/Plugins/VcsPlugins/vcsPySvn/SvnStatusMonitorThread.py	Sat Jan 02 15:11:35 2010 +0000
@@ -99,14 +99,14 @@
                             self.statusList.append("%s %s" % (status, file.path))
                     except KeyError:
                         self.statusList.append("%s %s" % (status, file.path))
-            for name in self.reportedStates.keys():
+            for name in list(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:
+        except pysvn.ClientError as e:
             res = False
             statusStr = e.args[0]
         os.chdir(cwd)
--- a/Plugins/VcsPlugins/vcsPySvn/SvnSwitchDialog.py	Fri Jan 01 16:11:36 2010 +0000
+++ b/Plugins/VcsPlugins/vcsPySvn/SvnSwitchDialog.py	Sat Jan 02 15:11:35 2010 +0000
@@ -10,7 +10,7 @@
 from PyQt4.QtCore import *
 from PyQt4.QtGui import *
 
-from Ui_SvnSwitchDialog import Ui_SvnSwitchDialog
+from .Ui_SvnSwitchDialog import Ui_SvnSwitchDialog
 
 class SvnSwitchDialog(QDialog, Ui_SvnSwitchDialog):
     """
--- a/Plugins/VcsPlugins/vcsPySvn/SvnTagBranchListDialog.py	Fri Jan 01 16:11:36 2010 +0000
+++ b/Plugins/VcsPlugins/vcsPySvn/SvnTagBranchListDialog.py	Sat Jan 02 15:11:35 2010 +0000
@@ -14,10 +14,10 @@
 from PyQt4.QtCore import *
 from PyQt4.QtGui import *
 
-from SvnUtilities import formatTime
+from .SvnUtilities import formatTime
 
-from SvnDialogMixin import SvnDialogMixin
-from Ui_SvnTagBranchListDialog import Ui_SvnTagBranchListDialog
+from .SvnDialogMixin import SvnDialogMixin
+from .Ui_SvnTagBranchListDialog import Ui_SvnTagBranchListDialog
 
 class SvnTagBranchListDialog(QDialog, SvnDialogMixin, Ui_SvnTagBranchListDialog):
     """
@@ -132,7 +132,7 @@
                     if self._clientCancelCallback():
                         break
             res = True
-        except pysvn.ClientError, e:
+        except pysvn.ClientError as e:
             self.__showError(e.args[0])
             res = False
         except AttributeError:
--- a/Plugins/VcsPlugins/vcsPySvn/SvnTagDialog.py	Fri Jan 01 16:11:36 2010 +0000
+++ b/Plugins/VcsPlugins/vcsPySvn/SvnTagDialog.py	Sat Jan 02 15:11:35 2010 +0000
@@ -10,7 +10,7 @@
 from PyQt4.QtCore import *
 from PyQt4.QtGui import *
 
-from Ui_SvnTagDialog import Ui_SvnTagDialog
+from .Ui_SvnTagDialog import Ui_SvnTagDialog
 
 class SvnTagDialog(QDialog, Ui_SvnTagDialog):
     """
--- a/Plugins/VcsPlugins/vcsPySvn/SvnUrlSelectionDialog.py	Fri Jan 01 16:11:36 2010 +0000
+++ b/Plugins/VcsPlugins/vcsPySvn/SvnUrlSelectionDialog.py	Sat Jan 02 15:11:35 2010 +0000
@@ -14,7 +14,7 @@
 
 import pysvn
 
-from Ui_SvnUrlSelectionDialog import Ui_SvnUrlSelectionDialog
+from .Ui_SvnUrlSelectionDialog import Ui_SvnUrlSelectionDialog
 
 
 class SvnUrlSelectionDialog(QDialog, Ui_SvnUrlSelectionDialog):
--- a/Plugins/VcsPlugins/vcsPySvn/SvnUtilities.py	Fri Jan 01 16:11:36 2010 +0000
+++ b/Plugins/VcsPlugins/vcsPySvn/SvnUtilities.py	Sat Jan 02 15:11:35 2010 +0000
@@ -21,7 +21,7 @@
     @param seconds time in seconds since epoch to be formatted (float or long)
     @return formatted time string (string)
     """
-    return QDateTime.fromTime_t(long(seconds))\
+    return QDateTime.fromTime_t(int(seconds))\
                     .toTimeSpec(Qt.LocalTime)\
                     .toString("yyyy-MM-dd hh:mm:ss")
 
@@ -32,7 +32,7 @@
     @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()
+    return QDateTime.fromTime_t(int(seconds)).toTimeSpec(Qt.LocalTime).date()
 
 def getServersPath():
     """
--- a/Plugins/VcsPlugins/vcsPySvn/subversion.py	Fri Jan 01 16:11:36 2010 +0000
+++ b/Plugins/VcsPlugins/vcsPySvn/subversion.py	Sat Jan 02 15:11:35 2010 +0000
@@ -10,7 +10,7 @@
 import os
 import shutil
 import types
-import urllib
+import urllib.request, urllib.parse, urllib.error
 import time
 
 from PyQt4.QtCore import *
@@ -22,33 +22,33 @@
 
 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 SvnStatusMonitorThread import SvnStatusMonitorThread
+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 .SvnStatusMonitorThread import SvnStatusMonitorThread
 
-from ProjectBrowserHelper import SvnProjectBrowserHelper
-from ProjectHelper import SvnProjectHelper
+from .ProjectBrowserHelper import SvnProjectBrowserHelper
+from .ProjectHelper import SvnProjectHelper
 
 from Plugins.VcsPlugins.vcsSubversion.SvnDialog import SvnDialog as SvnProcessDialog
 
@@ -107,7 +107,7 @@
         self.commandHistory = []
         self.wdHistory = []
         
-        if pysvn.version >= (1, 4, 3, 0) and os.environ.has_key("SVN_ASP_DOT_NET_HACK"):
+        if pysvn.version >= (1, 4, 3, 0) and "SVN_ASP_DOT_NET_HACK" in os.environ:
             self.adminDir = '_svn'
         else:
             self.adminDir = '.svn'
@@ -288,7 +288,7 @@
                 shutil.copytree(projectDir, os.path.join(tmpDir, project, 'trunk'))
             else:
                 shutil.copytree(projectDir, os.path.join(tmpDir, project))
-        except OSError, e:
+        except OSError as e:
             if os.path.isdir(tmpDir):
                 shutil.rmtree(tmpDir, True)            
             return False, False
@@ -313,7 +313,7 @@
         try:
             rev = client.import_(".", url, msg, recurse, ignore)
             status = True
-        except pysvn.ClientError, e:
+        except pysvn.ClientError as e:
             status = False
             rev = None
             if not noDialog:
@@ -385,7 +385,7 @@
         try:
             rev = client.checkout(url, projectDir, recurse)
             status = True
-        except pysvn.ClientError, e:
+        except pysvn.ClientError as e:
             status = False
             if not noDialog:
                 dlg.showError(e.args[0])
@@ -446,7 +446,7 @@
         try:
             rev = client.export(url, projectDir, force = True, recurse = recurse)
             status = True
-        except pysvn.ClientError, e:
+        except pysvn.ClientError as e:
             status = False
             dlg.showError(e.args[0])
         locker.unlock()
@@ -503,7 +503,7 @@
         if not msg:
             msg = '***'
         
-        if type(name) is types.ListType:
+        if isinstance(name, list):
             dname, fnames = self.splitPathList(name)
         else:
             dname, fname = self.splitPath(name)
@@ -541,7 +541,7 @@
             else:
                 rev = client.checkin(fnames, msg, 
                                      recurse = recurse, keep_locks = keeplocks)
-        except pysvn.ClientError, e:
+        except pysvn.ClientError as e:
             rev = None
             if not noDialog:
                 dlg.showError(e.args[0])
@@ -564,7 +564,7 @@
         @return flag indicating, that the update contained an add
             or delete (boolean)
         """
-        if type(name) is types.ListType:
+        if isinstance(name, list):
             dname, fnames = self.splitPathList(name)
         else:
             dname, fname = self.splitPath(name)
@@ -585,7 +585,7 @@
         QApplication.processEvents()
         try:
             revlist = client.update(fnames, recurse)
-        except pysvn.ClientError, e:
+        except pysvn.ClientError as e:
             dlg.showError(e.args[0])
         locker.unlock()
         if not noDialog:
@@ -606,7 +606,7 @@
         @param isDir flag indicating name is a directory (boolean)
         @param noDialog flag indicating quiet operations (boolean)
         """
-        if type(name) is types.ListType:
+        if isinstance(name, list):
             if isDir:
                 dname, fname = os.path.split(name[0])
             else:
@@ -626,7 +626,7 @@
             wdir = dname
         names.extend(tree)
         
-        if type(name) is types.ListType:
+        if isinstance(name, list):
             tree2 = []
             for n in name:
                 d = os.path.split(n)[0]
@@ -661,7 +661,7 @@
             QApplication.processEvents()
         try:
             client.add(names, recurse = recurse, force = force, ignore = ignore)
-        except pysvn.ClientError, e:
+        except pysvn.ClientError as e:
             if not noDialog:
                 dlg.showError(e.args[0])
         locker.unlock()
@@ -687,7 +687,7 @@
         @param path root directory of the tree to be added (string or list of strings))
         """
         tree = []
-        if type(path) is types.ListType:
+        if isinstance(path, list):
             dname, fnames = self.splitPathList(path)
             for n in path:
                 d = os.path.split(n)[0]
@@ -710,7 +710,7 @@
             self.vcsAdd(tree, True)
         
         names = []
-        if type(path) is types.ListType:
+        if isinstance(path, list):
             names.extend(path)
         else:
             names.append(path)
@@ -734,7 +734,7 @@
         QApplication.processEvents()
         try:
             client.add(names, recurse = recurse, force = force, ignore = ignore)
-        except pysvn.ClientError, e:
+        except pysvn.ClientError as e:
             dlg.showError(e.args[0])
         locker.unlock()
         dlg.finish()
@@ -752,7 +752,7 @@
         @param noDialog flag indicating quiet operations
         @return flag indicating successfull operation (boolean)
         """
-        if type(name) is not types.ListType:
+        if not isinstance(name, list):
             name = [name]
         opts = self.options['global'] + self.options['remove']
         force = "--force" in opts or noDialog
@@ -770,7 +770,7 @@
         try:
             client.remove(name, force = force)
             res = True
-        except pysvn.ClientError, e:
+        except pysvn.ClientError as e:
             res = False
             if not noDialog:
                 dlg.showError(e.args[0])
@@ -827,7 +827,7 @@
             try:
                 client.move(name, target, force = force)
                 res = True
-            except pysvn.ClientError, e:
+            except pysvn.ClientError as e:
                 res = False
                 if not noDialog:
                     dlg.showError(e.args[0])
@@ -871,7 +871,7 @@
         
         @param name file/directory name to be diffed (string)
         """
-        if type(name) is types.ListType:
+        if isinstance(name, list):
             names = name[:]
         else:
             names = [name]
@@ -946,9 +946,9 @@
             
             reposRoot = rx_base.cap(1)
             if tagOp in [1, 4]:
-                url = '%s/tags/%s' % (reposRoot, urllib.quote(tag))
+                url = '%s/tags/%s' % (reposRoot, urllib.parse.quote(tag))
             elif tagOp in [2, 8]:
-                url = '%s/branches/%s' % (reposRoot, urllib.quote(tag))
+                url = '%s/branches/%s' % (reposRoot, urllib.parse.quote(tag))
         else:
             url = self.__svnURL(tag)
         
@@ -966,7 +966,7 @@
             locker = QMutexLocker(self.vcsExecutionMutex)
             try:
                 rev = client.copy(reposURL, url)
-            except pysvn.ClientError, e:
+            except pysvn.ClientError as e:
                 dlg.showError(e.args[0])
             locker.unlock()
         else:
@@ -980,7 +980,7 @@
             locker = QMutexLocker(self.vcsExecutionMutex)
             try:
                 rev = client.remove(url)
-            except pysvn.ClientError, e:
+            except pysvn.ClientError as e:
                 dlg.showError(e.args[0])
             locker.unlock()
         rev and dlg.showMessage(\
@@ -995,7 +995,7 @@
         @param name file/directory name to be reverted (string)
         """
         recurse = False
-        if type(name) is not types.ListType:
+        if not isinstance(name, list):
             name = [name]
             if os.path.isdir(name[0]):
                 recurse = True
@@ -1009,7 +1009,7 @@
         locker = QMutexLocker(self.vcsExecutionMutex)
         try:
             client.revert(name, recurse)
-        except pysvn.ClientError, e:
+        except pysvn.ClientError as e:
             dlg.showError(e.args[0])
         locker.unlock()
         dlg.finish()
@@ -1060,9 +1060,9 @@
             reposRoot = rx_base.cap(1)
             tn = tag
             if tagType == 1:
-                url = '%s/tags/%s' % (reposRoot, urllib.quote(tag))
+                url = '%s/tags/%s' % (reposRoot, urllib.parse.quote(tag))
             elif tagType == 2:
-                url = '%s/branches/%s' % (reposRoot, urllib.quote(tag))
+                url = '%s/branches/%s' % (reposRoot, urllib.parse.quote(tag))
             elif tagType == 4:
                 url = '%s/trunk' % (reposRoot)
                 tn = QString('HEAD')
@@ -1080,7 +1080,7 @@
         try:
             rev = client.switch(name, url)
             dlg.showMessage(self.trUtf8("Revision {0}.\n").format(rev.number))
-        except pysvn.ClientError, e:
+        except pysvn.ClientError as e:
             dlg.showError(e.args[0])
         locker.unlock()
         dlg.finish()
@@ -1184,7 +1184,7 @@
         try:
             client.merge(url1, revision1, url2, revision2, fname, 
                          recurse = recurse, force = force)
-        except pysvn.ClientError, e:
+        except pysvn.ClientError as e:
             dlg.showError(e.args[0])
         locker.unlock()
         dlg.finish()
@@ -1243,7 +1243,7 @@
                     names[name] = self.statusCache[name]
         
         if not found:
-            from SvnDialogMixin import SvnDialogMixin
+            from .SvnDialogMixin import SvnDialogMixin
             mixin = SvnDialogMixin()
             client = self.getClient()
             client.callback_get_login = \
@@ -1264,7 +1264,7 @@
                         self.statusCache[name] = self.canBeCommitted
                     else:
                         self.statusCache[name] = self.canBeAdded
-            except pysvn.ClientError, e:
+            except pysvn.ClientError as e:
                 locker.unlock()    # ignore pysvn errors
         
         return names
@@ -1298,7 +1298,7 @@
         locker = QMutexLocker(self.vcsExecutionMutex)
         try:
             rev = client.cleanup(name)
-        except pysvn.ClientError, e:
+        except pysvn.ClientError as e:
             dlg.showError(e.args[0])
         locker.unlock()
         dlg.finish()
@@ -1360,7 +1360,7 @@
         """
         try:
             entry = self.getClient().info(ppath)
-        except pysvn.ClientError, e:
+        except pysvn.ClientError as e:
             return e.args[0]
         
         if hasattr(pysvn, 'svn_api_version'):
@@ -1419,7 +1419,7 @@
         
         @param name file/directory name to be resolved (string)
         """
-        if type(name) is types.ListType:
+        if isinstance(name, list):
             dname, fnames = self.splitPathList(name)
         else:
             dname, fname = self.splitPath(name)
@@ -1441,7 +1441,7 @@
         try:
             for name in fnames:
                 rev = client.resolved(name, recurse = recurse)
-        except pysvn.ClientError, e:
+        except pysvn.ClientError as e:
             dlg.showError(e.args[0])
         locker.unlock()
         dlg.finish()
@@ -1482,7 +1482,7 @@
             try:
                 client.copy(name, target)
                 res = True
-            except pysvn.ClientError, e:
+            except pysvn.ClientError as e:
                 res = False
                 dlg.showError(e.args[0])
             locker.unlock()
@@ -1525,7 +1525,7 @@
                     self.trUtf8("""You have to supply a property name. Aborting."""))
                 return
             
-            if type(name) is types.ListType:
+            if isinstance(name, list):
                 dname, fnames = self.splitPathList(name)
             else:
                 dname, fname = self.splitPath(name)
@@ -1551,7 +1551,7 @@
                 for name in fnames:
                     client.propset(propName, propValue, name, 
                                    recurse = recurse, skip_checks = skipchecks)
-            except pysvn.ClientError, e:
+            except pysvn.ClientError as e:
                 dlg.showError(e.args[0])
             locker.unlock()
             dlg.showMessage(self.trUtf8("Property set."))
@@ -1576,7 +1576,7 @@
                     self.trUtf8("""You have to supply a property name. Aborting."""))
                 return
             
-            if type(name) is types.ListType:
+            if isinstance(name, list):
                 dname, fnames = self.splitPathList(name)
             else:
                 dname, fname = self.splitPath(name)
@@ -1601,7 +1601,7 @@
                 for name in fnames:
                     client.propdel(propName, name, 
                                    recurse = recurse, skip_checks = skipchecks)
-            except pysvn.ClientError, e:
+            except pysvn.ClientError as e:
                 dlg.showError(e.args[0])
             locker.unlock()
             dlg.showMessage(self.trUtf8("Property deleted."))
@@ -1657,7 +1657,7 @@
         
         @param name file/directory name to be diffed (string)
         """
-        if type(name) is types.ListType:
+        if isinstance(name, list):
             names = name[:]
         else:
             names = [name]
@@ -1691,7 +1691,7 @@
         
         @param name file/directory name to be diffed (string)
         """
-        if type(name) is types.ListType:
+        if isinstance(name, list):
             names = name[:]
         else:
             names = [name]
@@ -1762,7 +1762,7 @@
         if not ok:
             return
         
-        if type(name) is types.ListType:
+        if isinstance(name, list):
             dname, fnames = self.splitPathList(name)
         else:
             dname, fname = self.splitPath(name)
@@ -1783,10 +1783,10 @@
         QApplication.processEvents()
         try:
             client.lock(fnames, comment, force = stealIt)
-        except pysvn.ClientError, e:
+        except pysvn.ClientError as e:
             dlg.showError(e.args[0])
-        except AttributeError, e:
-            dlg.showError(unicode(e))
+        except AttributeError as e:
+            dlg.showError(str(e))
         locker.unlock()
         dlg.finish()
         dlg.exec_()
@@ -1800,7 +1800,7 @@
         @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:
+        if isinstance(name, list):
             dname, fnames = self.splitPathList(name)
         else:
             dname, fname = self.splitPath(name)
@@ -1820,10 +1820,10 @@
         QApplication.processEvents()
         try:
             client.unlock(fnames, force = breakIt)
-        except pysvn.ClientError, e:
+        except pysvn.ClientError as e:
             dlg.showError(e.args[0])
-        except AttributeError, e:
-            dlg.showError(unicode(e))
+        except AttributeError as e:
+            dlg.showError(str(e))
         locker.unlock()
         dlg.finish()
         dlg.exec_()
@@ -1864,7 +1864,7 @@
                     client.switch(projectPath, newUrl)
                 else:
                     client.relocate(currUrl, newUrl, projectPath, recurse = True)
-            except pysvn.ClientError, e:
+            except pysvn.ClientError as e:
                 dlg.showError(e.args[0])
             locker.unlock()
             dlg.finish()
@@ -1902,7 +1902,7 @@
         @param names name or list of names of file or directory to remove
             (string)
         """
-        if type(names) is not types.ListType:
+        if not isinstance(names, list):
             names = [names]
         client = self.getClient()
         dlg = \
@@ -1914,7 +1914,7 @@
         try:
             for name in names:
                 client.remove_from_changelists(name)
-        except pysvn.ClientError, e:
+        except pysvn.ClientError as e:
             dlg.showError(e.args[0])
         locker.unlock()
         dlg.finish()
@@ -1929,7 +1929,7 @@
         @param names name or list of names of file or directory to add
             (string)
         """
-        if type(names) is not types.ListType:
+        if not isinstance(names, list):
             names = [names]
         
         clname, ok = QInputDialog.getText(\
@@ -1950,7 +1950,7 @@
         try:
             for name in names:
                 client.add_to_changelist(name, clname, depth = pysvn.depth.infinity)
-        except pysvn.ClientError, e:
+        except pysvn.ClientError as e:
             dlg.showError(e.args[0])
         locker.unlock()
         dlg.finish()
@@ -1973,14 +1973,14 @@
             scheme = url[0]
             host = url[1]
             port, path = url[2].split("/",1)
-            return "%s:%s:%s/%s" % (scheme, host, port, urllib.quote(path))
+            return "%s:%s:%s/%s" % (scheme, host, port, urllib.parse.quote(path))
         else:
             scheme = url[0]
             if scheme == "file":
-                return "%s:%s" % (scheme, urllib.quote(url[1]))
+                return "%s:%s" % (scheme, urllib.parse.quote(url[1]))
             else:
                 host, path = url[1][2:].split("/",1)
-                return "%s://%s/%s" % (scheme, host, urllib.quote(path))
+                return "%s://%s/%s" % (scheme, host, urllib.parse.quote(path))
 
     def svnNormalizeURL(self, url):
         """
--- a/Plugins/VcsPlugins/vcsSubversion/ConfigurationPage/SubversionPage.py	Fri Jan 01 16:11:36 2010 +0000
+++ b/Plugins/VcsPlugins/vcsSubversion/ConfigurationPage/SubversionPage.py	Sat Jan 02 15:11:35 2010 +0000
@@ -12,7 +12,7 @@
 from QScintilla.MiniEditor import MiniEditor
 
 from Preferences.ConfigurationPages.ConfigurationPageBase import ConfigurationPageBase
-from Ui_SubversionPage import Ui_SubversionPage
+from .Ui_SubversionPage import Ui_SubversionPage
 
 class SubversionPage(ConfigurationPageBase, Ui_SubversionPage):
     """
--- a/Plugins/VcsPlugins/vcsSubversion/SvnBlameDialog.py	Fri Jan 01 16:11:36 2010 +0000
+++ b/Plugins/VcsPlugins/vcsSubversion/SvnBlameDialog.py	Sat Jan 02 15:11:35 2010 +0000
@@ -12,7 +12,7 @@
 from PyQt4.QtCore import *
 from PyQt4.QtGui import *
 
-from Ui_SvnBlameDialog import Ui_SvnBlameDialog
+from .Ui_SvnBlameDialog import Ui_SvnBlameDialog
 
 import Preferences
 import Utilities
@@ -177,7 +177,7 @@
         self.process.setReadChannel(QProcess.StandardOutput)
         
         while self.process.canReadLine():
-            s = unicode(self.process.readLine(), self.__ioEncoding, 'replace').strip()
+            s = str(self.process.readLine(), self.__ioEncoding, 'replace').strip()
             rev, s = s.split(None, 1)
             try:
                 author, text = s.split(' ', 1)
@@ -195,7 +195,9 @@
         """
         if self.process is not None:
             self.errorGroup.show()
-            s = unicode(self.process.readAllStandardError())
+            s = str(self.process.readAllStandardError(), 
+                    Preferences.getSystem("IOEncoding"), 
+                    'replace')
             self.errors.insertPlainText(s)
             self.errors.ensureCursorVisible()
         
--- a/Plugins/VcsPlugins/vcsSubversion/SvnCommandDialog.py	Fri Jan 01 16:11:36 2010 +0000
+++ b/Plugins/VcsPlugins/vcsSubversion/SvnCommandDialog.py	Sat Jan 02 15:11:35 2010 +0000
@@ -12,7 +12,7 @@
 
 from E4Gui.E4Completers import E4DirCompleter
 
-from Ui_SvnCommandDialog import Ui_SvnCommandDialog
+from .Ui_SvnCommandDialog import Ui_SvnCommandDialog
 
 import Utilities
 
--- a/Plugins/VcsPlugins/vcsSubversion/SvnCommitDialog.py	Fri Jan 01 16:11:36 2010 +0000
+++ b/Plugins/VcsPlugins/vcsSubversion/SvnCommitDialog.py	Sat Jan 02 15:11:35 2010 +0000
@@ -10,7 +10,7 @@
 from PyQt4.QtCore import *
 from PyQt4.QtGui import *
 
-from Ui_SvnCommitDialog import Ui_SvnCommitDialog
+from .Ui_SvnCommitDialog import Ui_SvnCommitDialog
 
 import Preferences
 
--- a/Plugins/VcsPlugins/vcsSubversion/SvnCopyDialog.py	Fri Jan 01 16:11:36 2010 +0000
+++ b/Plugins/VcsPlugins/vcsSubversion/SvnCopyDialog.py	Sat Jan 02 15:11:35 2010 +0000
@@ -14,7 +14,7 @@
 
 from E4Gui.E4Completers import E4FileCompleter, E4DirCompleter
 
-from Ui_SvnCopyDialog import Ui_SvnCopyDialog
+from .Ui_SvnCopyDialog import Ui_SvnCopyDialog
 
 class SvnCopyDialog(QDialog, Ui_SvnCopyDialog):
     """
--- a/Plugins/VcsPlugins/vcsSubversion/SvnDialog.py	Fri Jan 01 16:11:36 2010 +0000
+++ b/Plugins/VcsPlugins/vcsSubversion/SvnDialog.py	Sat Jan 02 15:11:35 2010 +0000
@@ -12,7 +12,7 @@
 from PyQt4.QtCore import *
 from PyQt4.QtGui import *
 
-from Ui_SvnDialog import Ui_SvnDialog
+from .Ui_SvnDialog import Ui_SvnDialog
 
 import Preferences
 
@@ -156,7 +156,9 @@
         the contents pane.
         """
         if self.proc is not None:
-            s = unicode(self.proc.readAllStandardOutput())
+            s = str(self.proc.readAllStandardOutput(), 
+                    Preferences.getSystem("IOEncoding"), 
+                    'replace')
             self.resultbox.insertPlainText(s)
             self.resultbox.ensureCursorVisible()
             if not self.__hasAddOrDelete and len(s) > 0:
@@ -175,7 +177,9 @@
         """
         if self.proc is not None:
             self.errorGroup.show()
-            s = unicode(self.proc.readAllStandardError())
+            s = str(self.proc.readAllStandardError(), 
+                    Preferences.getSystem("IOEncoding"), 
+                    'replace')
             self.errors.insertPlainText(s)
             self.errors.ensureCursorVisible()
         
--- a/Plugins/VcsPlugins/vcsSubversion/SvnDiffDialog.py	Fri Jan 01 16:11:36 2010 +0000
+++ b/Plugins/VcsPlugins/vcsSubversion/SvnDiffDialog.py	Sat Jan 02 15:11:35 2010 +0000
@@ -16,9 +16,10 @@
 
 from E4Gui.E4Application import e4App
 
-from Ui_SvnDiffDialog import Ui_SvnDiffDialog
+from .Ui_SvnDiffDialog import Ui_SvnDiffDialog
 
 import Utilities
+import Preferences
 
 class SvnDiffDialog(QWidget, Ui_SvnDiffDialog):
     """
@@ -137,7 +138,7 @@
                 self.summaryPath = urls[0]
             args.append("--old=%s" % urls[0])
             args.append("--new=%s" % urls[1])
-            if type(fn) is types.ListType:
+            if isinstance(fn, list):
                 dname, fnames = self.vcs.splitPathList(fn)
             else:
                 dname, fname = self.vcs.splitPath(fn)
@@ -152,7 +153,7 @@
             for fname in fnames:
                 args.append(path + fname)
         else:
-            if type(fn) is types.ListType:
+            if isinstance(fn, list):
                 dname, fnames = self.vcs.splitPathList(fn)
                 self.vcs.addArguments(args, fnames)
             else:
@@ -215,7 +216,9 @@
         self.process.setReadChannel(QProcess.StandardOutput)
         
         while self.process.canReadLine():
-            line = unicode(self.process.readLine())
+            line = str(self.process.readLine(), 
+                        Preferences.getSystem("IOEncoding"), 
+                        'replace')
             if self.summaryPath:
                 line = line.replace(self.summaryPath + '/', '')
                 line = " ".join(line.split())
@@ -239,7 +242,9 @@
         """
         if self.process is not None:
             self.errorGroup.show()
-            s = unicode(self.process.readAllStandardError())
+            s = str(self.process.readAllStandardError(), 
+                    Preferences.getSystem("IOEncoding"), 
+                    'replace')
             self.errors.insertPlainText(s)
             self.errors.ensureCursorVisible()
         
@@ -260,7 +265,7 @@
         It saves the diff shown in the dialog to a file in the local
         filesystem.
         """
-        if type(self.filename) is types.ListType:
+        if isinstance(self.filename, list):
             if len(self.filename) > 1:
                 fname = self.vcs.splitPathList(self.filename)[0]
             else:
@@ -302,14 +307,14 @@
         fname = Utilities.toNativeSeparators(fname)
         
         try:
-            f = open(fname, "wb")
+            f = open(fname, "w")
             f.write(self.contents.toPlainText())
             f.close()
-        except IOError, why:
+        except IOError as why:
             QMessageBox.critical(self, self.trUtf8('Save Diff'),
                 self.trUtf8('<p>The patch file <b>{0}</b> could not be saved.'
                     '<br>Reason: {1}</p>')
-                    .format(fname, unicode(why)))
+                    .format(fname, str(why)))
         
     def on_passwordCheckBox_toggled(self, isOn):
         """
--- a/Plugins/VcsPlugins/vcsSubversion/SvnLogBrowserDialog.py	Fri Jan 01 16:11:36 2010 +0000
+++ b/Plugins/VcsPlugins/vcsSubversion/SvnLogBrowserDialog.py	Sat Jan 02 15:11:35 2010 +0000
@@ -12,9 +12,9 @@
 from PyQt4.QtCore import *
 from PyQt4.QtGui import *
 
-from SvnDiffDialog import SvnDiffDialog
+from .SvnDiffDialog import SvnDiffDialog
 
-from Ui_SvnLogBrowserDialog import Ui_SvnLogBrowserDialog
+from .Ui_SvnLogBrowserDialog import Ui_SvnLogBrowserDialog
 
 import UI.PixmapCache
 
@@ -313,20 +313,20 @@
             elif self.rx_flags1.exactMatch(s):
                 changedPaths.append({\
                     "action"            : 
-                        unicode(self.rx_flags1.cap(1).strip(), ioEncoding, 'replace'), 
+                        str(self.rx_flags1.cap(1).strip(), ioEncoding, 'replace'), 
                     "path"              : 
-                        unicode(self.rx_flags1.cap(2).strip(), ioEncoding, 'replace'), 
+                        str(self.rx_flags1.cap(2).strip(), ioEncoding, 'replace'), 
                     "copyfrom_path"     : 
-                        unicode(self.rx_flags1.cap(3).strip(), ioEncoding, 'replace'), 
+                        str(self.rx_flags1.cap(3).strip(), ioEncoding, 'replace'), 
                     "copyfrom_revision" : 
-                        unicode(self.rx_flags1.cap(4).strip(), ioEncoding, 'replace'), 
+                        str(self.rx_flags1.cap(4).strip(), ioEncoding, 'replace'), 
                 })
             elif self.rx_flags2.exactMatch(s):
                 changedPaths.append({\
                     "action"            : 
-                        unicode(self.rx_flags2.cap(1).strip(), ioEncoding, 'replace'), 
+                        str(self.rx_flags2.cap(1).strip(), ioEncoding, 'replace'), 
                     "path"              : 
-                        unicode(self.rx_flags2.cap(2).strip(), ioEncoding, 'replace'), 
+                        str(self.rx_flags2.cap(2).strip(), ioEncoding, 'replace'), 
                     "copyfrom_path"     : "", 
                     "copyfrom_revision" : "", 
                 })
@@ -383,7 +383,9 @@
         self.process.setReadChannel(QProcess.StandardOutput)
         
         while self.process.canReadLine():
-            line = unicode(self.process.readLine())
+            line = str(self.process.readLine(), 
+                        Preferences.getSystem("IOEncoding"), 
+                        'replace')
             self.buf.append(line)
     
     def __readStderr(self):
@@ -394,7 +396,9 @@
         error pane.
         """
         if self.process is not None:
-            s = unicode(self.process.readAllStandardError())
+            s = str(self.process.readAllStandardError(), 
+                     Preferences.getSystem("IOEncoding"), 
+                     'replace')
             self.errors.insertPlainText(s)
             self.errors.ensureCursorVisible()
     
--- a/Plugins/VcsPlugins/vcsSubversion/SvnLogDialog.py	Fri Jan 01 16:11:36 2010 +0000
+++ b/Plugins/VcsPlugins/vcsSubversion/SvnLogDialog.py	Sat Jan 02 15:11:35 2010 +0000
@@ -13,10 +13,11 @@
 from PyQt4.QtCore import *
 from PyQt4.QtGui import *
 
-from Ui_SvnLogDialog import Ui_SvnLogDialog
-from SvnDiffDialog import SvnDiffDialog
+from .Ui_SvnLogDialog import Ui_SvnLogDialog
+from .SvnDiffDialog import SvnDiffDialog
 
 import Utilities
+import Preferences
 
 class SvnLogDialog(QWidget, Ui_SvnLogDialog):
     """
@@ -221,7 +222,9 @@
         self.process.setReadChannel(QProcess.StandardOutput)
         
         while self.process.canReadLine():
-            line = unicode(self.process.readLine())
+            line = str(self.process.readLine(), 
+                        Preferences.getSystem("IOEncoding"), 
+                        'replace')
             self.buf.append(line)
             if self.rx_rev.exactMatch(line):
                 ver = self.rx_rev.cap(1)
@@ -241,7 +244,9 @@
         """
         if self.process is not None:
             self.errorGroup.show()
-            s = unicode(self.process.readAllStandardError())
+            s = str(self.process.readAllStandardError(), 
+                     Preferences.getSystem("IOEncoding"), 
+                     'replace')
             self.errors.insertPlainText(s)
             self.errors.ensureCursorVisible()
         
@@ -256,7 +261,7 @@
         if Utilities.isWindowsPlatform():
             if filename.startswith("/"):
                 filename = filename[1:]
-        ver = unicode(url.encodedQuery())
+        ver = str(url.encodedQuery())
         v1 = ver.split('_')[0]
         v2 = ver.split('_')[1]
         if v1 == "" or v2 == "":
--- a/Plugins/VcsPlugins/vcsSubversion/SvnMergeDialog.py	Fri Jan 01 16:11:36 2010 +0000
+++ b/Plugins/VcsPlugins/vcsSubversion/SvnMergeDialog.py	Sat Jan 02 15:11:35 2010 +0000
@@ -10,7 +10,7 @@
 from PyQt4.QtCore import *
 from PyQt4.QtGui import *
 
-from Ui_SvnMergeDialog import Ui_SvnMergeDialog
+from .Ui_SvnMergeDialog import Ui_SvnMergeDialog
 
 class SvnMergeDialog(QDialog, Ui_SvnMergeDialog):
     """
--- a/Plugins/VcsPlugins/vcsSubversion/SvnNewProjectOptionsDialog.py	Fri Jan 01 16:11:36 2010 +0000
+++ b/Plugins/VcsPlugins/vcsSubversion/SvnNewProjectOptionsDialog.py	Sat Jan 02 15:11:35 2010 +0000
@@ -14,9 +14,9 @@
 
 from E4Gui.E4Completers import E4DirCompleter
 
-from SvnRepoBrowserDialog import SvnRepoBrowserDialog
-from Ui_SvnNewProjectOptionsDialog import Ui_SvnNewProjectOptionsDialog
-from Config import ConfigSvnProtocols
+from .SvnRepoBrowserDialog import SvnRepoBrowserDialog
+from .Ui_SvnNewProjectOptionsDialog import Ui_SvnNewProjectOptionsDialog
+from .Config import ConfigSvnProtocols
 
 import Utilities
 
--- a/Plugins/VcsPlugins/vcsSubversion/SvnOptionsDialog.py	Fri Jan 01 16:11:36 2010 +0000
+++ b/Plugins/VcsPlugins/vcsSubversion/SvnOptionsDialog.py	Sat Jan 02 15:11:35 2010 +0000
@@ -14,9 +14,9 @@
 
 from E4Gui.E4Completers import E4DirCompleter
 
-from SvnRepoBrowserDialog import SvnRepoBrowserDialog
-from Ui_SvnOptionsDialog import Ui_SvnOptionsDialog
-from Config import ConfigSvnProtocols
+from .SvnRepoBrowserDialog import SvnRepoBrowserDialog
+from .Ui_SvnOptionsDialog import Ui_SvnOptionsDialog
+from .Config import ConfigSvnProtocols
 
 import Utilities
 
--- a/Plugins/VcsPlugins/vcsSubversion/SvnPropListDialog.py	Fri Jan 01 16:11:36 2010 +0000
+++ b/Plugins/VcsPlugins/vcsSubversion/SvnPropListDialog.py	Sat Jan 02 15:11:35 2010 +0000
@@ -12,7 +12,9 @@
 from PyQt4.QtCore import *
 from PyQt4.QtGui import *
 
-from Ui_SvnPropListDialog import Ui_SvnPropListDialog
+from .Ui_SvnPropListDialog import Ui_SvnPropListDialog
+
+import Preferences
 
 class SvnPropListDialog(QWidget, Ui_SvnPropListDialog):
     """
@@ -105,7 +107,7 @@
         args.append('--verbose')
         if recursive:
             args.append('--recursive')
-        if type(fn) is types.ListType:
+        if isinstance(fn, list):
             dname, fnames = self.vcs.splitPathList(fn)
             self.vcs.addArguments(args, fnames)
         else:
@@ -178,7 +180,9 @@
         self.process.setReadChannel(QProcess.StandardOutput)
         
         while self.process.canReadLine():
-            s = unicode(self.process.readLine())
+            s = str(self.process.readLine(), 
+                     Preferences.getSystem("IOEncoding"), 
+                     'replace')
             if self.rx_path.exactMatch(s):
                 if self.lastProp:
                     self.__generateItem(self.lastPath, self.lastProp, self.propBuffer)
@@ -203,6 +207,8 @@
         """
         if self.process is not None:
             self.errorGroup.show()
-            s = unicode(self.process.readAllStandardError())
+            s = str(self.process.readAllStandardError(), 
+                     Preferences.getSystem("IOEncoding"), 
+                     'replace')
             self.errors.insertPlainText(s)
             self.errors.ensureCursorVisible()
--- a/Plugins/VcsPlugins/vcsSubversion/SvnPropSetDialog.py	Fri Jan 01 16:11:36 2010 +0000
+++ b/Plugins/VcsPlugins/vcsSubversion/SvnPropSetDialog.py	Sat Jan 02 15:11:35 2010 +0000
@@ -12,7 +12,7 @@
 
 from E4Gui.E4Completers import E4FileCompleter
 
-from Ui_SvnPropSetDialog import Ui_SvnPropSetDialog
+from .Ui_SvnPropSetDialog import Ui_SvnPropSetDialog
 
 import Utilities
 
--- a/Plugins/VcsPlugins/vcsSubversion/SvnRelocateDialog.py	Fri Jan 01 16:11:36 2010 +0000
+++ b/Plugins/VcsPlugins/vcsSubversion/SvnRelocateDialog.py	Sat Jan 02 15:11:35 2010 +0000
@@ -10,7 +10,7 @@
 from PyQt4.QtCore import *
 from PyQt4.QtGui import *
 
-from Ui_SvnRelocateDialog import Ui_SvnRelocateDialog
+from .Ui_SvnRelocateDialog import Ui_SvnRelocateDialog
 
 class SvnRelocateDialog(QDialog, Ui_SvnRelocateDialog):
     """
--- a/Plugins/VcsPlugins/vcsSubversion/SvnRepoBrowserDialog.py	Fri Jan 01 16:11:36 2010 +0000
+++ b/Plugins/VcsPlugins/vcsSubversion/SvnRepoBrowserDialog.py	Sat Jan 02 15:11:35 2010 +0000
@@ -12,7 +12,7 @@
 from PyQt4.QtGui import *
 from PyQt4.QtCore import *
 
-from Ui_SvnRepoBrowserDialog import Ui_SvnRepoBrowserDialog
+from .Ui_SvnRepoBrowserDialog import Ui_SvnRepoBrowserDialog
 
 import UI.PixmapCache
 
@@ -152,15 +152,16 @@
             finished = process.waitForFinished(30000)
             if finished:
                 if process.exitCode() == 0:
-                    output = unicode(process.readAllStandardOutput(), 
-                                     ioEncoding, 'replace')
+                    output = str(process.readAllStandardOutput(), ioEncoding, 'replace')
                     for line in output.splitlines():
                         line = line.strip()
                         if line.startswith('<root>'):
                             repoRoot = line.replace('<root>', '').replace('</root>', '')
                             break
                 else:
-                    error = unicode(process.readAllStandardError())
+                    error = str(process.readAllStandardError(), 
+                                Preferences.getSystem("IOEncoding"), 
+                                'replace')
                     self.errors.insertPlainText(error)
                     self.errors.ensureCursorVisible()
         else:
@@ -367,7 +368,9 @@
             self.process.setReadChannel(QProcess.StandardOutput)
             
             while self.process.canReadLine():
-                s = unicode(self.process.readLine())
+                s = str(self.process.readLine(), 
+                        Preferences.getSystem("IOEncoding"), 
+                        'replace')
                 if self.__rx_dir.exactMatch(s):
                     revision = self.__rx_dir.cap(1)
                     author = self.__rx_dir.cap(2)
@@ -397,7 +400,9 @@
         error pane.
         """
         if self.process is not None:
-            s = unicode(self.process.readAllStandardError())
+            s = str(self.process.readAllStandardError(), 
+                    Preferences.getSystem("IOEncoding"), 
+                    'replace')
             self.errors.insertPlainText(s)
             self.errors.ensureCursorVisible()
     
--- a/Plugins/VcsPlugins/vcsSubversion/SvnRevisionSelectionDialog.py	Fri Jan 01 16:11:36 2010 +0000
+++ b/Plugins/VcsPlugins/vcsSubversion/SvnRevisionSelectionDialog.py	Sat Jan 02 15:11:35 2010 +0000
@@ -10,7 +10,7 @@
 from PyQt4.QtCore import *
 from PyQt4.QtGui import *
 
-from Ui_SvnRevisionSelectionDialog import Ui_SvnRevisionSelectionDialog
+from .Ui_SvnRevisionSelectionDialog import Ui_SvnRevisionSelectionDialog
 
 
 class SvnRevisionSelectionDialog(QDialog, Ui_SvnRevisionSelectionDialog):
--- a/Plugins/VcsPlugins/vcsSubversion/SvnStatusDialog.py	Fri Jan 01 16:11:36 2010 +0000
+++ b/Plugins/VcsPlugins/vcsSubversion/SvnStatusDialog.py	Sat Jan 02 15:11:35 2010 +0000
@@ -15,7 +15,7 @@
 
 from E4Gui.E4Application import e4App
 
-from Ui_SvnStatusDialog import Ui_SvnStatusDialog
+from .Ui_SvnStatusDialog import Ui_SvnStatusDialog
 
 import Preferences
 
@@ -292,7 +292,7 @@
            '-u' in self.vcs.options['status']:
             self.activateWindow()
             self.raise_()
-        if type(fn) is types.ListType:
+        if isinstance(fn, list):
             self.dname, fnames = self.vcs.splitPathList(fn)
             self.vcs.addArguments(args, fnames)
         else:
@@ -376,7 +376,9 @@
             self.process.setReadChannel(QProcess.StandardOutput)
             
             while self.process.canReadLine():
-                s = unicode(self.process.readLine())
+                s = str(self.process.readLine(), 
+                        Preferences.getSystem("IOEncoding"), 
+                        'replace')
                 if self.rx_status.exactMatch(s):
                     flags = self.rx_status.cap(1)
                     rev = self.rx_status.cap(2)
@@ -405,7 +407,9 @@
         """
         if self.process is not None:
             self.errorGroup.show()
-            s = unicode(self.process.readAllStandardError())
+            s = str(self.process.readAllStandardError(), 
+                    Preferences.getSystem("IOEncoding"), 
+                    'replace')
             self.errors.insertPlainText(s)
             self.errors.ensureCursorVisible()
         
--- a/Plugins/VcsPlugins/vcsSubversion/SvnStatusMonitorThread.py	Fri Jan 01 16:11:36 2010 +0000
+++ b/Plugins/VcsPlugins/vcsSubversion/SvnStatusMonitorThread.py	Sat Jan 02 15:11:35 2010 +0000
@@ -71,7 +71,7 @@
             finished = process.waitForFinished(300000)
             if finished and process.exitCode() == 0:
                 output = \
-                    unicode(process.readAllStandardOutput(), self.__ioEncoding, 'replace')
+                    str(process.readAllStandardOutput(), self.__ioEncoding, 'replace')
                 states = {}
                 for line in output.splitlines():
                     if self.rx_status1.exactMatch(line):
@@ -99,7 +99,7 @@
                                 self.statusList.append("%s %s" % (status, name))
                         except KeyError:
                             self.statusList.append("%s %s" % (status, name))
-                for name in self.reportedStates.keys():
+                for name in list(self.reportedStates.keys()):
                     if name not in states:
                         self.statusList.append("  %s" % name)
                 self.reportedStates = states
@@ -108,7 +108,10 @@
             else:
                 process.kill()
                 process.waitForFinished()
-                return False, unicode(process.readAllStandardError())
+                return False, 
+                       str(process.readAllStandardError(), 
+                            Preferences.getSystem("IOEncoding"), 
+                            'replace')
         else:
             process.kill()
             process.waitForFinished()
--- a/Plugins/VcsPlugins/vcsSubversion/SvnSwitchDialog.py	Fri Jan 01 16:11:36 2010 +0000
+++ b/Plugins/VcsPlugins/vcsSubversion/SvnSwitchDialog.py	Sat Jan 02 15:11:35 2010 +0000
@@ -10,7 +10,7 @@
 from PyQt4.QtCore import *
 from PyQt4.QtGui import *
 
-from Ui_SvnSwitchDialog import Ui_SvnSwitchDialog
+from .Ui_SvnSwitchDialog import Ui_SvnSwitchDialog
 
 class SvnSwitchDialog(QDialog, Ui_SvnSwitchDialog):
     """
--- a/Plugins/VcsPlugins/vcsSubversion/SvnTagBranchListDialog.py	Fri Jan 01 16:11:36 2010 +0000
+++ b/Plugins/VcsPlugins/vcsSubversion/SvnTagBranchListDialog.py	Sat Jan 02 15:11:35 2010 +0000
@@ -10,7 +10,9 @@
 from PyQt4.QtCore import *
 from PyQt4.QtGui import *
 
-from Ui_SvnTagBranchListDialog import Ui_SvnTagBranchListDialog
+from .Ui_SvnTagBranchListDialog import Ui_SvnTagBranchListDialog
+
+import Preferences
 
 class SvnTagBranchListDialog(QDialog, Ui_SvnTagBranchListDialog):
     """
@@ -229,7 +231,9 @@
         self.process.setReadChannel(QProcess.StandardOutput)
         
         while self.process.canReadLine():
-            s = unicode(self.process.readLine())
+            s = str(self.process.readLine(), 
+                    Preferences.getSystem("IOEncoding"), 
+                    'replace')
             if self.rx_list.exactMatch(s):
                 rev = "%6s" % self.rx_list.cap(1)
                 author = self.rx_list.cap(2)
@@ -252,7 +256,9 @@
         """
         if self.process is not None:
             self.errorGroup.show()
-            s = unicode(self.process.readAllStandardError())
+            s = str(self.process.readAllStandardError(), 
+                    Preferences.getSystem("IOEncoding"), 
+                    'replace')
             self.errors.insertPlainText(s)
             self.errors.ensureCursorVisible()
         
--- a/Plugins/VcsPlugins/vcsSubversion/SvnTagDialog.py	Fri Jan 01 16:11:36 2010 +0000
+++ b/Plugins/VcsPlugins/vcsSubversion/SvnTagDialog.py	Sat Jan 02 15:11:35 2010 +0000
@@ -10,7 +10,7 @@
 from PyQt4.QtCore import *
 from PyQt4.QtGui import *
 
-from Ui_SvnTagDialog import Ui_SvnTagDialog
+from .Ui_SvnTagDialog import Ui_SvnTagDialog
 
 class SvnTagDialog(QDialog, Ui_SvnTagDialog):
     """
--- a/Plugins/VcsPlugins/vcsSubversion/SvnUrlSelectionDialog.py	Fri Jan 01 16:11:36 2010 +0000
+++ b/Plugins/VcsPlugins/vcsSubversion/SvnUrlSelectionDialog.py	Sat Jan 02 15:11:35 2010 +0000
@@ -12,7 +12,7 @@
 
 from E4Gui.E4Application import e4App
 
-from Ui_SvnUrlSelectionDialog import Ui_SvnUrlSelectionDialog
+from .Ui_SvnUrlSelectionDialog import Ui_SvnUrlSelectionDialog
 
 
 class SvnUrlSelectionDialog(QDialog, Ui_SvnUrlSelectionDialog):
--- a/Plugins/VcsPlugins/vcsSubversion/subversion.py	Fri Jan 01 16:11:36 2010 +0000
+++ b/Plugins/VcsPlugins/vcsSubversion/subversion.py	Sat Jan 02 15:11:35 2010 +0000
@@ -10,7 +10,7 @@
 import os
 import shutil
 import types
-import urllib
+import urllib.request, urllib.parse, urllib.error
 
 from PyQt4.QtCore import *
 from PyQt4.QtGui import *
@@ -19,31 +19,31 @@
 
 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 SvnStatusMonitorThread import SvnStatusMonitorThread
+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 .SvnStatusMonitorThread import SvnStatusMonitorThread
 
-from ProjectBrowserHelper import SvnProjectBrowserHelper
-from ProjectHelper import SvnProjectHelper
+from .ProjectBrowserHelper import SvnProjectBrowserHelper
+from .ProjectHelper import SvnProjectHelper
 
 import Preferences
 import Utilities
@@ -101,7 +101,7 @@
         self.commandHistory = []
         self.wdHistory = []
         
-        if os.environ.has_key("SVN_ASP_DOT_NET_HACK"):
+        if "SVN_ASP_DOT_NET_HACK" in os.environ:
             self.adminDir = '_svn'
         else:
             self.adminDir = '.svn'
@@ -166,7 +166,7 @@
             finished = process.waitForFinished(30000)
             if finished and process.exitCode() == 0:
                 output = \
-                    unicode(process.readAllStandardOutput(), ioEncoding, 'replace')
+                    str(process.readAllStandardOutput(), ioEncoding, 'replace')
                 self.versionStr = output.split()[2]
                 return True, errMsg
             else:
@@ -281,7 +281,7 @@
                 shutil.copytree(projectDir, os.path.join(tmpDir, project, 'trunk'))
             else:
                 shutil.copytree(projectDir, os.path.join(tmpDir, project))
-        except OSError, e:
+        except OSError as e:
             if os.path.isdir(tmpDir):
                 shutil.rmtree(tmpDir, True)            
             return False, False
@@ -473,7 +473,7 @@
             args.append(changelist)
         args.append("-m")
         args.append(msg)
-        if type(name) is types.ListType:
+        if isinstance(name, list):
             dname, fnames = self.splitPathList(name)
             self.addArguments(args, fnames)
         else:
@@ -510,7 +510,7 @@
         if self.versionStr >= '1.5.0':
             args.append('--accept')
             args.append('postpone')
-        if type(name) is types.ListType:
+        if isinstance(name, list):
             dname, fnames = self.splitPathList(name)
             self.addArguments(args, fnames)
         else:
@@ -545,7 +545,7 @@
         if noDialog and '--force' not in args:
             args.append('--force')
         
-        if type(name) is types.ListType:
+        if isinstance(name, list):
             if isDir:
                 dname, fname = os.path.split(name[0])
             else:
@@ -564,7 +564,7 @@
             wdir = dname
         self.addArguments(args, tree)
         
-        if type(name) is types.ListType:
+        if isinstance(name, list):
             tree2 = []
             for n in name:
                 d = os.path.split(n)[0]
@@ -610,7 +610,7 @@
         self.addArguments(args, self.options['add'])
         
         tree = []
-        if type(path) is types.ListType:
+        if isinstance(path, list):
             dname, fnames = self.splitPathList(path)
             for n in path:
                 d = os.path.split(n)[0]
@@ -632,7 +632,7 @@
         if tree:
             self.vcsAdd(tree, True)
         
-        if type(path) is types.ListType:
+        if isinstance(path, list):
             self.addArguments(args, path)
         else:
             args.append(path)
@@ -661,7 +661,7 @@
         if noDialog and '--force' not in args:
             args.append('--force')
         
-        if type(name) is types.ListType:
+        if isinstance(name, list):
             self.addArguments(args, name)
         else:
             args.append(name)
@@ -718,7 +718,7 @@
                 args.append('Moving {0} to {1}'.format(name, target))
                 target = self.__svnURL(target)
             else:
-                target = unicode(target)
+                target = str(target)
             args.append(name)
             args.append(target)
             
@@ -766,7 +766,7 @@
         
         @param name file/directory name to be diffed (string)
         """
-        if type(name) is types.ListType:
+        if isinstance(name, list):
             names = name[:]
         else:
             names = [name]
@@ -840,9 +840,9 @@
             
             reposRoot = rx_base.cap(1)
             if tagOp in [1, 4]:
-                url = '%s/tags/%s' % (reposRoot, urllib.quote(tag))
+                url = '%s/tags/%s' % (reposRoot, urllib.parse.quote(tag))
             elif tagOp in [2, 8]:
-                url = '%s/branches/%s' % (reposRoot, urllib.quote(tag))
+                url = '%s/branches/%s' % (reposRoot, urllib.parse.quote(tag))
         else:
             url = self.__svnURL(tag)
         
@@ -878,7 +878,7 @@
         args = []
         args.append('revert')
         self.addArguments(args, self.options['global'])
-        if type(name) is types.ListType:
+        if isinstance(name, list):
             self.addArguments(args, name)
         else:
             if os.path.isdir(name):
@@ -935,9 +935,9 @@
             reposRoot = rx_base.cap(1)
             tn = tag
             if tagType == 1:
-                url = '%s/tags/%s' % (reposRoot, urllib.quote(tag))
+                url = '%s/tags/%s' % (reposRoot, urllib.parse.quote(tag))
             elif tagType == 2:
-                url = '%s/branches/%s' % (reposRoot, urllib.quote(tag))
+                url = '%s/branches/%s' % (reposRoot, urllib.parse.quote(tag))
             elif tagType == 4:
                 url = '%s/trunk' % (reposRoot)
                 tn = 'HEAD'
@@ -1061,7 +1061,7 @@
             return names
         
         found = False
-        for name in self.statusCache.keys():
+        for name in list(self.statusCache.keys()):
             if os.path.dirname(name) == dname:
                 if shortcut:
                     found = True
@@ -1084,7 +1084,7 @@
                 finished = process.waitForFinished(30000)
                 if finished and process.exitCode() == 0:
                     output = \
-                        unicode(process.readAllStandardOutput(), ioEncoding, 'replace')
+                        str(process.readAllStandardOutput(), ioEncoding, 'replace')
                     for line in output.splitlines():
                         if self.rx_status1.exactMatch(line):
                             flags = str(self.rx_status1.cap(1))
@@ -1211,7 +1211,7 @@
         if procStarted:
             finished = process.waitForFinished(30000)
             if finished and process.exitCode() == 0:
-                output = unicode(process.readAllStandardOutput(), ioEncoding, 'replace')
+                output = str(process.readAllStandardOutput(), ioEncoding, 'replace')
                 entryFound = False
                 commitFound = False
                 for line in output.splitlines():
@@ -1285,7 +1285,7 @@
         if procStarted:
             finished = process.waitForFinished(30000)
             if finished and process.exitCode() == 0:
-                output = unicode(process.readAllStandardOutput(), ioEncoding, 'replace')
+                output = str(process.readAllStandardOutput(), ioEncoding, 'replace')
                 for line in output.splitlines():
                     line = line.strip()
                     if line.startswith('<url>'):
@@ -1308,7 +1308,7 @@
         else:
             args.append('resolved')
         self.addArguments(args, self.options['global'])
-        if type(name) is types.ListType:
+        if isinstance(name, list):
             self.addArguments(args, name)
         else:
             if os.path.isdir(name):
@@ -1396,7 +1396,7 @@
             if fileFlag:
                 args.append('--file')
             args.append(propValue)
-            if type(name) is types.ListType:
+            if isinstance(name, list):
                 dname, fnames = self.splitPathList(name)
                 self.addArguments(args, fnames)
             else:
@@ -1436,7 +1436,7 @@
         if recursive:
             args.append('--recursive')
         args.append(propName)
-        if type(name) is types.ListType:
+        if isinstance(name, list):
             dname, fnames = self.splitPathList(name)
             self.addArguments(args, fnames)
         else:
@@ -1500,7 +1500,7 @@
         
         @param name file/directory name to be diffed (string)
         """
-        if type(name) is types.ListType:
+        if isinstance(name, list):
             names = name[:]
         else:
             names = [name]
@@ -1533,7 +1533,7 @@
         
         @param name file/directory name to be diffed (string)
         """
-        if type(name) is types.ListType:
+        if isinstance(name, list):
             names = name[:]
         else:
             names = [name]
@@ -1598,7 +1598,7 @@
         self.addArguments(args, self.options['global'])
         if stealIt:
             args.append('--force')
-        if type(name) is types.ListType:
+        if isinstance(name, list):
             dname, fnames = self.splitPathList(name)
             self.addArguments(args, fnames)
         else:
@@ -1623,7 +1623,7 @@
         self.addArguments(args, self.options['global'])
         if breakIt:
             args.append('--force')
-        if type(name) is types.ListType:
+        if isinstance(name, list):
             dname, fnames = self.splitPathList(name)
             self.addArguments(args, fnames)
         else:
@@ -1696,7 +1696,7 @@
         self.addArguments(args, self.options['global'])
         args.append('--remove')
         args.append('--recursive')
-        if type(names) is types.ListType:
+        if isinstance(names, list):
             dname, fnames = self.splitPathList(names)
             self.addArguments(args, fnames)
         else:
@@ -1730,7 +1730,7 @@
         self.addArguments(args, self.options['global'])
         args.append('--recursive')
         args.append(clname)
-        if type(names) is types.ListType:
+        if isinstance(names, list):
             dname, fnames = self.splitPathList(names)
             self.addArguments(args, fnames)
         else:
@@ -1759,14 +1759,14 @@
             scheme = url[0]
             host = url[1]
             port, path = url[2].split("/",1)
-            return "%s:%s:%s/%s" % (scheme, host, port, urllib.quote(path))
+            return "%s:%s:%s/%s" % (scheme, host, port, urllib.parse.quote(path))
         else:
             scheme = url[0]
             if scheme == "file":
-                return "%s:%s" % (scheme, urllib.quote(url[1]))
+                return "%s:%s" % (scheme, urllib.parse.quote(url[1]))
             else:
                 host, path = url[1][2:].split("/",1)
-                return "%s://%s/%s" % (scheme, host, urllib.quote(path))
+                return "%s://%s/%s" % (scheme, host, urllib.parse.quote(path))
 
     def svnNormalizeURL(self, url):
         """
--- a/Plugins/ViewManagerPlugins/Tabview/Tabview.py	Fri Jan 01 16:11:36 2010 +0000
+++ b/Plugins/ViewManagerPlugins/Tabview/Tabview.py	Sat Jan 02 15:11:35 2010 +0000
@@ -111,11 +111,11 @@
         @param event reference to the drop event (QDropEvent)
         """
         mimeData = event.mimeData()
-        oldID = mimeData.data("tabbar-id")
-        fromIndex = mimeData.data("source-index")
+        oldID = mimeData.data("tabbar-id").toLong()[0]
+        fromIndex = mimeData.data("source-index").toInt()[0]
         toIndex = self.tabAt(event.pos())
         if oldID != id(self):
-            parentID = mimeData.data("tabwidget-id")
+            parentID = mimeData.data("tabwidget-id").toLong()[0]
             if event.proposedAction() == Qt.MoveAction:
                 self.emit(SIGNAL("tabRelocateRequested(long, int, int)"), 
                           parentID, fromIndex, toIndex)
@@ -513,7 +513,7 @@
         Private method to close the other tabs.
         """
         index = self.contextMenuIndex
-        for i in range(self.count() - 1, index, -1) + range(index - 1, -1, -1):
+        for i in list(range(self.count() - 1, index, -1)) + list(range(index - 1, -1, -1)):
             editor = self.widget(i)
             self.vm.closeEditorWindow(editor)
         
@@ -699,8 +699,8 @@
         
         # 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)):
+        for i in list(range(self.tabWidgets.index(tw), -1, -1)) + \
+                 list(range(self.tabWidgets.index(tw) + 1, len(self.tabWidgets))):
             if self.tabWidgets[i].hasEditors():
                 self.currentTabWidget.showIndicator(False)
                 self.currentTabWidget = self.tabWidgets[i]
--- a/Plugins/WizardPlugins/ColorDialogWizard/ColorDialogWizardDialog.py	Fri Jan 01 16:11:36 2010 +0000
+++ b/Plugins/WizardPlugins/ColorDialogWizard/ColorDialogWizardDialog.py	Sat Jan 02 15:11:35 2010 +0000
@@ -12,7 +12,7 @@
 from PyQt4.QtCore import *
 from PyQt4.QtGui import *
 
-from Ui_ColorDialogWizardDialog import Ui_ColorDialogWizardDialog
+from .Ui_ColorDialogWizardDialog import Ui_ColorDialogWizardDialog
 
 class ColorDialogWizardDialog(QDialog, Ui_ColorDialogWizardDialog):
     """
@@ -63,10 +63,10 @@
                     coStr = "QColor(%s)" % coStr
                 try:
                     if self.rQt45.isChecked():
-                        exec 'QColorDialog.getColor(%s, None, "%s")' % \
-                            (coStr, self.eTitle.text())
+                        exec('QColorDialog.getColor(%s, None, "%s")' % \
+                            (coStr, self.eTitle.text()))
                     else:
-                        exec 'QColorDialog.getColor(%s)' % coStr
+                        exec('QColorDialog.getColor(%s)' % coStr)
                 except:
                     QMessageBox.critical(None,
                         self.trUtf8("QColorDialog Wizard Error"),
--- a/Plugins/WizardPlugins/FileDialogWizard/FileDialogWizardDialog.py	Fri Jan 01 16:11:36 2010 +0000
+++ b/Plugins/WizardPlugins/FileDialogWizard/FileDialogWizardDialog.py	Sat Jan 02 15:11:35 2010 +0000
@@ -16,7 +16,7 @@
 
 from E4Gui.E4Completers import E4FileCompleter, E4DirCompleter
 
-from Ui_FileDialogWizardDialog import Ui_FileDialogWizardDialog
+from .Ui_FileDialogWizardDialog import Ui_FileDialogWizardDialog
 
 class FileDialogWizardDialog(QDialog, Ui_FileDialogWizardDialog):
     """
--- a/Plugins/WizardPlugins/FontDialogWizard/FontDialogWizardDialog.py	Fri Jan 01 16:11:36 2010 +0000
+++ b/Plugins/WizardPlugins/FontDialogWizard/FontDialogWizardDialog.py	Sat Jan 02 15:11:35 2010 +0000
@@ -12,7 +12,7 @@
 from PyQt4.QtCore import *
 from PyQt4.QtGui import *
 
-from Ui_FontDialogWizardDialog import Ui_FontDialogWizardDialog
+from .Ui_FontDialogWizardDialog import Ui_FontDialogWizardDialog
 
 class FontDialogWizardDialog(QDialog, Ui_FontDialogWizardDialog):
     """
--- a/Plugins/WizardPlugins/InputDialogWizard/InputDialogWizardDialog.py	Fri Jan 01 16:11:36 2010 +0000
+++ b/Plugins/WizardPlugins/InputDialogWizard/InputDialogWizardDialog.py	Sat Jan 02 15:11:35 2010 +0000
@@ -14,7 +14,7 @@
 
 from E4Gui.E4Application import e4App
 
-from Ui_InputDialogWizardDialog import Ui_InputDialogWizardDialog
+from .Ui_InputDialogWizardDialog import Ui_InputDialogWizardDialog
 
 class InputDialogWizardDialog(QDialog, Ui_InputDialogWizardDialog):
     """
--- a/Plugins/WizardPlugins/MessageBoxWizard/MessageBoxWizardDialog.py	Fri Jan 01 16:11:36 2010 +0000
+++ b/Plugins/WizardPlugins/MessageBoxWizard/MessageBoxWizardDialog.py	Sat Jan 02 15:11:35 2010 +0000
@@ -14,7 +14,7 @@
 
 from E4Gui.E4Application import e4App
 
-from Ui_MessageBoxWizardDialog import Ui_MessageBoxWizardDialog
+from .Ui_MessageBoxWizardDialog import Ui_MessageBoxWizardDialog
 
 class MessageBoxWizardDialog(QDialog, Ui_MessageBoxWizardDialog):
     """
--- a/Plugins/WizardPlugins/PyRegExpWizard/PyRegExpWizardCharactersDialog.py	Fri Jan 01 16:11:36 2010 +0000
+++ b/Plugins/WizardPlugins/PyRegExpWizard/PyRegExpWizardCharactersDialog.py	Sat Jan 02 15:11:35 2010 +0000
@@ -10,7 +10,7 @@
 from PyQt4.QtCore import *
 from PyQt4.QtGui import *
 
-from Ui_PyRegExpWizardCharactersDialog import Ui_PyRegExpWizardCharactersDialog
+from .Ui_PyRegExpWizardCharactersDialog import Ui_PyRegExpWizardCharactersDialog
 
 
 class PyRegExpWizardCharactersDialog(QDialog, Ui_PyRegExpWizardCharactersDialog):
--- a/Plugins/WizardPlugins/PyRegExpWizard/PyRegExpWizardDialog.py	Fri Jan 01 16:11:36 2010 +0000
+++ b/Plugins/WizardPlugins/PyRegExpWizard/PyRegExpWizardDialog.py	Sat Jan 02 15:11:35 2010 +0000
@@ -14,10 +14,10 @@
 from PyQt4.QtCore import *
 from PyQt4.QtGui import *
 
-from Ui_PyRegExpWizardDialog import Ui_PyRegExpWizardDialog
+from .Ui_PyRegExpWizardDialog import Ui_PyRegExpWizardDialog
 
-from PyRegExpWizardRepeatDialog import PyRegExpWizardRepeatDialog
-from PyRegExpWizardCharactersDialog import PyRegExpWizardCharactersDialog
+from .PyRegExpWizardRepeatDialog import PyRegExpWizardRepeatDialog
+from .PyRegExpWizardCharactersDialog import PyRegExpWizardCharactersDialog
 
 import UI.PixmapCache
 
@@ -322,14 +322,14 @@
                     return
             
             try:
-                f=open(Utilities.toNativeSeparators(fname), "wb")
+                f=open(Utilities.toNativeSeparators(fname), "w")
                 f.write(self.regexpTextEdit.toPlainText())
                 f.close()
-            except IOError, err:
+            except IOError as err:
                 QMessageBox.information(self,
                     self.trUtf8("Save regular expression"),
                     self.trUtf8("""<p>The regular expression could not be saved.</p>"""
-                                """<p>Reason: {0}</p>""").format(unicode(err)))
+                                """<p>Reason: {0}</p>""").format(str(err)))
     
     @pyqtSlot()
     def on_loadButton_clicked(self):
@@ -343,15 +343,15 @@
             self.trUtf8("RegExp Files (*.rx);;All Files (*)"))
         if fname:
             try:
-                f=open(Utilities.toNativeSeparators(fname), "rb")
+                f=open(Utilities.toNativeSeparators(fname), "r")
                 regexp = f.read()
                 f.close()
                 self.regexpTextEdit.setPlainText(regexp)
-            except IOError, err:
+            except IOError as err:
                 QMessageBox.information(self,
                     self.trUtf8("Save regular expression"),
                     self.trUtf8("""<p>The regular expression could not be saved.</p>"""
-                                """<p>Reason: {0}</p>""").format(unicode(err)))
+                                """<p>Reason: {0}</p>""").format(str(err)))
 
     @pyqtSlot()
     def on_copyButton_clicked(self):
@@ -394,11 +394,11 @@
                 QMessageBox.information(None,
                     self.trUtf8(""),
                     self.trUtf8("""The regular expression is valid."""))
-            except re.error, e:
+            except re.error as e:
                 QMessageBox.critical(None,
                     self.trUtf8("Error"),
                     self.trUtf8("""Invalid regular expression: {0}""")
-                        .format(unicode(e)))
+                        .format(str(e)))
                 return
             except IndexError:
                 QMessageBox.critical(None,
@@ -521,11 +521,11 @@
                 self.resultTable.resizeRowsToContents()
                 self.resultTable.verticalHeader().hide()
                 self.resultTable.horizontalHeader().hide()
-            except re.error, e:
+            except re.error as e:
                 QMessageBox.critical(None,
                     self.trUtf8("Error"),
                     self.trUtf8("""Invalid regular expression: {0}""")
-                        .format(unicode(e)))
+                        .format(str(e)))
                 return
             except IndexError:
                 QMessageBox.critical(None,
--- a/Plugins/WizardPlugins/PyRegExpWizard/PyRegExpWizardRepeatDialog.py	Fri Jan 01 16:11:36 2010 +0000
+++ b/Plugins/WizardPlugins/PyRegExpWizard/PyRegExpWizardRepeatDialog.py	Sat Jan 02 15:11:35 2010 +0000
@@ -10,7 +10,7 @@
 from PyQt4.QtCore import *
 from PyQt4.QtGui import *
 
-from Ui_PyRegExpWizardRepeatDialog import Ui_PyRegExpWizardRepeatDialog
+from .Ui_PyRegExpWizardRepeatDialog import Ui_PyRegExpWizardRepeatDialog
 
 
 class PyRegExpWizardRepeatDialog(QDialog, Ui_PyRegExpWizardRepeatDialog):
--- a/Plugins/WizardPlugins/QRegExpWizard/QRegExpWizardCharactersDialog.py	Fri Jan 01 16:11:36 2010 +0000
+++ b/Plugins/WizardPlugins/QRegExpWizard/QRegExpWizardCharactersDialog.py	Sat Jan 02 15:11:35 2010 +0000
@@ -10,7 +10,7 @@
 from PyQt4.QtCore import *
 from PyQt4.QtGui import *
 
-from Ui_QRegExpWizardCharactersDialog import Ui_QRegExpWizardCharactersDialog
+from .Ui_QRegExpWizardCharactersDialog import Ui_QRegExpWizardCharactersDialog
 
 
 class QRegExpWizardCharactersDialog(QDialog, Ui_QRegExpWizardCharactersDialog):
--- a/Plugins/WizardPlugins/QRegExpWizard/QRegExpWizardDialog.py	Fri Jan 01 16:11:36 2010 +0000
+++ b/Plugins/WizardPlugins/QRegExpWizard/QRegExpWizardDialog.py	Sat Jan 02 15:11:35 2010 +0000
@@ -15,10 +15,10 @@
 
 from E4Gui.E4Application import e4App
 
-from Ui_QRegExpWizardDialog import Ui_QRegExpWizardDialog
+from .Ui_QRegExpWizardDialog import Ui_QRegExpWizardDialog
 
-from QRegExpWizardRepeatDialog import QRegExpWizardRepeatDialog
-from QRegExpWizardCharactersDialog import QRegExpWizardCharactersDialog
+from .QRegExpWizardRepeatDialog import QRegExpWizardRepeatDialog
+from .QRegExpWizardCharactersDialog import QRegExpWizardCharactersDialog
 
 import UI.PixmapCache
 
@@ -239,14 +239,14 @@
                     return
             
             try:
-                f=open(Utilities.toNativeSeparators(fname), "wb")
+                f=open(Utilities.toNativeSeparators(fname), "w")
                 f.write(self.regexpLineEdit.text())
                 f.close()
-            except IOError, err:
+            except IOError as err:
                 QMessageBox.information(self,
                     self.trUtf8("Save regular expression"),
                     self.trUtf8("""<p>The regular expression could not be saved.</p>"""
-                                """<p>Reason: {0}</p>""").format(unicode(err)))
+                                """<p>Reason: {0}</p>""").format(str(err)))
     
     @pyqtSlot()
     def on_loadButton_clicked(self):
@@ -260,15 +260,15 @@
             self.trUtf8("RegExp Files (*.rx);;All Files (*)"))
         if fname:
             try:
-                f=open(Utilities.toNativeSeparators(fname), "rb")
+                f=open(Utilities.toNativeSeparators(fname), "r")
                 regexp = f.read()
                 f.close()
                 self.regexpLineEdit.setText(regexp)
-            except IOError, err:
+            except IOError as err:
                 QMessageBox.information(self,
                     self.trUtf8("Save regular expression"),
                     self.trUtf8("""<p>The regular expression could not be saved.</p>"""
-                                """<p>Reason: {0}</p>""").format(unicode(err)))
+                                """<p>Reason: {0}</p>""").format(str(err)))
 
     @pyqtSlot()
     def on_copyButton_clicked(self):
--- a/Plugins/WizardPlugins/QRegExpWizard/QRegExpWizardRepeatDialog.py	Fri Jan 01 16:11:36 2010 +0000
+++ b/Plugins/WizardPlugins/QRegExpWizard/QRegExpWizardRepeatDialog.py	Sat Jan 02 15:11:35 2010 +0000
@@ -10,7 +10,7 @@
 from PyQt4.QtCore import *
 from PyQt4.QtGui import *
 
-from Ui_QRegExpWizardRepeatDialog import Ui_QRegExpWizardRepeatDialog
+from .Ui_QRegExpWizardRepeatDialog import Ui_QRegExpWizardRepeatDialog
 
 
 class QRegExpWizardRepeatDialog(QDialog, Ui_QRegExpWizardRepeatDialog):
--- a/Preferences/ConfigurationDialog.py	Fri Jan 01 16:11:36 2010 +0000
+++ b/Preferences/ConfigurationDialog.py	Sat Jan 02 15:11:35 2010 +0000
@@ -19,7 +19,7 @@
 
 import Preferences
 
-from PreferencesLexer import PreferencesLexer, PreferencesLexerLanguageError
+from .PreferencesLexer import PreferencesLexer, PreferencesLexerLanguageError
 import UI.PixmapCache
 
 from eric4config import getConfig
@@ -437,7 +437,7 @@
         @return reference to the initialized page
         """
         page = None
-        if type(pageData[2] ) is types.FunctionType:
+        if isinstance(pageData[2], types.FunctionType):
             page = pageData[2](self)
         else:
             mod = self.__importConfigurationPage(pageData[2])
@@ -521,7 +521,7 @@
         """
         Public method called to store the selected values into the preferences storage.
         """
-        for key, pageData in self.configItems.items():
+        for key, pageData in list(self.configItems.items()):
             if pageData[-1]:
                 pageData[-1].save()
                 # page was loaded (and possibly modified)
--- a/Preferences/ConfigurationPages/ApplicationPage.py	Fri Jan 01 16:11:36 2010 +0000
+++ b/Preferences/ConfigurationPages/ApplicationPage.py	Sat Jan 02 15:11:35 2010 +0000
@@ -11,8 +11,8 @@
 
 from PyQt4.QtCore import pyqtSlot
 
-from ConfigurationPageBase import ConfigurationPageBase
-from Ui_ApplicationPage import Ui_ApplicationPage
+from .ConfigurationPageBase import ConfigurationPageBase
+from .Ui_ApplicationPage import Ui_ApplicationPage
 
 import Preferences
 
--- a/Preferences/ConfigurationPages/CorbaPage.py	Fri Jan 01 16:11:36 2010 +0000
+++ b/Preferences/ConfigurationPages/CorbaPage.py	Sat Jan 02 15:11:35 2010 +0000
@@ -12,8 +12,8 @@
 
 from E4Gui.E4Completers import E4FileCompleter
 
-from ConfigurationPageBase import ConfigurationPageBase
-from Ui_CorbaPage import Ui_CorbaPage
+from .ConfigurationPageBase import ConfigurationPageBase
+from .Ui_CorbaPage import Ui_CorbaPage
 
 import Preferences
 import Utilities
--- a/Preferences/ConfigurationPages/DebuggerGeneralPage.py	Fri Jan 01 16:11:36 2010 +0000
+++ b/Preferences/ConfigurationPages/DebuggerGeneralPage.py	Sat Jan 02 15:11:35 2010 +0000
@@ -17,8 +17,8 @@
 
 from E4Gui.E4Completers import E4FileCompleter, E4DirCompleter
 
-from ConfigurationPageBase import ConfigurationPageBase
-from Ui_DebuggerGeneralPage import Ui_DebuggerGeneralPage
+from .ConfigurationPageBase import ConfigurationPageBase
+from .Ui_DebuggerGeneralPage import Ui_DebuggerGeneralPage
 
 import Preferences
 import Utilities
--- a/Preferences/ConfigurationPages/DebuggerPython3Page.py	Fri Jan 01 16:11:36 2010 +0000
+++ b/Preferences/ConfigurationPages/DebuggerPython3Page.py	Sat Jan 02 15:11:35 2010 +0000
@@ -12,8 +12,8 @@
 
 from E4Gui.E4Completers import E4FileCompleter
 
-from ConfigurationPageBase import ConfigurationPageBase
-from Ui_DebuggerPython3Page import Ui_DebuggerPython3Page
+from .ConfigurationPageBase import ConfigurationPageBase
+from .Ui_DebuggerPython3Page import Ui_DebuggerPython3Page
 
 import Preferences
 import Utilities
--- a/Preferences/ConfigurationPages/DebuggerPythonPage.py	Fri Jan 01 16:11:36 2010 +0000
+++ b/Preferences/ConfigurationPages/DebuggerPythonPage.py	Sat Jan 02 15:11:35 2010 +0000
@@ -12,8 +12,8 @@
 
 from E4Gui.E4Completers import E4FileCompleter
 
-from ConfigurationPageBase import ConfigurationPageBase
-from Ui_DebuggerPythonPage import Ui_DebuggerPythonPage
+from .ConfigurationPageBase import ConfigurationPageBase
+from .Ui_DebuggerPythonPage import Ui_DebuggerPythonPage
 
 import Preferences
 import Utilities
--- a/Preferences/ConfigurationPages/DebuggerRubyPage.py	Fri Jan 01 16:11:36 2010 +0000
+++ b/Preferences/ConfigurationPages/DebuggerRubyPage.py	Sat Jan 02 15:11:35 2010 +0000
@@ -12,8 +12,8 @@
 
 from E4Gui.E4Completers import E4FileCompleter
 
-from ConfigurationPageBase import ConfigurationPageBase
-from Ui_DebuggerRubyPage import Ui_DebuggerRubyPage
+from .ConfigurationPageBase import ConfigurationPageBase
+from .Ui_DebuggerRubyPage import Ui_DebuggerRubyPage
 
 import Preferences
 import Utilities
--- a/Preferences/ConfigurationPages/EditorAPIsPage.py	Fri Jan 01 16:11:36 2010 +0000
+++ b/Preferences/ConfigurationPages/EditorAPIsPage.py	Sat Jan 02 15:11:35 2010 +0000
@@ -13,8 +13,8 @@
 from E4Gui.E4Application import e4App
 from E4Gui.E4Completers import E4FileCompleter
 
-from ConfigurationPageBase import ConfigurationPageBase
-from Ui_EditorAPIsPage import Ui_EditorAPIsPage
+from .ConfigurationPageBase import ConfigurationPageBase
+from .Ui_EditorAPIsPage import Ui_EditorAPIsPage
 
 from QScintilla.APIsManager import APIsManager
 import QScintilla.Lexers
@@ -47,8 +47,7 @@
             Preferences.getEditor("AutoPrepareAPIs"))
         
         self.apis = {}
-        apiLanguages = [''] + QScintilla.Lexers.getSupportedLanguages().keys()
-        apiLanguages.sort()
+        apiLanguages = sorted([''] + list(QScintilla.Lexers.getSupportedLanguages().keys()))
         for lang in apiLanguages:
             if lang != "Guessed":
                 self.apiLanguageComboBox.addItem(lang)
@@ -68,7 +67,7 @@
         lang = self.apiLanguageComboBox.currentText()
         self.apis[lang] = self.__editorGetApisFromApiList()
         
-        for lang, apis in self.apis.items():
+        for lang, apis in list(self.apis.items()):
             Preferences.setEditorAPI(lang, apis)
         
     @pyqtSlot(str)
--- a/Preferences/ConfigurationPages/EditorAutocompletionPage.py	Fri Jan 01 16:11:36 2010 +0000
+++ b/Preferences/ConfigurationPages/EditorAutocompletionPage.py	Sat Jan 02 15:11:35 2010 +0000
@@ -7,8 +7,8 @@
 Module implementing the Editor Autocompletion configuration page.
 """
 
-from ConfigurationPageBase import ConfigurationPageBase
-from Ui_EditorAutocompletionPage import Ui_EditorAutocompletionPage
+from .ConfigurationPageBase import ConfigurationPageBase
+from .Ui_EditorAutocompletionPage import Ui_EditorAutocompletionPage
 
 import Preferences
 
--- a/Preferences/ConfigurationPages/EditorAutocompletionQScintillaPage.py	Fri Jan 01 16:11:36 2010 +0000
+++ b/Preferences/ConfigurationPages/EditorAutocompletionQScintillaPage.py	Sat Jan 02 15:11:35 2010 +0000
@@ -9,8 +9,8 @@
 
 from PyQt4.Qsci import QsciScintilla
 
-from ConfigurationPageBase import ConfigurationPageBase
-from Ui_EditorAutocompletionQScintillaPage import Ui_EditorAutocompletionQScintillaPage
+from .ConfigurationPageBase import ConfigurationPageBase
+from .Ui_EditorAutocompletionQScintillaPage import Ui_EditorAutocompletionQScintillaPage
 
 import Preferences
 
--- a/Preferences/ConfigurationPages/EditorCalltipsPage.py	Fri Jan 01 16:11:36 2010 +0000
+++ b/Preferences/ConfigurationPages/EditorCalltipsPage.py	Sat Jan 02 15:11:35 2010 +0000
@@ -9,8 +9,8 @@
 
 from PyQt4.QtCore import pyqtSlot
 
-from ConfigurationPageBase import ConfigurationPageBase
-from Ui_EditorCalltipsPage import Ui_EditorCalltipsPage
+from .ConfigurationPageBase import ConfigurationPageBase
+from .Ui_EditorCalltipsPage import Ui_EditorCalltipsPage
 
 import Preferences
 
--- a/Preferences/ConfigurationPages/EditorCalltipsQScintillaPage.py	Fri Jan 01 16:11:36 2010 +0000
+++ b/Preferences/ConfigurationPages/EditorCalltipsQScintillaPage.py	Sat Jan 02 15:11:35 2010 +0000
@@ -9,8 +9,8 @@
 
 from PyQt4.Qsci import QsciScintilla
 
-from ConfigurationPageBase import ConfigurationPageBase
-from Ui_EditorCalltipsQScintillaPage import Ui_EditorCalltipsQScintillaPage
+from .ConfigurationPageBase import ConfigurationPageBase
+from .Ui_EditorCalltipsQScintillaPage import Ui_EditorCalltipsQScintillaPage
 
 import Preferences
 
--- a/Preferences/ConfigurationPages/EditorExportersPage.py	Fri Jan 01 16:11:36 2010 +0000
+++ b/Preferences/ConfigurationPages/EditorExportersPage.py	Sat Jan 02 15:11:35 2010 +0000
@@ -10,8 +10,8 @@
 from PyQt4.QtCore import pyqtSlot
 from PyQt4.QtGui import QFontDialog
 
-from ConfigurationPageBase import ConfigurationPageBase
-from Ui_EditorExportersPage import Ui_EditorExportersPage
+from .ConfigurationPageBase import ConfigurationPageBase
+from .Ui_EditorExportersPage import Ui_EditorExportersPage
 
 import Preferences
 
@@ -34,8 +34,7 @@
         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()
+        exporters = sorted(list(self.pageIds.keys()))
         for exporter in exporters:
             self.exportersCombo.addItem(exporter, self.pageIds[exporter])
         
--- a/Preferences/ConfigurationPages/EditorFilePage.py	Fri Jan 01 16:11:36 2010 +0000
+++ b/Preferences/ConfigurationPages/EditorFilePage.py	Sat Jan 02 15:11:35 2010 +0000
@@ -11,8 +11,8 @@
 
 import QScintilla.Lexers
 
-from ConfigurationPageBase import ConfigurationPageBase
-from Ui_EditorFilePage import Ui_EditorFilePage
+from .ConfigurationPageBase import ConfigurationPageBase
+from .Ui_EditorFilePage import Ui_EditorFilePage
 
 from Utilities import supportedCodecs
 import Preferences
--- a/Preferences/ConfigurationPages/EditorGeneralPage.py	Fri Jan 01 16:11:36 2010 +0000
+++ b/Preferences/ConfigurationPages/EditorGeneralPage.py	Sat Jan 02 15:11:35 2010 +0000
@@ -9,8 +9,8 @@
 
 import QScintilla.Lexers
 
-from ConfigurationPageBase import ConfigurationPageBase
-from Ui_EditorGeneralPage import Ui_EditorGeneralPage
+from .ConfigurationPageBase import ConfigurationPageBase
+from .Ui_EditorGeneralPage import Ui_EditorGeneralPage
 
 import Preferences
 
--- a/Preferences/ConfigurationPages/EditorHighlightersPage.py	Fri Jan 01 16:11:36 2010 +0000
+++ b/Preferences/ConfigurationPages/EditorHighlightersPage.py	Sat Jan 02 15:11:35 2010 +0000
@@ -14,8 +14,8 @@
 from PyQt4.QtCore import Qt, pyqtSlot
 from PyQt4.QtGui import QHeaderView, QTreeWidgetItem
 
-from ConfigurationPageBase import ConfigurationPageBase
-from Ui_EditorHighlightersPage import Ui_EditorHighlightersPage
+from .ConfigurationPageBase import ConfigurationPageBase
+from .Ui_EditorHighlightersPage import Ui_EditorHighlightersPage
 
 import Preferences
 
--- a/Preferences/ConfigurationPages/EditorHighlightingStylesPage.py	Fri Jan 01 16:11:36 2010 +0000
+++ b/Preferences/ConfigurationPages/EditorHighlightingStylesPage.py	Sat Jan 02 15:11:35 2010 +0000
@@ -13,8 +13,8 @@
 from PyQt4.QtGui import QPalette, QFileDialog, QColorDialog, QFontDialog, \
                         QInputDialog, QMessageBox
 
-from ConfigurationPageBase import ConfigurationPageBase
-from Ui_EditorHighlightingStylesPage import Ui_EditorHighlightingStylesPage
+from .ConfigurationPageBase import ConfigurationPageBase
+from .Ui_EditorHighlightingStylesPage import Ui_EditorHighlightingStylesPage
 
 from E4XML.XMLUtilities import make_parser
 from E4XML.XMLErrorHandler import XMLErrorHandler, XMLFatalParseError
@@ -43,8 +43,7 @@
         self.lexers = lexers
         
         # set initial values
-        languages = [''] + self.lexers.keys()
-        languages.sort()
+        languages = sorted([''] + list(self.lexers.keys()))
         self.lexerLanguageComboBox.addItems(languages)
         self.on_lexerLanguageComboBox_activated("")
         
@@ -52,7 +51,7 @@
         """
         Public slot to save the Editor Highlighting Styles configuration.
         """
-        for lexer in self.lexers.values():
+        for lexer in list(self.lexers.values()):
             lexer.writeSettings(Preferences.Prefs.settings, "Scintilla")
         
     @pyqtSlot(str)
@@ -155,7 +154,7 @@
             pl.setColor(QPalette.Base, colour)
             self.sampleText.setPalette(pl)
             self.sampleText.repaint()
-            for style in self.lexer.ind2style.values():
+            for style in list(self.lexer.ind2style.values()):
                 self.lexer.setPaper(colour, style)
         
     @pyqtSlot()
@@ -181,7 +180,7 @@
         font, ok = QFontDialog.getFont(self.lexer.font(self.style))
         if ok:
             self.sampleText.setFont(font)
-            for style in self.lexer.ind2style.values():
+            for style in list(self.lexer.ind2style.values()):
                 self.lexer.setFont(font, style)
         
     def on_eolfillCheckBox_toggled(self, b):
@@ -208,7 +207,7 @@
         if ok:
             enabled = selection == on
             self.eolfillCheckBox.setChecked(enabled)
-            for style in self.lexer.ind2style.values():
+            for style in list(self.lexer.ind2style.values()):
                 self.lexer.setEolFill(enabled, style)
         
     @pyqtSlot()
@@ -229,7 +228,7 @@
         """
         Private method to set all styles to their default values.
         """
-        for style in self.lexer.ind2style.values():
+        for style in list(self.lexer.ind2style.values()):
             self.__setToDefault(style)
         self.on_styleElementList_currentRowChanged(self.styleElementList.currentRow())
         
@@ -270,7 +269,7 @@
         """
         Private slot to export the styles of all lexers.
         """
-        self.__exportStyles(self.lexers.values())
+        self.__exportStyles(list(self.lexers.values()))
         
     def __exportStyles(self, lexers):
         """
@@ -296,15 +295,15 @@
                 fn += ex
         
         try:
-            f = open(fn, "wb")
+            f = open(fn, "w")
             HighlightingStylesWriter(f, lexers).writeXML()
             f.close()
-        except IOError, err:
+        except IOError as err:
             QMessageBox.critical(self,
                 self.trUtf8("Export Highlighting Styles"),
                 self.trUtf8("""<p>The highlighting styles could not be exported"""
                             """ to file <b>{0}</b>.</p><p>Reason: {1}</p>""")\
-                    .format(fn, unicode(err))
+                    .format(fn, str(err))
             )
         
     def __importStyles(self, lexers):
@@ -323,18 +322,18 @@
             return
         
         try:
-            f = open(fn, "rb")
+            f = open(fn, "r")
             try:
                 line = f.readline()
                 dtdLine = f.readline()
             finally:
                 f.close()
-        except IOError, err:
+        except IOError as err:
             QMessageBox.critical(self,
                 self.trUtf8("Import Highlighting Styles"),
                 self.trUtf8("""<p>The highlighting styles could not be read"""
                             """ from file <b>{0}</b>.</p><p>Reason: {1}</p>""")\
-                    .format(fn, unicode(err))
+                    .format(fn, str(err))
             )
             return
         
@@ -349,7 +348,7 @@
         parser.setErrorHandler(eh)
         
         try:
-            f = open(fn, "rb")
+            f = open(fn, "r")
             try:
                 try:
                     parser.parse(f)
@@ -359,12 +358,12 @@
                     parser.parse(buf)
             finally:
                 f.close()
-        except IOError, err:
+        except IOError as err:
             QMessageBox.critical(self,
                 self.trUtf8("Import Highlighting Styles"),
                 self.trUtf8("""<p>The highlighting styles could not be read"""
                             """ from file <b>{0}</b>.</p><p>Reason: {1}</p>""")\
-                    .format(fn, unicode(err))
+                    .format(fn, str(err))
             )
             return
         except XMLFatalParseError:
--- a/Preferences/ConfigurationPages/EditorPropertiesPage.py	Fri Jan 01 16:11:36 2010 +0000
+++ b/Preferences/ConfigurationPages/EditorPropertiesPage.py	Sat Jan 02 15:11:35 2010 +0000
@@ -11,8 +11,8 @@
 
 from QScintilla.QsciScintillaCompat import QSCINTILLA_VERSION
 
-from ConfigurationPageBase import ConfigurationPageBase
-from Ui_EditorPropertiesPage import Ui_EditorPropertiesPage
+from .ConfigurationPageBase import ConfigurationPageBase
+from .Ui_EditorPropertiesPage import Ui_EditorPropertiesPage
 
 import Preferences
 
@@ -30,7 +30,7 @@
         self.setupUi(self)
         self.setObjectName("EditorPropertiesPage")
         
-        self.languages = sorted(lexers.keys()[:])
+        self.languages = sorted(list(lexers.keys())[:])
         
         # set initial values
         # All
--- a/Preferences/ConfigurationPages/EditorSearchPage.py	Fri Jan 01 16:11:36 2010 +0000
+++ b/Preferences/ConfigurationPages/EditorSearchPage.py	Sat Jan 02 15:11:35 2010 +0000
@@ -10,8 +10,8 @@
 from PyQt4.QtCore import pyqtSlot
 from PyQt4.QtGui import QPixmap, QIcon
 
-from ConfigurationPageBase import ConfigurationPageBase
-from Ui_EditorSearchPage import Ui_EditorSearchPage
+from .ConfigurationPageBase import ConfigurationPageBase
+from .Ui_EditorSearchPage import Ui_EditorSearchPage
 
 import Preferences
 
@@ -58,7 +58,7 @@
         Preferences.setEditor("MarkOccurrencesTimeout", 
             self.markOccurrencesTimeoutSpinBox.value())
         
-        for key in self.editorColours.keys():
+        for key in list(self.editorColours.keys()):
             Preferences.setEditorColour(key, self.editorColours[key])
         
     @pyqtSlot()
--- a/Preferences/ConfigurationPages/EditorSpellCheckingPage.py	Fri Jan 01 16:11:36 2010 +0000
+++ b/Preferences/ConfigurationPages/EditorSpellCheckingPage.py	Sat Jan 02 15:11:35 2010 +0000
@@ -12,8 +12,8 @@
 
 from E4Gui.E4Completers import E4FileCompleter
 
-from ConfigurationPageBase import ConfigurationPageBase
-from Ui_EditorSpellCheckingPage import Ui_EditorSpellCheckingPage
+from .ConfigurationPageBase import ConfigurationPageBase
+from .Ui_EditorSpellCheckingPage import Ui_EditorSpellCheckingPage
 
 import Preferences
 import Utilities
@@ -86,7 +86,7 @@
         Preferences.setEditor("SpellCheckingMinWordSize", 
             self.minimumWordSizeSlider.value())
         
-        for key in self.editorColours.keys():
+        for key in list(self.editorColours.keys()):
             Preferences.setEditorColour(key, self.editorColours[key])
         
         Preferences.setEditor("SpellCheckingPersonalWordList", self.pwlEdit.text())
--- a/Preferences/ConfigurationPages/EditorStylesPage.py	Fri Jan 01 16:11:36 2010 +0000
+++ b/Preferences/ConfigurationPages/EditorStylesPage.py	Sat Jan 02 15:11:35 2010 +0000
@@ -13,8 +13,8 @@
 
 from QScintilla.QsciScintillaCompat import QSCINTILLA_VERSION
 
-from ConfigurationPageBase import ConfigurationPageBase
-from Ui_EditorStylesPage import Ui_EditorStylesPage
+from .ConfigurationPageBase import ConfigurationPageBase
+from .Ui_EditorStylesPage import Ui_EditorStylesPage
 
 import Preferences
 
@@ -190,7 +190,7 @@
         Preferences.setEditor("MiniContextMenu",
             self.miniMenuCheckBox.isChecked())
         
-        for key in self.editorColours.keys():
+        for key in list(self.editorColours.keys()):
             Preferences.setEditorColour(key, self.editorColours[key])
         
     @pyqtSlot()
--- a/Preferences/ConfigurationPages/EditorTypingPage.py	Fri Jan 01 16:11:36 2010 +0000
+++ b/Preferences/ConfigurationPages/EditorTypingPage.py	Sat Jan 02 15:11:35 2010 +0000
@@ -9,8 +9,8 @@
 
 from PyQt4.QtCore import pyqtSlot
 
-from ConfigurationPageBase import ConfigurationPageBase
-from Ui_EditorTypingPage import Ui_EditorTypingPage
+from .ConfigurationPageBase import ConfigurationPageBase
+from .Ui_EditorTypingPage import Ui_EditorTypingPage
 
 import Preferences
 
@@ -31,8 +31,7 @@
         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()
+        languages = sorted(list(self.pageIds.keys()))
         for language in languages:
             self.languageCombo.addItem(language, self.pageIds[language])
         
--- a/Preferences/ConfigurationPages/EmailPage.py	Fri Jan 01 16:11:36 2010 +0000
+++ b/Preferences/ConfigurationPages/EmailPage.py	Sat Jan 02 15:11:35 2010 +0000
@@ -9,8 +9,8 @@
 
 from PyQt4.QtGui import QIntValidator
 
-from ConfigurationPageBase import ConfigurationPageBase
-from Ui_EmailPage import Ui_EmailPage
+from .ConfigurationPageBase import ConfigurationPageBase
+from .Ui_EmailPage import Ui_EmailPage
 
 import Preferences
 
--- a/Preferences/ConfigurationPages/GraphicsPage.py	Fri Jan 01 16:11:36 2010 +0000
+++ b/Preferences/ConfigurationPages/GraphicsPage.py	Sat Jan 02 15:11:35 2010 +0000
@@ -9,8 +9,8 @@
 
 from PyQt4.QtCore import pyqtSlot
 
-from ConfigurationPageBase import ConfigurationPageBase
-from Ui_GraphicsPage import Ui_GraphicsPage
+from .ConfigurationPageBase import ConfigurationPageBase
+from .Ui_GraphicsPage import Ui_GraphicsPage
 
 import Preferences
 
--- a/Preferences/ConfigurationPages/HelpAppearancePage.py	Fri Jan 01 16:11:36 2010 +0000
+++ b/Preferences/ConfigurationPages/HelpAppearancePage.py	Sat Jan 02 15:11:35 2010 +0000
@@ -12,8 +12,8 @@
 
 from E4Gui.E4Completers import E4FileCompleter
 
-from ConfigurationPageBase import ConfigurationPageBase
-from Ui_HelpAppearancePage import Ui_HelpAppearancePage
+from .ConfigurationPageBase import ConfigurationPageBase
+from .Ui_HelpAppearancePage import Ui_HelpAppearancePage
 
 import Preferences
 import Utilities
@@ -67,7 +67,7 @@
         
         Preferences.setHelp("UserStyleSheet", self.styleSheetEdit.text())
         
-        for key in self.helpColours.keys():
+        for key in list(self.helpColours.keys()):
             Preferences.setHelp(key, self.helpColours[key])
     
     @pyqtSlot()
--- a/Preferences/ConfigurationPages/HelpDocumentationPage.py	Fri Jan 01 16:11:36 2010 +0000
+++ b/Preferences/ConfigurationPages/HelpDocumentationPage.py	Sat Jan 02 15:11:35 2010 +0000
@@ -12,8 +12,8 @@
 
 from E4Gui.E4Completers import E4DirCompleter
 
-from ConfigurationPageBase import ConfigurationPageBase
-from Ui_HelpDocumentationPage import Ui_HelpDocumentationPage
+from .ConfigurationPageBase import ConfigurationPageBase
+from .Ui_HelpDocumentationPage import Ui_HelpDocumentationPage
 
 import Preferences
 import Utilities
--- a/Preferences/ConfigurationPages/HelpViewersPage.py	Fri Jan 01 16:11:36 2010 +0000
+++ b/Preferences/ConfigurationPages/HelpViewersPage.py	Sat Jan 02 15:11:35 2010 +0000
@@ -12,8 +12,8 @@
 
 from E4Gui.E4Completers import E4FileCompleter
 
-from ConfigurationPageBase import ConfigurationPageBase
-from Ui_HelpViewersPage import Ui_HelpViewersPage
+from .ConfigurationPageBase import ConfigurationPageBase
+from .Ui_HelpViewersPage import Ui_HelpViewersPage
 
 import Preferences
 import Utilities
--- a/Preferences/ConfigurationPages/HelpWebBrowserPage.py	Fri Jan 01 16:11:36 2010 +0000
+++ b/Preferences/ConfigurationPages/HelpWebBrowserPage.py	Sat Jan 02 15:11:35 2010 +0000
@@ -9,8 +9,8 @@
 
 from PyQt4.QtCore import qVersion, pyqtSlot
 
-from ConfigurationPageBase import ConfigurationPageBase
-from Ui_HelpWebBrowserPage import Ui_HelpWebBrowserPage
+from .ConfigurationPageBase import ConfigurationPageBase
+from .Ui_HelpWebBrowserPage import Ui_HelpWebBrowserPage
 
 import Helpviewer.HelpWindow
 
@@ -167,7 +167,7 @@
         Private slot to set the current page as the home page.
         """
         url = self.__helpWindow.currentBrowser().url()
-        self.homePageEdit.setText(unicode(url.toEncoded()))
+        self.homePageEdit.setText(bytes(url.toEncoded()).decode())
     
     @pyqtSlot()
     def on_defaultHomeButton_clicked(self):
--- a/Preferences/ConfigurationPages/IconsPage.py	Fri Jan 01 16:11:36 2010 +0000
+++ b/Preferences/ConfigurationPages/IconsPage.py	Sat Jan 02 15:11:35 2010 +0000
@@ -12,9 +12,9 @@
 
 from E4Gui.E4Completers import E4DirCompleter
 
-from ConfigurationPageBase import ConfigurationPageBase
-from IconsPreviewDialog import IconsPreviewDialog
-from Ui_IconsPage import Ui_IconsPage
+from .ConfigurationPageBase import ConfigurationPageBase
+from .IconsPreviewDialog import IconsPreviewDialog
+from .Ui_IconsPage import Ui_IconsPage
 
 import Preferences
 import Utilities
--- a/Preferences/ConfigurationPages/IconsPreviewDialog.py	Fri Jan 01 16:11:36 2010 +0000
+++ b/Preferences/ConfigurationPages/IconsPreviewDialog.py	Sat Jan 02 15:11:35 2010 +0000
@@ -12,7 +12,7 @@
 from PyQt4.QtGui import QListWidgetItem, QDialog, QIcon
 from PyQt4.QtCore import QDir
 
-from Ui_IconsPreviewDialog import Ui_IconsPreviewDialog
+from .Ui_IconsPreviewDialog import Ui_IconsPreviewDialog
 
 
 class IconsPreviewDialog(QDialog, Ui_IconsPreviewDialog):
--- a/Preferences/ConfigurationPages/InterfacePage.py	Fri Jan 01 16:11:36 2010 +0000
+++ b/Preferences/ConfigurationPages/InterfacePage.py	Sat Jan 02 15:11:35 2010 +0000
@@ -15,8 +15,8 @@
 
 from E4Gui.E4Completers import E4FileCompleter
 
-from ConfigurationPageBase import ConfigurationPageBase
-from Ui_InterfacePage import Ui_InterfacePage
+from .ConfigurationPageBase import ConfigurationPageBase
+from .Ui_InterfacePage import Ui_InterfacePage
 
 import Preferences
 import Utilities
@@ -182,7 +182,7 @@
         Preferences.setUI("SingleCloseButton", 
             self.tabsCloseButtonCheckBox.isChecked())
         
-        for key in self.uiColours.keys():
+        for key in list(self.uiColours.keys()):
             Preferences.setUI(key, self.uiColours[key])
         
     def __populateStyleCombo(self):
@@ -190,8 +190,7 @@
         Private method to populate the style combo box.
         """
         curStyle = Preferences.getUI("Style")
-        styles = QStyleFactory.keys()
-        styles.sort()
+        styles = sorted(list(QStyleFactory.keys()))
         self.styleComboBox.addItem(self.trUtf8('System'), "System")
         for style in styles:
             self.styleComboBox.addItem(style, style)
@@ -213,16 +212,14 @@
         locales = {}
         for fn in fnlist:
             locale = os.path.basename(fn)[6:-3]
-            if not locales.has_key(locale):
+            if locale not in locales:
                 translator = QTranslator()
                 translator.load(fn)
                 locales[locale] = \
                     translator.translate("InterfacePage", "English", 
                                          "Translate this with your language") + \
                     " ({0})".format(locale)
-        localeList = locales.keys()
-        localeList.sort()
-        
+        localeList = sorted(list(locales.keys()))
         try:
             uiLanguage = Preferences.getUILanguage()
             if uiLanguage == "None" or uiLanguage is None:
--- a/Preferences/ConfigurationPages/MultiProjectPage.py	Fri Jan 01 16:11:36 2010 +0000
+++ b/Preferences/ConfigurationPages/MultiProjectPage.py	Sat Jan 02 15:11:35 2010 +0000
@@ -7,8 +7,8 @@
 Module implementing the Multi Project configuration page.
 """
 
-from ConfigurationPageBase import ConfigurationPageBase
-from Ui_MultiProjectPage import Ui_MultiProjectPage
+from .ConfigurationPageBase import ConfigurationPageBase
+from .Ui_MultiProjectPage import Ui_MultiProjectPage
 
 import Preferences
 
--- a/Preferences/ConfigurationPages/NetworkPage.py	Fri Jan 01 16:11:36 2010 +0000
+++ b/Preferences/ConfigurationPages/NetworkPage.py	Sat Jan 02 15:11:35 2010 +0000
@@ -14,8 +14,8 @@
 
 from E4Gui.E4Completers import E4DirCompleter
 
-from ConfigurationPageBase import ConfigurationPageBase
-from Ui_NetworkPage import Ui_NetworkPage
+from .ConfigurationPageBase import ConfigurationPageBase
+from .Ui_NetworkPage import Ui_NetworkPage
 
 import Preferences
 import Utilities
--- a/Preferences/ConfigurationPages/PluginManagerPage.py	Fri Jan 01 16:11:36 2010 +0000
+++ b/Preferences/ConfigurationPages/PluginManagerPage.py	Sat Jan 02 15:11:35 2010 +0000
@@ -14,8 +14,8 @@
 
 from E4Gui.E4Completers import E4DirCompleter
 
-from ConfigurationPageBase import ConfigurationPageBase
-from Ui_PluginManagerPage import Ui_PluginManagerPage
+from .ConfigurationPageBase import ConfigurationPageBase
+from .Ui_PluginManagerPage import Ui_PluginManagerPage
 
 import Preferences
 import Utilities
--- a/Preferences/ConfigurationPages/PrinterPage.py	Fri Jan 01 16:11:36 2010 +0000
+++ b/Preferences/ConfigurationPages/PrinterPage.py	Sat Jan 02 15:11:35 2010 +0000
@@ -9,8 +9,8 @@
 
 from PyQt4.QtCore import pyqtSlot
 
-from ConfigurationPageBase import ConfigurationPageBase
-from Ui_PrinterPage import Ui_PrinterPage
+from .ConfigurationPageBase import ConfigurationPageBase
+from .Ui_PrinterPage import Ui_PrinterPage
 
 import Preferences
 
--- a/Preferences/ConfigurationPages/ProjectBrowserPage.py	Fri Jan 01 16:11:36 2010 +0000
+++ b/Preferences/ConfigurationPages/ProjectBrowserPage.py	Sat Jan 02 15:11:35 2010 +0000
@@ -11,8 +11,8 @@
 
 from E4Gui.E4Application import e4App
 
-from ConfigurationPageBase import ConfigurationPageBase
-from Ui_ProjectBrowserPage import Ui_ProjectBrowserPage
+from .ConfigurationPageBase import ConfigurationPageBase
+from .Ui_ProjectBrowserPage import Ui_ProjectBrowserPage
 
 from Project.ProjectBrowserFlags import SourcesBrowserFlag, FormsBrowserFlag, \
     ResourcesBrowserFlag, TranslationsBrowserFlag, InterfacesBrowserFlag, \
@@ -61,7 +61,7 @@
         """
         Public slot to save the Project Browser configuration.
         """
-        for key in self.projectBrowserColours.keys():
+        for key in list(self.projectBrowserColours.keys()):
             Preferences.setProjectBrowserColour(key, self.projectBrowserColours[key])
         
         Preferences.setProject("FollowEditor", 
@@ -72,7 +72,7 @@
         if self.pbGroup.isEnabled():
             self.__storeProjectBrowserFlags(\
                 self.projectTypeCombo.itemData(self.__currentProjectTypeIndex))
-            for projectType, flags in self.__projectBrowserFlags.items():
+            for projectType, flags in list(self.__projectBrowserFlags.items()):
                 if projectType != '':
                     Preferences.setProjectBrowserFlags(projectType, flags)
         
--- a/Preferences/ConfigurationPages/ProjectPage.py	Fri Jan 01 16:11:36 2010 +0000
+++ b/Preferences/ConfigurationPages/ProjectPage.py	Sat Jan 02 15:11:35 2010 +0000
@@ -7,8 +7,8 @@
 Module implementing the Project configuration page.
 """
 
-from ConfigurationPageBase import ConfigurationPageBase
-from Ui_ProjectPage import Ui_ProjectPage
+from .ConfigurationPageBase import ConfigurationPageBase
+from .Ui_ProjectPage import Ui_ProjectPage
 
 import Preferences
 
--- a/Preferences/ConfigurationPages/PythonPage.py	Fri Jan 01 16:11:36 2010 +0000
+++ b/Preferences/ConfigurationPages/PythonPage.py	Sat Jan 02 15:11:35 2010 +0000
@@ -7,8 +7,8 @@
 Module implementing the Python configuration page.
 """
 
-from ConfigurationPageBase import ConfigurationPageBase
-from Ui_PythonPage import Ui_PythonPage
+from .ConfigurationPageBase import ConfigurationPageBase
+from .Ui_PythonPage import Ui_PythonPage
 
 import Preferences
 from Utilities import supportedCodecs
--- a/Preferences/ConfigurationPages/QtPage.py	Fri Jan 01 16:11:36 2010 +0000
+++ b/Preferences/ConfigurationPages/QtPage.py	Sat Jan 02 15:11:35 2010 +0000
@@ -14,8 +14,8 @@