Added stage 1 of the cooperation functions (chat system).

Sun, 21 Mar 2010 19:34:15 +0000

author
Detlev Offenbach <detlev@die-offenbachs.de>
date
Sun, 21 Mar 2010 19:34:15 +0000
changeset 149
a134031209be
parent 148
727a907b8305
child 150
6ca76837a2d4

Added stage 1 of the cooperation functions (chat system).

APIs/Python3/eric5.api file | annotate | diff | comparison | revisions
Cooperation/ChatWidget.py file | annotate | diff | comparison | revisions
Cooperation/ChatWidget.ui file | annotate | diff | comparison | revisions
Cooperation/Connection.py file | annotate | diff | comparison | revisions
Cooperation/CooperationClient.py file | annotate | diff | comparison | revisions
Cooperation/CooperationServer.py file | annotate | diff | comparison | revisions
Cooperation/__init__.py file | annotate | diff | comparison | revisions
Documentation/Help/source.qch file | annotate | diff | comparison | revisions
Documentation/Help/source.qhp file | annotate | diff | comparison | revisions
Documentation/Source/eric5.Cooperation.ChatWidget.html file | annotate | diff | comparison | revisions
Documentation/Source/eric5.Cooperation.Connection.html file | annotate | diff | comparison | revisions
Documentation/Source/eric5.Cooperation.CooperationClient.html file | annotate | diff | comparison | revisions
Documentation/Source/eric5.Cooperation.CooperationServer.html file | annotate | diff | comparison | revisions
Documentation/Source/eric5.Preferences.ConfigurationPages.CooperationPage.html file | annotate | diff | comparison | revisions
Documentation/Source/eric5.Preferences.__init__.html file | annotate | diff | comparison | revisions
Documentation/Source/eric5.UI.UserInterface.html file | annotate | diff | comparison | revisions
Documentation/Source/index-eric5.Cooperation.html file | annotate | diff | comparison | revisions
Documentation/Source/index-eric5.Preferences.ConfigurationPages.html file | annotate | diff | comparison | revisions
Documentation/Source/index-eric5.html file | annotate | diff | comparison | revisions
Preferences/ConfigurationDialog.py file | annotate | diff | comparison | revisions
Preferences/ConfigurationPages/CooperationPage.py file | annotate | diff | comparison | revisions
Preferences/ConfigurationPages/CooperationPage.ui file | annotate | diff | comparison | revisions
Preferences/ViewProfileDialog.py file | annotate | diff | comparison | revisions
Preferences/ViewProfileDialog.ui file | annotate | diff | comparison | revisions
Preferences/ViewProfileSidebarsDialog.ui file | annotate | diff | comparison | revisions
Preferences/ViewProfileToolboxesDialog.ui file | annotate | diff | comparison | revisions
Preferences/__init__.py file | annotate | diff | comparison | revisions
UI/UserInterface.py file | annotate | diff | comparison | revisions
changelog file | annotate | diff | comparison | revisions
eric5.e4p file | annotate | diff | comparison | revisions
i18n/eric5_cs.ts file | annotate | diff | comparison | revisions
i18n/eric5_de.qm file | annotate | diff | comparison | revisions
i18n/eric5_de.ts file | annotate | diff | comparison | revisions
i18n/eric5_es.ts file | annotate | diff | comparison | revisions
i18n/eric5_fr.ts file | annotate | diff | comparison | revisions
i18n/eric5_it.ts file | annotate | diff | comparison | revisions
i18n/eric5_ru.ts file | annotate | diff | comparison | revisions
i18n/eric5_tr.ts file | annotate | diff | comparison | revisions
i18n/eric5_zh_CN.GB2312.ts file | annotate | diff | comparison | revisions
icons/default/chatUser.png file | annotate | diff | comparison | revisions
icons/default/chatUser1.png file | annotate | diff | comparison | revisions
icons/default/chatUser2.png file | annotate | diff | comparison | revisions
icons/default/chatUser3.png file | annotate | diff | comparison | revisions
icons/default/chatUser4.png file | annotate | diff | comparison | revisions
icons/default/chatUser5.png file | annotate | diff | comparison | revisions
icons/default/chatUser6.png file | annotate | diff | comparison | revisions
icons/default/preferences-cooperation.png file | annotate | diff | comparison | revisions
--- a/APIs/Python3/eric5.api	Sat Mar 20 13:14:56 2010 +0000
+++ b/APIs/Python3/eric5.api	Sun Mar 21 19:34:15 2010 +0000
@@ -1,3 +1,59 @@
+eric5.Cooperation.ChatWidget.ChatWidget.appendMessage?4(from_, message)
+eric5.Cooperation.ChatWidget.ChatWidget.on_connectButton_clicked?4()
+eric5.Cooperation.ChatWidget.ChatWidget.on_hostEdit_textChanged?4(host)
+eric5.Cooperation.ChatWidget.ChatWidget.on_serverButton_clicked?4()
+eric5.Cooperation.ChatWidget.ChatWidget.preferencesChanged?4()
+eric5.Cooperation.ChatWidget.ChatWidget?1(port = -1, parent = None)
+eric5.Cooperation.Connection.Connection.GetParticipants?7
+eric5.Cooperation.Connection.Connection.Greeting?7
+eric5.Cooperation.Connection.Connection.Participants?7
+eric5.Cooperation.Connection.Connection.Ping?7
+eric5.Cooperation.Connection.Connection.PlainText?7
+eric5.Cooperation.Connection.Connection.Pong?7
+eric5.Cooperation.Connection.Connection.ProtocolGetParticipants?7
+eric5.Cooperation.Connection.Connection.ProtocolGreeting?7
+eric5.Cooperation.Connection.Connection.ProtocolMessage?7
+eric5.Cooperation.Connection.Connection.ProtocolParticipants?7
+eric5.Cooperation.Connection.Connection.ProtocolPing?7
+eric5.Cooperation.Connection.Connection.ProtocolPong?7
+eric5.Cooperation.Connection.Connection.ReadingGreeting?7
+eric5.Cooperation.Connection.Connection.ReadyForUse?7
+eric5.Cooperation.Connection.Connection.Undefined?7
+eric5.Cooperation.Connection.Connection.WaitingForGreeting?7
+eric5.Cooperation.Connection.Connection.getParticipants?7
+eric5.Cooperation.Connection.Connection.name?4()
+eric5.Cooperation.Connection.Connection.newMessage?7
+eric5.Cooperation.Connection.Connection.participants?7
+eric5.Cooperation.Connection.Connection.readyForUse?7
+eric5.Cooperation.Connection.Connection.sendGetParticipants?4()
+eric5.Cooperation.Connection.Connection.sendMessage?4(message)
+eric5.Cooperation.Connection.Connection.sendParticipants?4(participants)
+eric5.Cooperation.Connection.Connection.serverPort?4()
+eric5.Cooperation.Connection.Connection.setGreetingMessage?4(message, serverPort)
+eric5.Cooperation.Connection.Connection.timerEvent?4(evt)
+eric5.Cooperation.Connection.Connection?1(parent = None)
+eric5.Cooperation.Connection.MaxBufferSize?7
+eric5.Cooperation.Connection.PingInterval?7
+eric5.Cooperation.Connection.PongTimeout?7
+eric5.Cooperation.Connection.SeparatorToken?7
+eric5.Cooperation.Connection.TransferTimeout?7
+eric5.Cooperation.CooperationClient.CooperationClient.cannotConnect?7
+eric5.Cooperation.CooperationClient.CooperationClient.connectToHost?4(host, port)
+eric5.Cooperation.CooperationClient.CooperationClient.connectionError?7
+eric5.Cooperation.CooperationClient.CooperationClient.disconnectConnections?4()
+eric5.Cooperation.CooperationClient.CooperationClient.hasConnection?4(senderIp, senderPort = -1)
+eric5.Cooperation.CooperationClient.CooperationClient.hasConnections?4()
+eric5.Cooperation.CooperationClient.CooperationClient.newMessage?7
+eric5.Cooperation.CooperationClient.CooperationClient.newParticipant?7
+eric5.Cooperation.CooperationClient.CooperationClient.nickName?4()
+eric5.Cooperation.CooperationClient.CooperationClient.participantLeft?7
+eric5.Cooperation.CooperationClient.CooperationClient.sendMessage?4(message)
+eric5.Cooperation.CooperationClient.CooperationClient.server?4()
+eric5.Cooperation.CooperationClient.CooperationClient?1()
+eric5.Cooperation.CooperationServer.CooperationServer.incomingConnection?4(socketDescriptor)
+eric5.Cooperation.CooperationServer.CooperationServer.newConnection?7
+eric5.Cooperation.CooperationServer.CooperationServer.startListening?4(port = -1)
+eric5.Cooperation.CooperationServer.CooperationServer?1(parent = None)
 eric5.DataViews.CodeMetrics.COMMENT?7
 eric5.DataViews.CodeMetrics.DEDENT?7
 eric5.DataViews.CodeMetrics.EMPTY?7
@@ -3305,6 +3361,9 @@
 eric5.Preferences.ConfigurationPages.ConfigurationPageBase.ConfigurationPageBase.selectFont?4(fontSample, fontVar, showFontInfo = False)
 eric5.Preferences.ConfigurationPages.ConfigurationPageBase.ConfigurationPageBase.setState?4(state)
 eric5.Preferences.ConfigurationPages.ConfigurationPageBase.ConfigurationPageBase?1()
+eric5.Preferences.ConfigurationPages.CooperationPage.CooperationPage.save?4()
+eric5.Preferences.ConfigurationPages.CooperationPage.CooperationPage?1()
+eric5.Preferences.ConfigurationPages.CooperationPage.create?4(dlg)
 eric5.Preferences.ConfigurationPages.CorbaPage.CorbaPage.on_idlButton_clicked?4()
 eric5.Preferences.ConfigurationPages.CorbaPage.CorbaPage.save?4()
 eric5.Preferences.ConfigurationPages.CorbaPage.CorbaPage?1()
@@ -3578,6 +3637,7 @@
 eric5.Preferences.PreferencesLexer.PreferencesLexer?1(language, parent=None)
 eric5.Preferences.PreferencesLexer.PreferencesLexerError?1()
 eric5.Preferences.PreferencesLexer.PreferencesLexerLanguageError?1(language)
+eric5.Preferences.Prefs.cooperationDefaults?7
 eric5.Preferences.Prefs.corbaDefaults?7
 eric5.Preferences.Prefs.debuggerDefaults?7
 eric5.Preferences.Prefs.editorColourDefaults?7
@@ -3668,6 +3728,7 @@
 eric5.Preferences.ViewProfileDialog.ViewProfileDialog.getProfiles?4()
 eric5.Preferences.ViewProfileDialog.ViewProfileDialog?1(layout, profiles, separateShell, separateBrowser, parent = None)
 eric5.Preferences.exportPreferences?4(prefClass = Prefs)
+eric5.Preferences.getCooperation?4(key, prefClass = Prefs)
 eric5.Preferences.getCorba?4(key, prefClass = Prefs)
 eric5.Preferences.getDebugger?4(key, prefClass = Prefs)
 eric5.Preferences.getEditor?4(key, prefClass = Prefs)
@@ -3716,6 +3777,7 @@
 eric5.Preferences.resetLayout?4(prefClass = Prefs)
 eric5.Preferences.saveResetLayout?4(prefClass = Prefs)
 eric5.Preferences.saveToolGroups?4(toolGroups, currentGroup, prefClass = Prefs)
+eric5.Preferences.setCooperation?4(key, value, prefClass = Prefs)
 eric5.Preferences.setCorba?4(key, value, prefClass = Prefs)
 eric5.Preferences.setDebugger?4(key, value, prefClass = Prefs)
 eric5.Preferences.setEditor?4(key, value, prefClass = Prefs)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Cooperation/ChatWidget.py	Sun Mar 21 19:34:15 2010 +0000
@@ -0,0 +1,239 @@
+# -*- coding: utf-8 -*-
+
+# Copyright (c) 2010 Detlev Offenbach <detlev@die-offenbachs.de>
+#
+
+"""
+Module implementing the chat dialog.
+"""
+
+from PyQt4.QtCore import Qt, pyqtSlot, QDateTime
+from PyQt4.QtGui import QWidget, QColor, QListWidgetItem
+
+from .CooperationClient import CooperationClient
+
+from .Ui_ChatWidget import Ui_ChatWidget
+
+import Preferences
+import UI.PixmapCache
+
+class ChatWidget(QWidget, Ui_ChatWidget):
+    """
+    Class implementing the chat dialog.
+    """
+    def __init__(self, port = -1, parent = None):
+        """
+        Constructor
+        
+        @param port port to be used for the cooperation server (integer)
+        @param parent reference to the parent widget (QWidget)
+        """
+        QWidget.__init__(self, parent)
+        self.setupUi(self)
+        
+        self.__client = CooperationClient()
+        self.__myNickName = self.__client.nickName()
+        
+        self.messageEdit.returnPressed.connect(self.__handleMessage)
+        self.sendButton.clicked.connect(self.__handleMessage)
+        self.__client.newMessage.connect(self.appendMessage)
+        self.__client.newParticipant.connect(self.__newParticipant)
+        self.__client.participantLeft.connect(self.__participantLeft)
+        self.__client.connectionError.connect(self.__showErrorMessage)
+        self.__client.cannotConnect.connect(self.__initialConnectionRefused)
+        
+        self.serverButton.setText(self.trUtf8("Start Server"))
+        self.serverLed.setColor(QColor(Qt.red))
+        if port == -1:
+            port = Preferences.getCooperation("ServerPort")
+        
+        self.portSpin.setValue(port)
+        self.serverPortSpin.setValue(port)
+        
+        self.__setConnected(False)
+        
+        if Preferences.getCooperation("AutoStartServer"):
+            self.on_serverButton_clicked()
+    
+    def __handleMessage(self):
+        """
+        Private slot handling the Return key pressed in the message edit.
+        """
+        text = self.messageEdit.text()
+        if text == "":
+            return
+        
+        if text.startswith("/"):
+            self.__showErrorMessage(
+                self.trUtf8("! Unknown command: {0}\n").format(text.split()[0]))
+        else:
+            self.__client.sendMessage(text)
+            self.appendMessage(self.__myNickName, text)
+        
+        self.messageEdit.clear()
+    
+    def __newParticipant(self, nick):
+        """
+        Private slot handling a new participant joining.
+        
+        @param nick nick name of the new participant (string)
+        """
+        if nick == "":
+            return
+        
+        color = self.chatEdit.textColor()
+        self.chatEdit.setTextColor(Qt.gray)
+        self.chatEdit.append(
+            QDateTime.currentDateTime().toString(Qt.SystemLocaleLongDate) + ":")
+        self.chatEdit.append(self.trUtf8("* {0} has joined.\n").format(nick))
+        self.chatEdit.setTextColor(color)
+        
+        QListWidgetItem(
+            UI.PixmapCache.getIcon(
+                "chatUser{0}.png".format(1 + self.usersList.count() % 6)), 
+            nick, self.usersList)
+        
+        if not self.__connected:
+            self.__setConnected(True)
+    
+    def __participantLeft(self, nick):
+        """
+        Private slot handling a participant leaving the session.
+        
+        @param nick nick name of the participant (string)
+        """
+        if nick == "":
+            return
+        
+        items = self.usersList.findItems(nick, Qt.MatchExactly)
+        for item in items:
+            self.usersList.takeItem(self.usersList.row(item))
+            del item
+            
+            color = self.chatEdit.textColor()
+            self.chatEdit.setTextColor(Qt.gray)
+            self.chatEdit.append(
+                QDateTime.currentDateTime().toString(Qt.SystemLocaleLongDate) + ":")
+            self.chatEdit.append(self.trUtf8("* {0} has left.\n").format(nick))
+            self.chatEdit.setTextColor(color)
+        
+        if not self.__client.hasConnections():
+            self.__setConnected(False)
+    
+    def appendMessage(self, from_, message):
+        """
+        Public slot to append a message to the display.
+        
+        @param from_ originator of the message (string)
+        @param message message to be appended (string)
+        """
+        if from_ == "" or message == "":
+            return
+        
+        self.chatEdit.append(
+            QDateTime.currentDateTime().toString(Qt.SystemLocaleLongDate) + \
+            " <" + from_ + ">:")
+        self.chatEdit.append(message + "\n")
+        bar = self.chatEdit.verticalScrollBar()
+        bar.setValue(bar.maximum())
+    
+    @pyqtSlot(str)
+    def on_hostEdit_textChanged(self, host):
+        """
+        Private slot handling the entry of a host to connect to.
+        
+        @param host host to connect to (string)
+        """
+        if not self.__connected:
+            self.connectButton.setEnabled(host != "")
+    
+    @pyqtSlot()
+    def on_connectButton_clicked(self):
+        """
+        Private slot initiating the connection.
+        """
+        if not self.__connected:
+            if not self.__client.server().isListening():
+                self.on_serverButton_clicked()
+            if self.__client.server().isListening():
+                self.__client.connectToHost(self.hostEdit.text(), self.portSpin.value())
+                self.__setConnected(True)
+        else:
+            self.__client.disconnectConnections()
+            self.__setConnected(False)
+    
+    @pyqtSlot()
+    def on_serverButton_clicked(self):
+        """
+        Private slot to start the server.
+        """
+        if self.__client.server().isListening():
+            self.__client.server().close()
+            self.serverButton.setText(self.trUtf8("Start Server"))
+            self.serverPortSpin.setEnabled(True)
+            if self.serverPortSpin.value() != Preferences.getCooperation("ServerPort"):
+                self.serverPortSpin.setValue(Preferences.getCooperation("ServerPort"))
+            self.serverLed.setColor(QColor(Qt.red))
+        else:
+            res, port = self.__client.server().startListening(self.serverPortSpin.value())
+            if res:
+                self.serverButton.setText(self.trUtf8("Stop Server"))
+                self.serverPortSpin.setValue(port)
+                self.serverPortSpin.setEnabled(False)
+                self.serverLed.setColor(QColor(Qt.green))
+            else:
+                self.__showErrorMessage(
+                    self.trUtf8("! Server Error: {0}\n").format(
+                    self.__client.server().errorString())
+                )
+    
+    def __setConnected(self, connected):
+        """
+        Private slot to set the connected state.
+        
+        @param connected new connected state (boolean)
+        """
+        if connected:
+            self.__connected = True
+            self.connectButton.setText(self.trUtf8("Disconnect"))
+            self.connectButton.setEnabled(True)
+            self.hostEdit.setEnabled(False)
+            self.portSpin.setEnabled(False)
+            self.connectionLed.setColor(QColor(Qt.green))
+            self.serverButton.setEnabled(False)
+        else:
+            self.__connected = False
+            self.connectButton.setText(self.trUtf8("Connect"))
+            self.connectButton.setEnabled(self.hostEdit.text() != "")
+            self.hostEdit.setEnabled(True)
+            self.portSpin.setEnabled(True)
+            self.connectionLed.setColor(QColor(Qt.red))
+            self.serverButton.setEnabled(True)
+    
+    def __showErrorMessage(self, message):
+        """
+        Private slot to show an error message.
+        
+        @param message error message to show (string)
+        """
+        color = self.chatEdit.textColor()
+        self.chatEdit.setTextColor(Qt.red)
+        self.chatEdit.append(
+            QDateTime.currentDateTime().toString(Qt.SystemLocaleLongDate) + ":")
+        self.chatEdit.append(message)
+        self.chatEdit.setTextColor(color)
+    
+    def __initialConnectionRefused(self):
+        """
+        Private slot to handle the refusal of the initial connection.
+        """
+        self.__setConnected(False)
+    
+    def preferencesChanged(self):
+        """
+        Public slot to handle a change of preferences.
+        """
+        if not self.__client.server().isListening():
+            self.serverPortSpin.setValue(Preferences.getCooperation("ServerPort"))
+            if Preferences.getCooperation("AutoStartServer"):
+                self.on_serverButton_clicked()
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Cooperation/ChatWidget.ui	Sun Mar 21 19:34:15 2010 +0000
@@ -0,0 +1,218 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ui version="4.0">
+ <class>ChatWidget</class>
+ <widget class="QWidget" name="ChatWidget">
+  <property name="geometry">
+   <rect>
+    <x>0</x>
+    <y>0</y>
+    <width>303</width>
+    <height>710</height>
+   </rect>
+  </property>
+  <property name="windowTitle">
+   <string>Chat</string>
+  </property>
+  <layout class="QVBoxLayout" name="verticalLayout_3">
+   <item>
+    <widget class="QGroupBox" name="usersGroup">
+     <property name="sizePolicy">
+      <sizepolicy hsizetype="Preferred" vsizetype="Preferred">
+       <horstretch>0</horstretch>
+       <verstretch>1</verstretch>
+      </sizepolicy>
+     </property>
+     <property name="title">
+      <string>Users</string>
+     </property>
+     <layout class="QVBoxLayout" name="verticalLayout">
+      <item>
+       <widget class="QListWidget" name="usersList">
+        <property name="focusPolicy">
+         <enum>Qt::NoFocus</enum>
+        </property>
+       </widget>
+      </item>
+     </layout>
+    </widget>
+   </item>
+   <item>
+    <widget class="QGroupBox" name="chatGroup">
+     <property name="sizePolicy">
+      <sizepolicy hsizetype="Preferred" vsizetype="Preferred">
+       <horstretch>0</horstretch>
+       <verstretch>2</verstretch>
+      </sizepolicy>
+     </property>
+     <property name="title">
+      <string>Chat</string>
+     </property>
+     <layout class="QVBoxLayout" name="verticalLayout_2">
+      <item>
+       <widget class="QTextEdit" name="chatEdit">
+        <property name="focusPolicy">
+         <enum>Qt::NoFocus</enum>
+        </property>
+        <property name="readOnly">
+         <bool>true</bool>
+        </property>
+       </widget>
+      </item>
+      <item>
+       <widget class="QLineEdit" name="messageEdit"/>
+      </item>
+      <item>
+       <widget class="QPushButton" name="sendButton">
+        <property name="toolTip">
+         <string>Press to send the text above</string>
+        </property>
+        <property name="text">
+         <string>Send</string>
+        </property>
+       </widget>
+      </item>
+     </layout>
+    </widget>
+   </item>
+   <item>
+    <widget class="QGroupBox" name="connectGroup">
+     <property name="title">
+      <string>Connection</string>
+     </property>
+     <layout class="QGridLayout" name="gridLayout">
+      <item row="0" column="0">
+       <widget class="QLabel" name="label_2">
+        <property name="text">
+         <string>Host:</string>
+        </property>
+       </widget>
+      </item>
+      <item row="0" column="1" colspan="3">
+       <widget class="QLineEdit" name="hostEdit"/>
+      </item>
+      <item row="1" column="0">
+       <widget class="QLabel" name="label_3">
+        <property name="text">
+         <string>Port:</string>
+        </property>
+       </widget>
+      </item>
+      <item row="1" column="1">
+       <widget class="QSpinBox" name="portSpin">
+        <property name="minimum">
+         <number>1025</number>
+        </property>
+        <property name="maximum">
+         <number>65535</number>
+        </property>
+        <property name="value">
+         <number>42000</number>
+        </property>
+       </widget>
+      </item>
+      <item row="1" column="2">
+       <widget class="QPushButton" name="connectButton">
+        <property name="enabled">
+         <bool>false</bool>
+        </property>
+        <property name="sizePolicy">
+         <sizepolicy hsizetype="Expanding" vsizetype="Fixed">
+          <horstretch>0</horstretch>
+          <verstretch>0</verstretch>
+         </sizepolicy>
+        </property>
+        <property name="text">
+         <string/>
+        </property>
+        <property name="autoDefault">
+         <bool>false</bool>
+        </property>
+       </widget>
+      </item>
+      <item row="1" column="3">
+       <widget class="E5Led" name="connectionLed" native="true">
+        <property name="toolTip">
+         <string>Shows the connection status</string>
+        </property>
+       </widget>
+      </item>
+     </layout>
+    </widget>
+   </item>
+   <item>
+    <widget class="QGroupBox" name="serverGroup">
+     <property name="title">
+      <string>Server</string>
+     </property>
+     <layout class="QHBoxLayout" name="horizontalLayout_2">
+      <item>
+       <widget class="QLabel" name="label_4">
+        <property name="text">
+         <string>Port:</string>
+        </property>
+       </widget>
+      </item>
+      <item>
+       <widget class="QSpinBox" name="serverPortSpin">
+        <property name="minimum">
+         <number>1025</number>
+        </property>
+        <property name="maximum">
+         <number>65535</number>
+        </property>
+        <property name="singleStep">
+         <number>1</number>
+        </property>
+        <property name="value">
+         <number>42000</number>
+        </property>
+       </widget>
+      </item>
+      <item>
+       <widget class="QPushButton" name="serverButton">
+        <property name="sizePolicy">
+         <sizepolicy hsizetype="Expanding" vsizetype="Fixed">
+          <horstretch>0</horstretch>
+          <verstretch>0</verstretch>
+         </sizepolicy>
+        </property>
+        <property name="text">
+         <string/>
+        </property>
+        <property name="autoDefault">
+         <bool>false</bool>
+        </property>
+       </widget>
+      </item>
+      <item>
+       <widget class="E5Led" name="serverLed" native="true">
+        <property name="toolTip">
+         <string>Shows the status of the server</string>
+        </property>
+       </widget>
+      </item>
+     </layout>
+    </widget>
+   </item>
+  </layout>
+ </widget>
+ <customwidgets>
+  <customwidget>
+   <class>E5Led</class>
+   <extends>QWidget</extends>
+   <header>E5Gui/E5Led.h</header>
+   <container>1</container>
+  </customwidget>
+ </customwidgets>
+ <tabstops>
+  <tabstop>serverButton</tabstop>
+  <tabstop>serverPortSpin</tabstop>
+  <tabstop>hostEdit</tabstop>
+  <tabstop>portSpin</tabstop>
+  <tabstop>connectButton</tabstop>
+  <tabstop>messageEdit</tabstop>
+  <tabstop>sendButton</tabstop>
+ </tabstops>
+ <resources/>
+ <connections/>
+</ui>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Cooperation/Connection.py	Sun Mar 21 19:34:15 2010 +0000
@@ -0,0 +1,349 @@
+# -*- coding: utf-8 -*-
+
+# Copyright (c) 2010 Detlev Offenbach <detlev@die-offenbachs.de>
+#
+
+"""
+Module implementing a class representing a peer connection.
+"""
+
+from PyQt4.QtCore import pyqtSignal, QTimer, QTime, QByteArray
+from PyQt4.QtNetwork import QTcpSocket
+
+MaxBufferSize   = 1024 * 1024
+TransferTimeout =   30 * 1000
+PongTimeout     =   60 * 1000
+PingInterval    =    5 * 1000
+SeparatorToken  = '|||'
+
+
+class Connection(QTcpSocket):
+    """
+    Class representing a peer connection.
+    
+    @signal readyForUse() emitted when the connection is ready for use
+    @signal newMessage(user, message) emitted after a new message has 
+            arrived (string, string)
+    @signal getParticipants() emitted after a get participants message has arrived
+    @signal participants(participants) emitted after the list of participants has
+            arrived (list of strings of "host:port")
+    """
+    WaitingForGreeting  = 0
+    ReadingGreeting     = 1
+    ReadyForUse         = 2
+    
+    PlainText       = 0
+    Ping            = 1
+    Pong            = 2
+    Greeting        = 3
+    GetParticipants = 4
+    Participants    = 5
+    Undefined       = 99
+    
+    ProtocolMessage         = "MESSAGE"
+    ProtocolPing            = "PING"
+    ProtocolPong            = "PONG"
+    ProtocolGreeting        = "GREETING"
+    ProtocolGetParticipants = "GET_PARTICIPANTS"
+    ProtocolParticipants    = "PARTICIPANTS"
+    
+    readyForUse     = pyqtSignal()
+    newMessage      = pyqtSignal(str, str)
+    getParticipants = pyqtSignal()
+    participants    = pyqtSignal(list)
+    
+    def __init__(self, parent = None):
+        """
+        Constructor
+        
+        @param parent referenec to the parent object (QObject)
+        """
+        QTcpSocket.__init__(self, parent)
+        
+        self.__greetingMessage = self.trUtf8("undefined")
+        self.__username = self.trUtf8("unknown")
+        self.__serverPort = 0
+        self.__state = Connection.WaitingForGreeting
+        self.__currentDataType = Connection.Undefined
+        self.__numBytesForCurrentDataType = -1
+        self.__transferTimerId = 0
+        self.__isGreetingMessageSent = False
+        self.__pingTimer = QTimer()
+        self.__pingTimer.setInterval(PingInterval)
+        self.__pongTime = QTime()
+        self.__buffer = QByteArray()
+        
+        self.readyRead.connect(self.__processReadyRead)
+        self.disconnected.connect(self.__pingTimer.stop)
+        self.__pingTimer.timeout.connect(self.__sendPing)
+        self.connected.connect(self.__sendGreetingMessage)
+    
+    def name(self):
+        """
+        Public method to get the connection name.
+        
+        @return connection name (string)
+        """
+        return self.__username
+    
+    def serverPort(self):
+        """
+        Public method to get the server port.
+        
+        @return server port (integer)
+        """
+        return self.__serverPort
+    
+    def setGreetingMessage(self, message, serverPort):
+        """
+        Public method to set the greeting message.
+        
+        @param message greeting message (string)
+        """
+        self.__greetingMessage = "{0}:{1}".format(message, serverPort)
+    
+    def sendMessage(self, message):
+        """
+        Public method to send a message.
+        
+        @param message message to be sent (string)
+        @return flag indicating a successful send (boolean)
+        """
+        if message == "":
+            return False
+        
+        msg = QByteArray(message.encode("utf-8"))
+        data = QByteArray("{0}{1}{2}{1}".format(
+            Connection.ProtocolMessage, SeparatorToken, msg.size())) + msg
+        return self.write(data) == data.size()
+    
+    def timerEvent(self, evt):
+        """
+        Protected method to handle timer events.
+        
+        @param evt reference to the timer event (QTimerEvent)
+        """
+        if evt.timerId() == self.__transferTimerId:
+            self.abort()
+            self.killTimer(self.__transferTimerId)
+            self.__transferTimerId = 0
+    
+    def __processReadyRead(self):
+        """
+        Private slot to handle the readyRead signal.
+        """
+        if self.__state == Connection.WaitingForGreeting:
+            if not self.__readProtocolHeader():
+                return
+            if self.__currentDataType != Connection.Greeting:
+                self.abort()
+                return
+            self.__state = Connection.ReadingGreeting
+        
+        if self.__state == Connection.ReadingGreeting:
+            if not self.__hasEnoughData():
+                return
+            
+            self.__buffer = QByteArray(self.read(self.__numBytesForCurrentDataType))
+            if self.__buffer.size() != self.__numBytesForCurrentDataType:
+                self.abort()
+                return
+            
+            user, serverPort = str(self.__buffer, encoding = "utf-8").split(":")
+            self.__serverPort = int(serverPort)
+            self.__username = "{0}@{1}:{2}".format(
+                user, 
+                self.peerAddress().toString(), 
+                self.peerPort()
+            )
+            self.__currentDataType = Connection.Undefined
+            self.__numBytesForCurrentDataType = 0
+            self.__buffer.clear()
+            
+            if not self.isValid():
+                self.abort()
+                return
+            
+            if not self.__isGreetingMessageSent:
+                self.__sendGreetingMessage()
+            
+            self.__pingTimer.start()
+            self.__pongTime.start()
+            self.__state = Connection.ReadyForUse
+            self.readyForUse.emit()
+        
+        while self.bytesAvailable():
+            if self.__currentDataType == Connection.Undefined:
+                if not self.__readProtocolHeader():
+                    return
+            
+            if not self.__hasEnoughData():
+                return
+            
+            self.__processData()
+    
+    def __sendPing(self):
+        """
+        Private slot to send a ping message.
+        """
+        if self.__pongTime.elapsed() > PongTimeout:
+            self.abort()
+            return
+        
+        self.write("{0}{1}1{1}p".format(Connection.ProtocolPing, SeparatorToken))
+    
+    def __sendGreetingMessage(self):
+        """
+        Private slot to send a greeting message.
+        """
+        greeting = QByteArray(self.__greetingMessage.encode("utf-8"))
+        data = QByteArray("{0}{1}{2}{1}".format(
+            Connection.ProtocolGreeting, SeparatorToken, greeting.size())) + greeting
+        if self.write(data) == data.size():
+            self.__isGreetingMessageSent = True
+    
+    def __readDataIntoBuffer(self, maxSize = MaxBufferSize):
+        """
+        Private method to read some data into the buffer.
+        
+        @param maxSize maximum size of data to read (integer)
+        @return size of data read (integer)
+        """
+        if maxSize > MaxBufferSize:
+            return 0
+        
+        numBytesBeforeRead = self.__buffer.size()
+        if numBytesBeforeRead == MaxBufferSize:
+            self.abort()
+            return 0
+        
+        while self.bytesAvailable() and self.__buffer.size() < maxSize:
+            self.__buffer.append(self.read(1))
+            if self.__buffer.endsWith(SeparatorToken):
+                break
+        
+        return self.__buffer.size() - numBytesBeforeRead
+    
+    def __dataLengthForCurrentDataType(self):
+        """
+        Private method to get the data length for the current data type.
+        
+        @return data length (integer)
+        """
+        if self.bytesAvailable() <= 0 or \
+           self.__readDataIntoBuffer() <= 0 or \
+           not self.__buffer.endsWith(SeparatorToken):
+            return 0
+        
+        self.__buffer.chop(len(SeparatorToken))
+        number = self.__buffer.toInt()[0]
+        self.__buffer.clear()
+        return number
+    
+    def __readProtocolHeader(self):
+        """
+        Private method to read the protocol header.
+        
+        @return flag indicating a successful read (boolean)
+        """
+        if self.__transferTimerId:
+            self.killTimer(self.__transferTimerId)
+            self.__transferTimerId = 0
+        
+        if self.__readDataIntoBuffer() <= 0:
+            self.__transferTimerId = self.startTimer(TransferTimeout)
+            return False
+        
+        self.__buffer.chop(len(SeparatorToken))
+        if self.__buffer == Connection.ProtocolPing:
+            self.__currentDataType = Connection.Ping
+        elif self.__buffer == Connection.ProtocolPong:
+            self.__currentDataType = Connection.Pong
+        elif self.__buffer == Connection.ProtocolMessage:
+            self.__currentDataType = Connection.PlainText
+        elif self.__buffer == Connection.ProtocolGreeting:
+            self.__currentDataType = Connection.Greeting
+        elif self.__buffer == Connection.ProtocolGetParticipants:
+            self.__currentDataType = Connection.GetParticipants
+        elif self.__buffer == Connection.ProtocolParticipants:
+            self.__currentDataType = Connection.Participants
+        else:
+            self.__currentDataType = Connection.Undefined
+            self.abort()
+            return False
+        
+        self.__buffer.clear()
+        self.__numBytesForCurrentDataType = self.__dataLengthForCurrentDataType()
+        return True
+    
+    def __hasEnoughData(self):
+        """
+        Private method to check, if enough data is available.
+        
+        @return flag indicating availability of enough data (boolean)
+        """
+        if self.__transferTimerId:
+            self.killTimer(self.__transferTimerId)
+            self.__transferTimerId = 0
+        
+        if self.__numBytesForCurrentDataType <= 0:
+            self.__numBytesForCurrentDataType = self.__dataLengthForCurrentDataType()
+        
+        if self.bytesAvailable() < self.__numBytesForCurrentDataType or \
+           self.__numBytesForCurrentDataType <= 0:
+            self.__transferTimerId = self.startTimer(TransferTimeout)
+            return False
+        
+        return True
+    
+    def __processData(self):
+        """
+        Private method to process the received data.
+        """
+        self.__buffer = QByteArray(self.read(self.__numBytesForCurrentDataType))
+        if self.__buffer.size() != self.__numBytesForCurrentDataType:
+            self.abort()
+            return
+        
+        if self.__currentDataType == Connection.PlainText:
+            self.newMessage.emit(self.__username, str(self.__buffer, encoding = "utf-8"))
+        elif self.__currentDataType == Connection.Ping:
+            self.write("{0}{1}1{1}p".format(Connection.ProtocolPong, SeparatorToken))
+        elif self.__currentDataType == Connection.Pong:
+            self.__pongTime.restart()
+        elif self.__currentDataType == Connection.GetParticipants:
+            self.getParticipants.emit()
+        elif self.__currentDataType == Connection.Participants:
+            msg = str(self.__buffer, encoding = "utf-8")
+            if msg == "<empty>":
+                participantsList = []
+            else:
+                participantsList = msg.split(SeparatorToken)
+            self.participants.emit(participantsList[:])
+        
+        self.__currentDataType = Connection.Undefined
+        self.__numBytesForCurrentDataType = 0
+        self.__buffer.clear()
+    
+    def sendGetParticipants(self):
+        """
+        Public method to request a list of participants.
+        """
+        self.write(
+            "{0}{1}1{1}l".format(Connection.ProtocolGetParticipants, SeparatorToken)
+        )
+    
+    def sendParticipants(self, participants):
+        """
+        Public method to send the list of participants.
+        
+        @param participants list of participants (list of strings of "host:port")
+        """
+        if participants:
+            message = SeparatorToken.join(participants)
+        else:
+            message = "<empty>"
+        msg = QByteArray(message.encode("utf-8"))
+        data = QByteArray("{0}{1}{2}{1}".format(
+            Connection.ProtocolParticipants, SeparatorToken, msg.size())) + msg
+        self.write(data)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Cooperation/CooperationClient.py	Sun Mar 21 19:34:15 2010 +0000
@@ -0,0 +1,258 @@
+# -*- coding: utf-8 -*-
+
+# Copyright (c) 2010 Detlev Offenbach <detlev@die-offenbachs.de>
+#
+
+"""
+Module implementing the client of the cooperation package.
+"""
+
+import collections
+
+from PyQt4.QtCore import QObject, pyqtSignal, QProcess, QRegExp
+from PyQt4.QtNetwork import QHostInfo, QHostAddress, QAbstractSocket
+
+from .CooperationServer import CooperationServer
+from .Connection import Connection
+
+class CooperationClient(QObject):
+    """
+    Class implementing the client of the cooperation package.
+    
+    @signal newMessage(user, message) emitted after a new message has 
+            arrived (string, string)
+    @signal newParticipant(nickname) emitted after a new participant joined (string)
+    @signal participantLeft(nickname) emitted after a participant left (string)
+    @signal connectionError(message) emitted when a connection error occurs (string)
+    @signal cannotConnect() emitted, if the initial connection fails
+    """
+    newMessage      = pyqtSignal(str, str)
+    newParticipant  = pyqtSignal(str)
+    participantLeft = pyqtSignal(str)
+    connectionError = pyqtSignal(str)
+    cannotConnect   = pyqtSignal()
+    
+    def __init__(self):
+        """
+        Constructor
+        """
+        QObject.__init__(self)
+        
+        self.__server = CooperationServer()
+        self.__peers = collections.defaultdict(list)
+        
+        self.__initialConnection = None
+        
+        envVariables = ["USERNAME.*", "USER.*", "USERDOMAIN.*", 
+                        "HOSTNAME.*", "DOMAINNAME.*"]
+        environment = QProcess.systemEnvironment()
+        found = False
+        for envVariable in envVariables:
+            for env in environment:
+                if QRegExp(envVariable).exactMatch(env):
+                    envList = env.split("=")
+                    if len(envList) == 2:
+                        self.__username = envList[1].strip()
+                        found = True
+                        break
+            
+            if found:
+                break
+        
+        if self.__username == "":
+            self.__username = self.trUtf8("unknown")
+        
+        self.__server.newConnection.connect(self.__newConnection)
+    
+    def server(self):
+        """
+        Public method to get a reference to the server.
+        
+        @return reference to the server object (CooperationServer)
+        """
+        return self.__server
+    
+    def sendMessage(self, message):
+        """
+        Public method to send a message.
+        
+        @param message message to be sent (string)
+        """
+        if message == "":
+            return
+        
+        for connectionList in self.__peers.values():
+            for connection in connectionList:
+                connection.sendMessage(message)
+    
+    def nickName(self):
+        """
+        Public method to get the nick name.
+        
+        @return nick name (string)
+        """
+        return "{0}@{1}:{2}".format(
+            self.__username, 
+            QHostInfo.localHostName(), 
+            self.__server.serverPort()
+        )
+    
+    def hasConnection(self, senderIp, senderPort = -1):
+        """
+        Public method to check for an existing connection.
+        
+        @param senderIp address of the sender (QHostAddress)
+        @param senderPort port of the sender (integer)
+        @return flag indicating an existing connection (boolean)
+        """
+        if senderPort == -1:
+            return senderIp in self.__peers
+        
+        if senderIp not in self.__peers:
+            return False
+        
+        for connection in self.__peers[senderIp]:
+            if connection.peerPort() == senderPort:
+                return True
+        
+        return False
+    
+    def hasConnections(self):
+        """
+        Public method to check, if there are any connections established.
+        
+        @return flag indicating the presence of connections (boolean)
+        """
+        for connectionList in self.__peers.values():
+            if connectionList:
+                return True
+        
+        return False
+    
+    def __removeConnection(self, connection):
+        """
+        Private method to remove a connection.
+        
+        @param connection reference to the connection to be removed (Connection)
+        """
+        if connection.peerAddress() in self.__peers and \
+           connection in self.__peers[connection.peerAddress()]:
+            self.__peers[connection.peerAddress()].remove(connection)
+            nick = connection.name()
+            if nick != "":
+                self.participantLeft.emit(nick)
+        
+        connection.deleteLater()
+    
+    def disconnectConnections(self):
+        """
+        Public slot to disconnect from the chat network.
+        """
+        for connectionList in self.__peers.values():
+            while connectionList:
+                self.__removeConnection(connectionList[0])
+    
+    def __newConnection(self, connection):
+        """
+        Private slot to handle a new connection.
+        
+        @param connection reference to the new connection (Connection)
+        """
+        connection.setGreetingMessage(self.__username, 
+                                      self.__server.serverPort())
+        
+        connection.error.connect(self.__connectionError)
+        connection.disconnected.connect(self.__disconnected)
+        connection.readyForUse.connect(self.__readyForUse)
+    
+    def __connectionError(self, socketError):
+        """
+        Private slot to handle a connection error.
+        
+        @param socketError reference to the error object (QAbstractSocket.SocketError)
+        """
+        connection = self.sender()
+        if socketError != QAbstractSocket.RemoteHostClosedError:
+            if connection.peerPort() != 0:
+                msg = "{0}:{1}\n{2}\n".format(
+                    connection.peerAddress().toString(), 
+                    connection.peerPort(), 
+                    connection.errorString()
+                )
+            else:
+                msg = "{0}\n".format(connection.errorString())
+            self.connectionError.emit(msg)
+        if connection == self.__initialConnection:
+            self.cannotConnect.emit()
+        self.__removeConnection(connection)
+    
+    def __disconnected(self):
+        """
+        Private slot to handle the disconnection of a chat client.
+        """
+        connection = self.sender()
+        self.__removeConnection(connection)
+    
+    def __readyForUse(self):
+        """
+        Private slot to handle a connection getting ready for use.
+        """
+        connection = self.sender()
+        if self.hasConnection(connection.peerAddress(), connection.peerPort()):
+            return
+        
+        connection.newMessage.connect(self.newMessage)
+        connection.getParticipants.connect(self.__getParticipants)
+        
+        self.__peers[connection.peerAddress()].append(connection)
+        nick = connection.name()
+        if nick != "":
+            self.newParticipant.emit(nick)
+        
+        if connection == self.__initialConnection:
+            connection.sendGetParticipants()
+            self.__initialConnection = None
+    
+    def connectToHost(self, host, port):
+        """
+        Public method to connect to a host.
+        
+        @param host host to connect to (string)
+        @param port port to connect to (integer)
+        """
+        self.__initialConnection = Connection(self)
+        self.__newConnection(self.__initialConnection)
+        self.__initialConnection.participants.connect(self.__processParticipants)
+        self.__initialConnection.connectToHost(host, port)
+    
+    def __getParticipants(self):
+        """
+        Private slot to handle the request for a list of participants.
+        """
+        reqConnection = self.sender()
+        participants = []
+        for connectionList in self.__peers.values():
+            for connection in connectionList:
+                if connection != reqConnection:
+                    participants.append("{0}:{1}".format(
+                        connection.peerAddress().toString(), connection.serverPort()))
+        reqConnection.sendParticipants(participants)
+    
+    def __processParticipants(self, participants):
+        """
+        Private slot to handle the receipt of a list of participants.
+        
+        @param participants list of participants (list of strings of "host:port")
+        """
+        for participant in participants:
+            host, port = participant.split(":")
+            port = int(port)
+            
+            if port == 0:
+                msg = self.trUtf8("Illegal address: {0}:{1}\n").format(host, port)
+                self.connectionError.emit(msg)
+            else:
+                if not self.hasConnection(QHostAddress(host), port):
+                    connection = Connection(self)
+                    self.__newConnection(connection)
+                    connection.connectToHost(host, port)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Cooperation/CooperationServer.py	Sun Mar 21 19:34:15 2010 +0000
@@ -0,0 +1,58 @@
+# -*- coding: utf-8 -*-
+
+# Copyright (c) 2010 Detlev Offenbach <detlev@die-offenbachs.de>
+#
+
+"""
+Module implementing the cooperation server.
+"""
+
+from PyQt4.QtCore import pyqtSignal
+from PyQt4.QtNetwork import QTcpServer, QHostAddress
+
+from .Connection import Connection
+
+import Preferences
+
+class CooperationServer(QTcpServer):
+    """
+    Class implementing the cooperation server.
+    
+    @signal newConnection(connection) emitted after a new connection was received
+            (Connection)
+    """
+    newConnection = pyqtSignal(Connection)
+    
+    def __init__(self, parent = None):
+        """
+        Constructor
+        
+        @param parent reference to the parent object (QObject)
+        """
+        QTcpServer.__init__(self, parent)
+    
+    def incomingConnection(self, socketDescriptor):
+        """
+        Protected method handling an incoming connection.
+        
+        @param socketDescriptor native socket descriptor (integer)
+        """
+        connection = Connection(self)
+        connection.setSocketDescriptor(socketDescriptor)
+        self.newConnection.emit(connection)
+    
+    def startListening(self, port = -1):
+        """
+        Public method to start listening for new connections.
+        
+        @param port port to listen on (integer)
+        @return tuple giving a flag indicating success (boolean) and
+            the port the server listens on
+        """
+        res = self.listen(QHostAddress.Any, port)
+        if Preferences.getCooperation("TryOtherPorts"):
+            endPort = port + Preferences.getCooperation("MaxPortsToTry")
+            while not res and port < endPort:
+                port += 1
+                res = self.listen(QHostAddress.Any, port)
+        return res, port
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Cooperation/__init__.py	Sun Mar 21 19:34:15 2010 +0000
@@ -0,0 +1,8 @@
+# -*- coding: utf-8 -*-
+
+# Copyright (c) 2010 Detlev Offenbach <detlev@die-offenbachs.de>
+#
+
+"""
+Package containing the modules dealing with cooperation.
+"""
Binary file Documentation/Help/source.qch has changed
--- a/Documentation/Help/source.qhp	Sat Mar 20 13:14:56 2010 +0000
+++ b/Documentation/Help/source.qhp	Sun Mar 21 19:34:15 2010 +0000
@@ -14,6 +14,12 @@
     <toc>
       <section title="The eric5 IDE" ref="index.html">
         <section title="eric5" ref="index-eric5.html">
+          <section title="eric5.Cooperation" ref="index-eric5.Cooperation.html">
+            <section title="eric5.Cooperation.ChatWidget" ref="eric5.Cooperation.ChatWidget.html" />
+            <section title="eric5.Cooperation.Connection" ref="eric5.Cooperation.Connection.html" />
+            <section title="eric5.Cooperation.CooperationClient" ref="eric5.Cooperation.CooperationClient.html" />
+            <section title="eric5.Cooperation.CooperationServer" ref="eric5.Cooperation.CooperationServer.html" />
+          </section>
           <section title="eric5.DataViews" ref="index-eric5.DataViews.html">
             <section title="eric5.DataViews.CodeMetrics" ref="eric5.DataViews.CodeMetrics.html" />
             <section title="eric5.DataViews.CodeMetricsDialog" ref="eric5.DataViews.CodeMetricsDialog.html" />
@@ -443,6 +449,7 @@
             <section title="eric5.Preferences.ConfigurationPages" ref="index-eric5.Preferences.ConfigurationPages.html">
               <section title="eric5.Preferences.ConfigurationPages.ApplicationPage" ref="eric5.Preferences.ConfigurationPages.ApplicationPage.html" />
               <section title="eric5.Preferences.ConfigurationPages.ConfigurationPageBase" ref="eric5.Preferences.ConfigurationPages.ConfigurationPageBase.html" />
+              <section title="eric5.Preferences.ConfigurationPages.CooperationPage" ref="eric5.Preferences.ConfigurationPages.CooperationPage.html" />
               <section title="eric5.Preferences.ConfigurationPages.CorbaPage" ref="eric5.Preferences.ConfigurationPages.CorbaPage.html" />
               <section title="eric5.Preferences.ConfigurationPages.DebuggerGeneralPage" ref="eric5.Preferences.ConfigurationPages.DebuggerGeneralPage.html" />
               <section title="eric5.Preferences.ConfigurationPages.DebuggerPython3Page" ref="eric5.Preferences.ConfigurationPages.DebuggerPython3Page.html" />
@@ -2943,6 +2950,7 @@
       <keyword name="Preferences (Package)" id="Preferences (Package)" ref="index-eric5.Preferences.html" />
       <keyword name="Prefs" id="Prefs" ref="eric5.Preferences.__init__.html#Prefs" />
       <keyword name="exportPreferences" id="exportPreferences" ref="eric5.Preferences.__init__.html#exportPreferences" />
+      <keyword name="getCooperation" id="getCooperation" ref="eric5.Preferences.__init__.html#getCooperation" />
       <keyword name="getCorba" id="getCorba" ref="eric5.Preferences.__init__.html#getCorba" />
       <keyword name="getDebugger" id="getDebugger" ref="eric5.Preferences.__init__.html#getDebugger" />
       <keyword name="getEditor" id="getEditor" ref="eric5.Preferences.__init__.html#getEditor" />
@@ -2991,6 +2999,7 @@
       <keyword name="resetLayout" id="resetLayout" ref="eric5.Preferences.__init__.html#resetLayout" />
       <keyword name="saveResetLayout" id="saveResetLayout" ref="eric5.Preferences.__init__.html#saveResetLayout" />
       <keyword name="saveToolGroups" id="saveToolGroups" ref="eric5.Preferences.__init__.html#saveToolGroups" />
+      <keyword name="setCooperation" id="setCooperation" ref="eric5.Preferences.__init__.html#setCooperation" />
       <keyword name="setCorba" id="setCorba" ref="eric5.Preferences.__init__.html#setCorba" />
       <keyword name="setDebugger" id="setDebugger" ref="eric5.Preferences.__init__.html#setDebugger" />
       <keyword name="setEditor" id="setEditor" ref="eric5.Preferences.__init__.html#setEditor" />
@@ -3170,6 +3179,61 @@
       <keyword name="ToolGroupConfigurationDialog.on_upButton_clicked" id="ToolGroupConfigurationDialog.on_upButton_clicked" ref="eric5.Preferences.ToolGroupConfigurationDialog.html#ToolGroupConfigurationDialog.on_upButton_clicked" />
       <keyword name="Globals (Package)" id="Globals (Package)" ref="index-eric5.Globals.html" />
       <keyword name="isWindowsPlatform" id="isWindowsPlatform" ref="eric5.Globals.__init__.html#isWindowsPlatform" />
+      <keyword name="Cooperation (Package)" id="Cooperation (Package)" ref="index-eric5.Cooperation.html" />
+      <keyword name="ChatWidget (Module)" id="ChatWidget (Module)" ref="eric5.Cooperation.ChatWidget.html" />
+      <keyword name="ChatWidget" id="ChatWidget" ref="eric5.Cooperation.ChatWidget.html#ChatWidget" />
+      <keyword name="ChatWidget (Constructor)" id="ChatWidget (Constructor)" ref="eric5.Cooperation.ChatWidget.html#ChatWidget.__init__" />
+      <keyword name="ChatWidget.__handleMessage" id="ChatWidget.__handleMessage" ref="eric5.Cooperation.ChatWidget.html#ChatWidget.__handleMessage" />
+      <keyword name="ChatWidget.__initialConnectionRefused" id="ChatWidget.__initialConnectionRefused" ref="eric5.Cooperation.ChatWidget.html#ChatWidget.__initialConnectionRefused" />
+      <keyword name="ChatWidget.__newParticipant" id="ChatWidget.__newParticipant" ref="eric5.Cooperation.ChatWidget.html#ChatWidget.__newParticipant" />
+      <keyword name="ChatWidget.__participantLeft" id="ChatWidget.__participantLeft" ref="eric5.Cooperation.ChatWidget.html#ChatWidget.__participantLeft" />
+      <keyword name="ChatWidget.__setConnected" id="ChatWidget.__setConnected" ref="eric5.Cooperation.ChatWidget.html#ChatWidget.__setConnected" />
+      <keyword name="ChatWidget.__showErrorMessage" id="ChatWidget.__showErrorMessage" ref="eric5.Cooperation.ChatWidget.html#ChatWidget.__showErrorMessage" />
+      <keyword name="ChatWidget.appendMessage" id="ChatWidget.appendMessage" ref="eric5.Cooperation.ChatWidget.html#ChatWidget.appendMessage" />
+      <keyword name="ChatWidget.on_connectButton_clicked" id="ChatWidget.on_connectButton_clicked" ref="eric5.Cooperation.ChatWidget.html#ChatWidget.on_connectButton_clicked" />
+      <keyword name="ChatWidget.on_hostEdit_textChanged" id="ChatWidget.on_hostEdit_textChanged" ref="eric5.Cooperation.ChatWidget.html#ChatWidget.on_hostEdit_textChanged" />
+      <keyword name="ChatWidget.on_serverButton_clicked" id="ChatWidget.on_serverButton_clicked" ref="eric5.Cooperation.ChatWidget.html#ChatWidget.on_serverButton_clicked" />
+      <keyword name="ChatWidget.preferencesChanged" id="ChatWidget.preferencesChanged" ref="eric5.Cooperation.ChatWidget.html#ChatWidget.preferencesChanged" />
+      <keyword name="Connection (Module)" id="Connection (Module)" ref="eric5.Cooperation.Connection.html" />
+      <keyword name="Connection" id="Connection" ref="eric5.Cooperation.Connection.html#Connection" />
+      <keyword name="Connection (Constructor)" id="Connection (Constructor)" ref="eric5.Cooperation.Connection.html#Connection.__init__" />
+      <keyword name="Connection.__dataLengthForCurrentDataType" id="Connection.__dataLengthForCurrentDataType" ref="eric5.Cooperation.Connection.html#Connection.__dataLengthForCurrentDataType" />
+      <keyword name="Connection.__hasEnoughData" id="Connection.__hasEnoughData" ref="eric5.Cooperation.Connection.html#Connection.__hasEnoughData" />
+      <keyword name="Connection.__processData" id="Connection.__processData" ref="eric5.Cooperation.Connection.html#Connection.__processData" />
+      <keyword name="Connection.__processReadyRead" id="Connection.__processReadyRead" ref="eric5.Cooperation.Connection.html#Connection.__processReadyRead" />
+      <keyword name="Connection.__readDataIntoBuffer" id="Connection.__readDataIntoBuffer" ref="eric5.Cooperation.Connection.html#Connection.__readDataIntoBuffer" />
+      <keyword name="Connection.__readProtocolHeader" id="Connection.__readProtocolHeader" ref="eric5.Cooperation.Connection.html#Connection.__readProtocolHeader" />
+      <keyword name="Connection.__sendGreetingMessage" id="Connection.__sendGreetingMessage" ref="eric5.Cooperation.Connection.html#Connection.__sendGreetingMessage" />
+      <keyword name="Connection.__sendPing" id="Connection.__sendPing" ref="eric5.Cooperation.Connection.html#Connection.__sendPing" />
+      <keyword name="Connection.name" id="Connection.name" ref="eric5.Cooperation.Connection.html#Connection.name" />
+      <keyword name="Connection.sendGetParticipants" id="Connection.sendGetParticipants" ref="eric5.Cooperation.Connection.html#Connection.sendGetParticipants" />
+      <keyword name="Connection.sendMessage" id="Connection.sendMessage" ref="eric5.Cooperation.Connection.html#Connection.sendMessage" />
+      <keyword name="Connection.sendParticipants" id="Connection.sendParticipants" ref="eric5.Cooperation.Connection.html#Connection.sendParticipants" />
+      <keyword name="Connection.serverPort" id="Connection.serverPort" ref="eric5.Cooperation.Connection.html#Connection.serverPort" />
+      <keyword name="Connection.setGreetingMessage" id="Connection.setGreetingMessage" ref="eric5.Cooperation.Connection.html#Connection.setGreetingMessage" />
+      <keyword name="Connection.timerEvent" id="Connection.timerEvent" ref="eric5.Cooperation.Connection.html#Connection.timerEvent" />
+      <keyword name="CooperationServer (Module)" id="CooperationServer (Module)" ref="eric5.Cooperation.CooperationServer.html" />
+      <keyword name="CooperationServer" id="CooperationServer" ref="eric5.Cooperation.CooperationServer.html#CooperationServer" />
+      <keyword name="CooperationServer (Constructor)" id="CooperationServer (Constructor)" ref="eric5.Cooperation.CooperationServer.html#CooperationServer.__init__" />
+      <keyword name="CooperationServer.incomingConnection" id="CooperationServer.incomingConnection" ref="eric5.Cooperation.CooperationServer.html#CooperationServer.incomingConnection" />
+      <keyword name="CooperationServer.startListening" id="CooperationServer.startListening" ref="eric5.Cooperation.CooperationServer.html#CooperationServer.startListening" />
+      <keyword name="CooperationClient (Module)" id="CooperationClient (Module)" ref="eric5.Cooperation.CooperationClient.html" />
+      <keyword name="CooperationClient" id="CooperationClient" ref="eric5.Cooperation.CooperationClient.html#CooperationClient" />
+      <keyword name="CooperationClient (Constructor)" id="CooperationClient (Constructor)" ref="eric5.Cooperation.CooperationClient.html#CooperationClient.__init__" />
+      <keyword name="CooperationClient.__connectionError" id="CooperationClient.__connectionError" ref="eric5.Cooperation.CooperationClient.html#CooperationClient.__connectionError" />
+      <keyword name="CooperationClient.__disconnected" id="CooperationClient.__disconnected" ref="eric5.Cooperation.CooperationClient.html#CooperationClient.__disconnected" />
+      <keyword name="CooperationClient.__getParticipants" id="CooperationClient.__getParticipants" ref="eric5.Cooperation.CooperationClient.html#CooperationClient.__getParticipants" />
+      <keyword name="CooperationClient.__newConnection" id="CooperationClient.__newConnection" ref="eric5.Cooperation.CooperationClient.html#CooperationClient.__newConnection" />
+      <keyword name="CooperationClient.__processParticipants" id="CooperationClient.__processParticipants" ref="eric5.Cooperation.CooperationClient.html#CooperationClient.__processParticipants" />
+      <keyword name="CooperationClient.__readyForUse" id="CooperationClient.__readyForUse" ref="eric5.Cooperation.CooperationClient.html#CooperationClient.__readyForUse" />
+      <keyword name="CooperationClient.__removeConnection" id="CooperationClient.__removeConnection" ref="eric5.Cooperation.CooperationClient.html#CooperationClient.__removeConnection" />
+      <keyword name="CooperationClient.connectToHost" id="CooperationClient.connectToHost" ref="eric5.Cooperation.CooperationClient.html#CooperationClient.connectToHost" />
+      <keyword name="CooperationClient.disconnectConnections" id="CooperationClient.disconnectConnections" ref="eric5.Cooperation.CooperationClient.html#CooperationClient.disconnectConnections" />
+      <keyword name="CooperationClient.hasConnection" id="CooperationClient.hasConnection" ref="eric5.Cooperation.CooperationClient.html#CooperationClient.hasConnection" />
+      <keyword name="CooperationClient.hasConnections" id="CooperationClient.hasConnections" ref="eric5.Cooperation.CooperationClient.html#CooperationClient.hasConnections" />
+      <keyword name="CooperationClient.nickName" id="CooperationClient.nickName" ref="eric5.Cooperation.CooperationClient.html#CooperationClient.nickName" />
+      <keyword name="CooperationClient.sendMessage" id="CooperationClient.sendMessage" ref="eric5.Cooperation.CooperationClient.html#CooperationClient.sendMessage" />
+      <keyword name="CooperationClient.server" id="CooperationClient.server" ref="eric5.Cooperation.CooperationClient.html#CooperationClient.server" />
       <keyword name="ViewManager (Package)" id="ViewManager (Package)" ref="index-eric5.ViewManager.html" />
       <keyword name="factory" id="factory" ref="eric5.ViewManager.__init__.html#factory" />
       <keyword name="ViewManager (Module)" id="ViewManager (Module)" ref="eric5.ViewManager.ViewManager.html" />
@@ -3788,6 +3852,7 @@
       <keyword name="UserInterface.__TRPreviewer" id="UserInterface.__TRPreviewer" ref="eric5.UI.UserInterface.html#UserInterface.__TRPreviewer" />
       <keyword name="UserInterface.__UIPreviewer" id="UserInterface.__UIPreviewer" ref="eric5.UI.UserInterface.html#UserInterface.__UIPreviewer" />
       <keyword name="UserInterface.__activateBrowser" id="UserInterface.__activateBrowser" ref="eric5.UI.UserInterface.html#UserInterface.__activateBrowser" />
+      <keyword name="UserInterface.__activateCooperationViewer" id="UserInterface.__activateCooperationViewer" ref="eric5.UI.UserInterface.html#UserInterface.__activateCooperationViewer" />
       <keyword name="UserInterface.__activateDebugViewer" id="UserInterface.__activateDebugViewer" ref="eric5.UI.UserInterface.html#UserInterface.__activateDebugViewer" />
       <keyword name="UserInterface.__activateLogViewer" id="UserInterface.__activateLogViewer" ref="eric5.UI.UserInterface.html#UserInterface.__activateLogViewer" />
       <keyword name="UserInterface.__activateMultiProjectBrowser" id="UserInterface.__activateMultiProjectBrowser" ref="eric5.UI.UserInterface.html#UserInterface.__activateMultiProjectBrowser" />
@@ -3896,6 +3961,7 @@
       <keyword name="UserInterface.__switchTab" id="UserInterface.__switchTab" ref="eric5.UI.UserInterface.html#UserInterface.__switchTab" />
       <keyword name="UserInterface.__toggleBottomSidebar" id="UserInterface.__toggleBottomSidebar" ref="eric5.UI.UserInterface.html#UserInterface.__toggleBottomSidebar" />
       <keyword name="UserInterface.__toggleBrowser" id="UserInterface.__toggleBrowser" ref="eric5.UI.UserInterface.html#UserInterface.__toggleBrowser" />
+      <keyword name="UserInterface.__toggleCooperationViewer" id="UserInterface.__toggleCooperationViewer" ref="eric5.UI.UserInterface.html#UserInterface.__toggleCooperationViewer" />
       <keyword name="UserInterface.__toggleDebugViewer" id="UserInterface.__toggleDebugViewer" ref="eric5.UI.UserInterface.html#UserInterface.__toggleDebugViewer" />
       <keyword name="UserInterface.__toggleHorizontalToolbox" id="UserInterface.__toggleHorizontalToolbox" ref="eric5.UI.UserInterface.html#UserInterface.__toggleHorizontalToolbox" />
       <keyword name="UserInterface.__toggleLeftSidebar" id="UserInterface.__toggleLeftSidebar" ref="eric5.UI.UserInterface.html#UserInterface.__toggleLeftSidebar" />
@@ -7473,6 +7539,11 @@
       <keyword name="VcsPage.on_pbVcsReplacedButton_clicked" id="VcsPage.on_pbVcsReplacedButton_clicked" ref="eric5.Preferences.ConfigurationPages.VcsPage.html#VcsPage.on_pbVcsReplacedButton_clicked" />
       <keyword name="VcsPage.on_pbVcsUpdateButton_clicked" id="VcsPage.on_pbVcsUpdateButton_clicked" ref="eric5.Preferences.ConfigurationPages.VcsPage.html#VcsPage.on_pbVcsUpdateButton_clicked" />
       <keyword name="VcsPage.save" id="VcsPage.save" ref="eric5.Preferences.ConfigurationPages.VcsPage.html#VcsPage.save" />
+      <keyword name="CooperationPage (Module)" id="CooperationPage (Module)" ref="eric5.Preferences.ConfigurationPages.CooperationPage.html" />
+      <keyword name="CooperationPage" id="CooperationPage" ref="eric5.Preferences.ConfigurationPages.CooperationPage.html#CooperationPage" />
+      <keyword name="create" id="create" ref="eric5.Preferences.ConfigurationPages.CooperationPage.html#create" />
+      <keyword name="CooperationPage (Constructor)" id="CooperationPage (Constructor)" ref="eric5.Preferences.ConfigurationPages.CooperationPage.html#CooperationPage.__init__" />
+      <keyword name="CooperationPage.save" id="CooperationPage.save" ref="eric5.Preferences.ConfigurationPages.CooperationPage.html#CooperationPage.save" />
       <keyword name="InterfacePage (Module)" id="InterfacePage (Module)" ref="eric5.Preferences.ConfigurationPages.InterfacePage.html" />
       <keyword name="InterfacePage" id="InterfacePage" ref="eric5.Preferences.ConfigurationPages.InterfacePage.html#InterfacePage" />
       <keyword name="create" id="create" ref="eric5.Preferences.ConfigurationPages.InterfacePage.html#create" />
@@ -9024,6 +9095,10 @@
       <keyword name="PDFStyle (Constructor)" id="PDFStyle (Constructor)" ref="eric5.QScintilla.Exporters.ExporterPDF.html#PDFStyle.__init__" />
     </keywords>
     <files>
+      <file>eric5.Cooperation.ChatWidget.html</file>
+      <file>eric5.Cooperation.Connection.html</file>
+      <file>eric5.Cooperation.CooperationClient.html</file>
+      <file>eric5.Cooperation.CooperationServer.html</file>
       <file>eric5.DataViews.CodeMetrics.html</file>
       <file>eric5.DataViews.CodeMetricsDialog.html</file>
       <file>eric5.DataViews.PyCoverageDialog.html</file>
@@ -9353,6 +9428,7 @@
       <file>eric5.Preferences.ConfigurationDialog.html</file>
       <file>eric5.Preferences.ConfigurationPages.ApplicationPage.html</file>
       <file>eric5.Preferences.ConfigurationPages.ConfigurationPageBase.html</file>
+      <file>eric5.Preferences.ConfigurationPages.CooperationPage.html</file>
       <file>eric5.Preferences.ConfigurationPages.CorbaPage.html</file>
       <file>eric5.Preferences.ConfigurationPages.DebuggerGeneralPage.html</file>
       <file>eric5.Preferences.ConfigurationPages.DebuggerPython3Page.html</file>
@@ -9571,6 +9647,7 @@
       <file>eric5.patch_modpython.html</file>
       <file>eric5.patch_pyxml.html</file>
       <file>eric5.uninstall.html</file>
+      <file>index-eric5.Cooperation.html</file>
       <file>index-eric5.DataViews.html</file>
       <file>index-eric5.DebugClients.Python.html</file>
       <file>index-eric5.DebugClients.Python3.html</file>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Documentation/Source/eric5.Cooperation.ChatWidget.html	Sun Mar 21 19:34:15 2010 +0000
@@ -0,0 +1,198 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE html PUBLIC '-//W3C//DTD XHTML 1.0 Strict//EN'
+'http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd'>
+<html><head>
+<title>eric5.Cooperation.ChatWidget</title>
+<style>
+body {
+    background:white;
+    margin: 0em 1em 10em 1em;
+    color: black;
+}
+
+h1 { color: white; background: #4FA4FF; }
+h2 { color: white; background: #4FA4FF; }
+h3 { color: white; background: #00557F; }
+h4 { color: white; background: #00557F; }
+    
+a { color: #AA5500; }
+
+</style>
+</head>
+<body><a NAME="top" ID="top"></a>
+<h1>eric5.Cooperation.ChatWidget</h1>
+<p>
+Module implementing the chat dialog.
+</p>
+<h3>Global Attributes</h3>
+<table>
+<tr><td>None</td></tr>
+</table>
+<h3>Classes</h3>
+<table>
+<tr>
+<td><a href="#ChatWidget">ChatWidget</a></td>
+<td>Class implementing the chat dialog.</td>
+</tr>
+</table>
+<h3>Functions</h3>
+<table>
+<tr><td>None</td></tr>
+</table>
+<hr /><hr />
+<a NAME="ChatWidget" ID="ChatWidget"></a>
+<h2>ChatWidget</h2>
+<p>
+    Class implementing the chat dialog.
+</p>
+<h3>Derived from</h3>
+QWidget, Ui_ChatWidget
+<h3>Class Attributes</h3>
+<table>
+<tr><td>None</td></tr>
+</table>
+<h3>Methods</h3>
+<table>
+<tr>
+<td><a href="#ChatWidget.__init__">ChatWidget</a></td>
+<td>Constructor</td>
+</tr><tr>
+<td><a href="#ChatWidget.__handleMessage">__handleMessage</a></td>
+<td>Private slot handling the Return key pressed in the message edit.</td>
+</tr><tr>
+<td><a href="#ChatWidget.__initialConnectionRefused">__initialConnectionRefused</a></td>
+<td>Private slot to handle the refusal of the initial connection.</td>
+</tr><tr>
+<td><a href="#ChatWidget.__newParticipant">__newParticipant</a></td>
+<td>Private slot handling a new participant joining.</td>
+</tr><tr>
+<td><a href="#ChatWidget.__participantLeft">__participantLeft</a></td>
+<td>Private slot handling a participant leaving the session.</td>
+</tr><tr>
+<td><a href="#ChatWidget.__setConnected">__setConnected</a></td>
+<td>Private slot to set the connected state.</td>
+</tr><tr>
+<td><a href="#ChatWidget.__showErrorMessage">__showErrorMessage</a></td>
+<td>Private slot to show an error message.</td>
+</tr><tr>
+<td><a href="#ChatWidget.appendMessage">appendMessage</a></td>
+<td>Public slot to append a message to the display.</td>
+</tr><tr>
+<td><a href="#ChatWidget.on_connectButton_clicked">on_connectButton_clicked</a></td>
+<td>Private slot initiating the connection.</td>
+</tr><tr>
+<td><a href="#ChatWidget.on_hostEdit_textChanged">on_hostEdit_textChanged</a></td>
+<td>Private slot handling the entry of a host to connect to.</td>
+</tr><tr>
+<td><a href="#ChatWidget.on_serverButton_clicked">on_serverButton_clicked</a></td>
+<td>Private slot to start the server.</td>
+</tr><tr>
+<td><a href="#ChatWidget.preferencesChanged">preferencesChanged</a></td>
+<td>Public slot to handle a change of preferences.</td>
+</tr>
+</table>
+<a NAME="ChatWidget.__init__" ID="ChatWidget.__init__"></a>
+<h4>ChatWidget (Constructor)</h4>
+<b>ChatWidget</b>(<i>port = -1, parent = None</i>)
+<p>
+        Constructor
+</p><dl>
+<dt><i>port</i></dt>
+<dd>
+port to be used for the cooperation server (integer)
+</dd><dt><i>parent</i></dt>
+<dd>
+reference to the parent widget (QWidget)
+</dd>
+</dl><a NAME="ChatWidget.__handleMessage" ID="ChatWidget.__handleMessage"></a>
+<h4>ChatWidget.__handleMessage</h4>
+<b>__handleMessage</b>(<i></i>)
+<p>
+        Private slot handling the Return key pressed in the message edit.
+</p><a NAME="ChatWidget.__initialConnectionRefused" ID="ChatWidget.__initialConnectionRefused"></a>
+<h4>ChatWidget.__initialConnectionRefused</h4>
+<b>__initialConnectionRefused</b>(<i></i>)
+<p>
+        Private slot to handle the refusal of the initial connection.
+</p><a NAME="ChatWidget.__newParticipant" ID="ChatWidget.__newParticipant"></a>
+<h4>ChatWidget.__newParticipant</h4>
+<b>__newParticipant</b>(<i>nick</i>)
+<p>
+        Private slot handling a new participant joining.
+</p><dl>
+<dt><i>nick</i></dt>
+<dd>
+nick name of the new participant (string)
+</dd>
+</dl><a NAME="ChatWidget.__participantLeft" ID="ChatWidget.__participantLeft"></a>
+<h4>ChatWidget.__participantLeft</h4>
+<b>__participantLeft</b>(<i>nick</i>)
+<p>
+        Private slot handling a participant leaving the session.
+</p><dl>
+<dt><i>nick</i></dt>
+<dd>
+nick name of the participant (string)
+</dd>
+</dl><a NAME="ChatWidget.__setConnected" ID="ChatWidget.__setConnected"></a>
+<h4>ChatWidget.__setConnected</h4>
+<b>__setConnected</b>(<i>connected</i>)
+<p>
+        Private slot to set the connected state.
+</p><dl>
+<dt><i>connected</i></dt>
+<dd>
+new connected state (boolean)
+</dd>
+</dl><a NAME="ChatWidget.__showErrorMessage" ID="ChatWidget.__showErrorMessage"></a>
+<h4>ChatWidget.__showErrorMessage</h4>
+<b>__showErrorMessage</b>(<i>message</i>)
+<p>
+        Private slot to show an error message.
+</p><dl>
+<dt><i>message</i></dt>
+<dd>
+error message to show (string)
+</dd>
+</dl><a NAME="ChatWidget.appendMessage" ID="ChatWidget.appendMessage"></a>
+<h4>ChatWidget.appendMessage</h4>
+<b>appendMessage</b>(<i>from_, message</i>)
+<p>
+        Public slot to append a message to the display.
+</p><dl>
+<dt><i>from_</i></dt>
+<dd>
+originator of the message (string)
+</dd><dt><i>message</i></dt>
+<dd>
+message to be appended (string)
+</dd>
+</dl><a NAME="ChatWidget.on_connectButton_clicked" ID="ChatWidget.on_connectButton_clicked"></a>
+<h4>ChatWidget.on_connectButton_clicked</h4>
+<b>on_connectButton_clicked</b>(<i></i>)
+<p>
+        Private slot initiating the connection.
+</p><a NAME="ChatWidget.on_hostEdit_textChanged" ID="ChatWidget.on_hostEdit_textChanged"></a>
+<h4>ChatWidget.on_hostEdit_textChanged</h4>
+<b>on_hostEdit_textChanged</b>(<i>host</i>)
+<p>
+        Private slot handling the entry of a host to connect to.
+</p><dl>
+<dt><i>host</i></dt>
+<dd>
+host to connect to (string)
+</dd>
+</dl><a NAME="ChatWidget.on_serverButton_clicked" ID="ChatWidget.on_serverButton_clicked"></a>
+<h4>ChatWidget.on_serverButton_clicked</h4>
+<b>on_serverButton_clicked</b>(<i></i>)
+<p>
+        Private slot to start the server.
+</p><a NAME="ChatWidget.preferencesChanged" ID="ChatWidget.preferencesChanged"></a>
+<h4>ChatWidget.preferencesChanged</h4>
+<b>preferencesChanged</b>(<i></i>)
+<p>
+        Public slot to handle a change of preferences.
+</p>
+<div align="right"><a href="#top">Up</a></div>
+<hr />
+</body></html>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Documentation/Source/eric5.Cooperation.Connection.html	Sun Mar 21 19:34:15 2010 +0000
@@ -0,0 +1,271 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE html PUBLIC '-//W3C//DTD XHTML 1.0 Strict//EN'
+'http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd'>
+<html><head>
+<title>eric5.Cooperation.Connection</title>
+<style>
+body {
+    background:white;
+    margin: 0em 1em 10em 1em;
+    color: black;
+}
+
+h1 { color: white; background: #4FA4FF; }
+h2 { color: white; background: #4FA4FF; }
+h3 { color: white; background: #00557F; }
+h4 { color: white; background: #00557F; }
+    
+a { color: #AA5500; }
+
+</style>
+</head>
+<body><a NAME="top" ID="top"></a>
+<h1>eric5.Cooperation.Connection</h1>
+<p>
+Module implementing a class representing a peer connection.
+</p>
+<h3>Global Attributes</h3>
+<table>
+<tr><td>MaxBufferSize</td></tr><tr><td>PingInterval</td></tr><tr><td>PongTimeout</td></tr><tr><td>SeparatorToken</td></tr><tr><td>TransferTimeout</td></tr>
+</table>
+<h3>Classes</h3>
+<table>
+<tr>
+<td><a href="#Connection">Connection</a></td>
+<td>Class representing a peer connection.</td>
+</tr>
+</table>
+<h3>Functions</h3>
+<table>
+<tr><td>None</td></tr>
+</table>
+<hr /><hr />
+<a NAME="Connection" ID="Connection"></a>
+<h2>Connection</h2>
+<p>
+    Class representing a peer connection.
+</p><h4>Signals</h4>
+<dl>
+<dt>getParticipants()</dt>
+<dd>
+emitted after a get participants message has arrived
+</dd><dt>newMessage(user, message)</dt>
+<dd>
+emitted after a new message has
+            arrived (string, string)
+</dd><dt>participants(participants)</dt>
+<dd>
+emitted after the list of participants has
+            arrived (list of strings of "host:port")
+</dd><dt>readyForUse()</dt>
+<dd>
+emitted when the connection is ready for use
+</dd>
+</dl>
+<h3>Derived from</h3>
+QTcpSocket
+<h3>Class Attributes</h3>
+<table>
+<tr><td>GetParticipants</td></tr><tr><td>Greeting</td></tr><tr><td>Participants</td></tr><tr><td>Ping</td></tr><tr><td>PlainText</td></tr><tr><td>Pong</td></tr><tr><td>ProtocolGetParticipants</td></tr><tr><td>ProtocolGreeting</td></tr><tr><td>ProtocolMessage</td></tr><tr><td>ProtocolParticipants</td></tr><tr><td>ProtocolPing</td></tr><tr><td>ProtocolPong</td></tr><tr><td>ReadingGreeting</td></tr><tr><td>ReadyForUse</td></tr><tr><td>Undefined</td></tr><tr><td>WaitingForGreeting</td></tr><tr><td>getParticipants</td></tr><tr><td>newMessage</td></tr><tr><td>participants</td></tr><tr><td>readyForUse</td></tr>
+</table>
+<h3>Methods</h3>
+<table>
+<tr>
+<td><a href="#Connection.__init__">Connection</a></td>
+<td>Constructor</td>
+</tr><tr>
+<td><a href="#Connection.__dataLengthForCurrentDataType">__dataLengthForCurrentDataType</a></td>
+<td>Private method to get the data length for the current data type.</td>
+</tr><tr>
+<td><a href="#Connection.__hasEnoughData">__hasEnoughData</a></td>
+<td>Private method to check, if enough data is available.</td>
+</tr><tr>
+<td><a href="#Connection.__processData">__processData</a></td>
+<td>Private method to process the received data.</td>
+</tr><tr>
+<td><a href="#Connection.__processReadyRead">__processReadyRead</a></td>
+<td>Private slot to handle the readyRead signal.</td>
+</tr><tr>
+<td><a href="#Connection.__readDataIntoBuffer">__readDataIntoBuffer</a></td>
+<td>Private method to read some data into the buffer.</td>
+</tr><tr>
+<td><a href="#Connection.__readProtocolHeader">__readProtocolHeader</a></td>
+<td>Private method to read the protocol header.</td>
+</tr><tr>
+<td><a href="#Connection.__sendGreetingMessage">__sendGreetingMessage</a></td>
+<td>Private slot to send a greeting message.</td>
+</tr><tr>
+<td><a href="#Connection.__sendPing">__sendPing</a></td>
+<td>Private slot to send a ping message.</td>
+</tr><tr>
+<td><a href="#Connection.name">name</a></td>
+<td>Public method to get the connection name.</td>
+</tr><tr>
+<td><a href="#Connection.sendGetParticipants">sendGetParticipants</a></td>
+<td>Public method to request a list of participants.</td>
+</tr><tr>
+<td><a href="#Connection.sendMessage">sendMessage</a></td>
+<td>Public method to send a message.</td>
+</tr><tr>
+<td><a href="#Connection.sendParticipants">sendParticipants</a></td>
+<td>Public method to send the list of participants.</td>
+</tr><tr>
+<td><a href="#Connection.serverPort">serverPort</a></td>
+<td>Public method to get the server port.</td>
+</tr><tr>
+<td><a href="#Connection.setGreetingMessage">setGreetingMessage</a></td>
+<td>Public method to set the greeting message.</td>
+</tr><tr>
+<td><a href="#Connection.timerEvent">timerEvent</a></td>
+<td>Protected method to handle timer events.</td>
+</tr>
+</table>
+<a NAME="Connection.__init__" ID="Connection.__init__"></a>
+<h4>Connection (Constructor)</h4>
+<b>Connection</b>(<i>parent = None</i>)
+<p>
+        Constructor
+</p><dl>
+<dt><i>parent</i></dt>
+<dd>
+referenec to the parent object (QObject)
+</dd>
+</dl><a NAME="Connection.__dataLengthForCurrentDataType" ID="Connection.__dataLengthForCurrentDataType"></a>
+<h4>Connection.__dataLengthForCurrentDataType</h4>
+<b>__dataLengthForCurrentDataType</b>(<i></i>)
+<p>
+        Private method to get the data length for the current data type.
+</p><dl>
+<dt>Returns:</dt>
+<dd>
+data length (integer)
+</dd>
+</dl><a NAME="Connection.__hasEnoughData" ID="Connection.__hasEnoughData"></a>
+<h4>Connection.__hasEnoughData</h4>
+<b>__hasEnoughData</b>(<i></i>)
+<p>
+        Private method to check, if enough data is available.
+</p><dl>
+<dt>Returns:</dt>
+<dd>
+flag indicating availability of enough data (boolean)
+</dd>
+</dl><a NAME="Connection.__processData" ID="Connection.__processData"></a>
+<h4>Connection.__processData</h4>
+<b>__processData</b>(<i></i>)
+<p>
+        Private method to process the received data.
+</p><a NAME="Connection.__processReadyRead" ID="Connection.__processReadyRead"></a>
+<h4>Connection.__processReadyRead</h4>
+<b>__processReadyRead</b>(<i></i>)
+<p>
+        Private slot to handle the readyRead signal.
+</p><a NAME="Connection.__readDataIntoBuffer" ID="Connection.__readDataIntoBuffer"></a>
+<h4>Connection.__readDataIntoBuffer</h4>
+<b>__readDataIntoBuffer</b>(<i>maxSize = MaxBufferSize</i>)
+<p>
+        Private method to read some data into the buffer.
+</p><dl>
+<dt><i>maxSize</i></dt>
+<dd>
+maximum size of data to read (integer)
+</dd>
+</dl><dl>
+<dt>Returns:</dt>
+<dd>
+size of data read (integer)
+</dd>
+</dl><a NAME="Connection.__readProtocolHeader" ID="Connection.__readProtocolHeader"></a>
+<h4>Connection.__readProtocolHeader</h4>
+<b>__readProtocolHeader</b>(<i></i>)
+<p>
+        Private method to read the protocol header.
+</p><dl>
+<dt>Returns:</dt>
+<dd>
+flag indicating a successful read (boolean)
+</dd>
+</dl><a NAME="Connection.__sendGreetingMessage" ID="Connection.__sendGreetingMessage"></a>
+<h4>Connection.__sendGreetingMessage</h4>
+<b>__sendGreetingMessage</b>(<i></i>)
+<p>
+        Private slot to send a greeting message.
+</p><a NAME="Connection.__sendPing" ID="Connection.__sendPing"></a>
+<h4>Connection.__sendPing</h4>
+<b>__sendPing</b>(<i></i>)
+<p>
+        Private slot to send a ping message.
+</p><a NAME="Connection.name" ID="Connection.name"></a>
+<h4>Connection.name</h4>
+<b>name</b>(<i></i>)
+<p>
+        Public method to get the connection name.
+</p><dl>
+<dt>Returns:</dt>
+<dd>
+connection name (string)
+</dd>
+</dl><a NAME="Connection.sendGetParticipants" ID="Connection.sendGetParticipants"></a>
+<h4>Connection.sendGetParticipants</h4>
+<b>sendGetParticipants</b>(<i></i>)
+<p>
+        Public method to request a list of participants.
+</p><a NAME="Connection.sendMessage" ID="Connection.sendMessage"></a>
+<h4>Connection.sendMessage</h4>
+<b>sendMessage</b>(<i>message</i>)
+<p>
+        Public method to send a message.
+</p><dl>
+<dt><i>message</i></dt>
+<dd>
+message to be sent (string)
+</dd>
+</dl><dl>
+<dt>Returns:</dt>
+<dd>
+flag indicating a successful send (boolean)
+</dd>
+</dl><a NAME="Connection.sendParticipants" ID="Connection.sendParticipants"></a>
+<h4>Connection.sendParticipants</h4>
+<b>sendParticipants</b>(<i>participants</i>)
+<p>
+        Public method to send the list of participants.
+</p><dl>
+<dt><i>participants</i></dt>
+<dd>
+list of participants (list of strings of "host:port")
+</dd>
+</dl><a NAME="Connection.serverPort" ID="Connection.serverPort"></a>
+<h4>Connection.serverPort</h4>
+<b>serverPort</b>(<i></i>)
+<p>
+        Public method to get the server port.
+</p><dl>
+<dt>Returns:</dt>
+<dd>
+server port (integer)
+</dd>
+</dl><a NAME="Connection.setGreetingMessage" ID="Connection.setGreetingMessage"></a>
+<h4>Connection.setGreetingMessage</h4>
+<b>setGreetingMessage</b>(<i>message, serverPort</i>)
+<p>
+        Public method to set the greeting message.
+</p><dl>
+<dt><i>message</i></dt>
+<dd>
+greeting message (string)
+</dd>
+</dl><a NAME="Connection.timerEvent" ID="Connection.timerEvent"></a>
+<h4>Connection.timerEvent</h4>
+<b>timerEvent</b>(<i>evt</i>)
+<p>
+        Protected method to handle timer events.
+</p><dl>
+<dt><i>evt</i></dt>
+<dd>
+reference to the timer event (QTimerEvent)
+</dd>
+</dl>
+<div align="right"><a href="#top">Up</a></div>
+<hr />
+</body></html>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Documentation/Source/eric5.Cooperation.CooperationClient.html	Sun Mar 21 19:34:15 2010 +0000
@@ -0,0 +1,261 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE html PUBLIC '-//W3C//DTD XHTML 1.0 Strict//EN'
+'http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd'>
+<html><head>
+<title>eric5.Cooperation.CooperationClient</title>
+<style>
+body {
+    background:white;
+    margin: 0em 1em 10em 1em;
+    color: black;
+}
+
+h1 { color: white; background: #4FA4FF; }
+h2 { color: white; background: #4FA4FF; }
+h3 { color: white; background: #00557F; }
+h4 { color: white; background: #00557F; }
+    
+a { color: #AA5500; }
+
+</style>
+</head>
+<body><a NAME="top" ID="top"></a>
+<h1>eric5.Cooperation.CooperationClient</h1>
+<p>
+Module implementing the client of the cooperation package.
+</p>
+<h3>Global Attributes</h3>
+<table>
+<tr><td>None</td></tr>
+</table>
+<h3>Classes</h3>
+<table>
+<tr>
+<td><a href="#CooperationClient">CooperationClient</a></td>
+<td>Class implementing the client of the cooperation package.</td>
+</tr>
+</table>
+<h3>Functions</h3>
+<table>
+<tr><td>None</td></tr>
+</table>
+<hr /><hr />
+<a NAME="CooperationClient" ID="CooperationClient"></a>
+<h2>CooperationClient</h2>
+<p>
+    Class implementing the client of the cooperation package.
+</p><h4>Signals</h4>
+<dl>
+<dt>cannotConnect()</dt>
+<dd>
+emitted, if the initial connection fails
+</dd><dt>connectionError(message)</dt>
+<dd>
+emitted when a connection error occurs (string)
+</dd><dt>newMessage(user, message)</dt>
+<dd>
+emitted after a new message has
+            arrived (string, string)
+</dd><dt>newParticipant(nickname)</dt>
+<dd>
+emitted after a new participant joined (string)
+</dd><dt>participantLeft(nickname)</dt>
+<dd>
+emitted after a participant left (string)
+</dd>
+</dl>
+<h3>Derived from</h3>
+QObject
+<h3>Class Attributes</h3>
+<table>
+<tr><td>cannotConnect</td></tr><tr><td>connectionError</td></tr><tr><td>newMessage</td></tr><tr><td>newParticipant</td></tr><tr><td>participantLeft</td></tr>
+</table>
+<h3>Methods</h3>
+<table>
+<tr>
+<td><a href="#CooperationClient.__init__">CooperationClient</a></td>
+<td>Constructor</td>
+</tr><tr>
+<td><a href="#CooperationClient.__connectionError">__connectionError</a></td>
+<td>Private slot to handle a connection error.</td>
+</tr><tr>
+<td><a href="#CooperationClient.__disconnected">__disconnected</a></td>
+<td>Private slot to handle the disconnection of a chat client.</td>
+</tr><tr>
+<td><a href="#CooperationClient.__getParticipants">__getParticipants</a></td>
+<td>Private slot to handle the request for a list of participants.</td>
+</tr><tr>
+<td><a href="#CooperationClient.__newConnection">__newConnection</a></td>
+<td>Private slot to handle a new connection.</td>
+</tr><tr>
+<td><a href="#CooperationClient.__processParticipants">__processParticipants</a></td>
+<td>Private slot to handle the receipt of a list of participants.</td>
+</tr><tr>
+<td><a href="#CooperationClient.__readyForUse">__readyForUse</a></td>
+<td>Private slot to handle a connection getting ready for use.</td>
+</tr><tr>
+<td><a href="#CooperationClient.__removeConnection">__removeConnection</a></td>
+<td>Private method to remove a connection.</td>
+</tr><tr>
+<td><a href="#CooperationClient.connectToHost">connectToHost</a></td>
+<td>Public method to connect to a host.</td>
+</tr><tr>
+<td><a href="#CooperationClient.disconnectConnections">disconnectConnections</a></td>
+<td>Public slot to disconnect from the chat network.</td>
+</tr><tr>
+<td><a href="#CooperationClient.hasConnection">hasConnection</a></td>
+<td>Public method to check for an existing connection.</td>
+</tr><tr>
+<td><a href="#CooperationClient.hasConnections">hasConnections</a></td>
+<td>Public method to check, if there are any connections established.</td>
+</tr><tr>
+<td><a href="#CooperationClient.nickName">nickName</a></td>
+<td>Public method to get the nick name.</td>
+</tr><tr>
+<td><a href="#CooperationClient.sendMessage">sendMessage</a></td>
+<td>Public method to send a message.</td>
+</tr><tr>
+<td><a href="#CooperationClient.server">server</a></td>
+<td>Public method to get a reference to the server.</td>
+</tr>
+</table>
+<a NAME="CooperationClient.__init__" ID="CooperationClient.__init__"></a>
+<h4>CooperationClient (Constructor)</h4>
+<b>CooperationClient</b>(<i></i>)
+<p>
+        Constructor
+</p><a NAME="CooperationClient.__connectionError" ID="CooperationClient.__connectionError"></a>
+<h4>CooperationClient.__connectionError</h4>
+<b>__connectionError</b>(<i>socketError</i>)
+<p>
+        Private slot to handle a connection error.
+</p><dl>
+<dt><i>socketError</i></dt>
+<dd>
+reference to the error object (QAbstractSocket.SocketError)
+</dd>
+</dl><a NAME="CooperationClient.__disconnected" ID="CooperationClient.__disconnected"></a>
+<h4>CooperationClient.__disconnected</h4>
+<b>__disconnected</b>(<i></i>)
+<p>
+        Private slot to handle the disconnection of a chat client.
+</p><a NAME="CooperationClient.__getParticipants" ID="CooperationClient.__getParticipants"></a>
+<h4>CooperationClient.__getParticipants</h4>
+<b>__getParticipants</b>(<i></i>)
+<p>
+        Private slot to handle the request for a list of participants.
+</p><a NAME="CooperationClient.__newConnection" ID="CooperationClient.__newConnection"></a>
+<h4>CooperationClient.__newConnection</h4>
+<b>__newConnection</b>(<i>connection</i>)
+<p>
+        Private slot to handle a new connection.
+</p><dl>
+<dt><i>connection</i></dt>
+<dd>
+reference to the new connection (Connection)
+</dd>
+</dl><a NAME="CooperationClient.__processParticipants" ID="CooperationClient.__processParticipants"></a>
+<h4>CooperationClient.__processParticipants</h4>
+<b>__processParticipants</b>(<i>participants</i>)
+<p>
+        Private slot to handle the receipt of a list of participants.
+</p><dl>
+<dt><i>participants</i></dt>
+<dd>
+list of participants (list of strings of "host:port")
+</dd>
+</dl><a NAME="CooperationClient.__readyForUse" ID="CooperationClient.__readyForUse"></a>
+<h4>CooperationClient.__readyForUse</h4>
+<b>__readyForUse</b>(<i></i>)
+<p>
+        Private slot to handle a connection getting ready for use.
+</p><a NAME="CooperationClient.__removeConnection" ID="CooperationClient.__removeConnection"></a>
+<h4>CooperationClient.__removeConnection</h4>
+<b>__removeConnection</b>(<i>connection</i>)
+<p>
+        Private method to remove a connection.
+</p><dl>
+<dt><i>connection</i></dt>
+<dd>
+reference to the connection to be removed (Connection)
+</dd>
+</dl><a NAME="CooperationClient.connectToHost" ID="CooperationClient.connectToHost"></a>
+<h4>CooperationClient.connectToHost</h4>
+<b>connectToHost</b>(<i>host, port</i>)
+<p>
+        Public method to connect to a host.
+</p><dl>
+<dt><i>host</i></dt>
+<dd>
+host to connect to (string)
+</dd><dt><i>port</i></dt>
+<dd>
+port to connect to (integer)
+</dd>
+</dl><a NAME="CooperationClient.disconnectConnections" ID="CooperationClient.disconnectConnections"></a>
+<h4>CooperationClient.disconnectConnections</h4>
+<b>disconnectConnections</b>(<i></i>)
+<p>
+        Public slot to disconnect from the chat network.
+</p><a NAME="CooperationClient.hasConnection" ID="CooperationClient.hasConnection"></a>
+<h4>CooperationClient.hasConnection</h4>
+<b>hasConnection</b>(<i>senderIp, senderPort = -1</i>)
+<p>
+        Public method to check for an existing connection.
+</p><dl>
+<dt><i>senderIp</i></dt>
+<dd>
+address of the sender (QHostAddress)
+</dd><dt><i>senderPort</i></dt>
+<dd>
+port of the sender (integer)
+</dd>
+</dl><dl>
+<dt>Returns:</dt>
+<dd>
+flag indicating an existing connection (boolean)
+</dd>
+</dl><a NAME="CooperationClient.hasConnections" ID="CooperationClient.hasConnections"></a>
+<h4>CooperationClient.hasConnections</h4>
+<b>hasConnections</b>(<i></i>)
+<p>
+        Public method to check, if there are any connections established.
+</p><dl>
+<dt>Returns:</dt>
+<dd>
+flag indicating the presence of connections (boolean)
+</dd>
+</dl><a NAME="CooperationClient.nickName" ID="CooperationClient.nickName"></a>
+<h4>CooperationClient.nickName</h4>
+<b>nickName</b>(<i></i>)
+<p>
+        Public method to get the nick name.
+</p><dl>
+<dt>Returns:</dt>
+<dd>
+nick name (string)
+</dd>
+</dl><a NAME="CooperationClient.sendMessage" ID="CooperationClient.sendMessage"></a>
+<h4>CooperationClient.sendMessage</h4>
+<b>sendMessage</b>(<i>message</i>)
+<p>
+        Public method to send a message.
+</p><dl>
+<dt><i>message</i></dt>
+<dd>
+message to be sent (string)
+</dd>
+</dl><a NAME="CooperationClient.server" ID="CooperationClient.server"></a>
+<h4>CooperationClient.server</h4>
+<b>server</b>(<i></i>)
+<p>
+        Public method to get a reference to the server.
+</p><dl>
+<dt>Returns:</dt>
+<dd>
+reference to the server object (CooperationServer)
+</dd>
+</dl>
+<div align="right"><a href="#top">Up</a></div>
+<hr />
+</body></html>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Documentation/Source/eric5.Cooperation.CooperationServer.html	Sun Mar 21 19:34:15 2010 +0000
@@ -0,0 +1,113 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE html PUBLIC '-//W3C//DTD XHTML 1.0 Strict//EN'
+'http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd'>
+<html><head>
+<title>eric5.Cooperation.CooperationServer</title>
+<style>
+body {
+    background:white;
+    margin: 0em 1em 10em 1em;
+    color: black;
+}
+
+h1 { color: white; background: #4FA4FF; }
+h2 { color: white; background: #4FA4FF; }
+h3 { color: white; background: #00557F; }
+h4 { color: white; background: #00557F; }
+    
+a { color: #AA5500; }
+
+</style>
+</head>
+<body><a NAME="top" ID="top"></a>
+<h1>eric5.Cooperation.CooperationServer</h1>
+<p>
+Module implementing the cooperation server.
+</p>
+<h3>Global Attributes</h3>
+<table>
+<tr><td>None</td></tr>
+</table>
+<h3>Classes</h3>
+<table>
+<tr>
+<td><a href="#CooperationServer">CooperationServer</a></td>
+<td>Class implementing the cooperation server.</td>
+</tr>
+</table>
+<h3>Functions</h3>
+<table>
+<tr><td>None</td></tr>
+</table>
+<hr /><hr />
+<a NAME="CooperationServer" ID="CooperationServer"></a>
+<h2>CooperationServer</h2>
+<p>
+    Class implementing the cooperation server.
+</p><h4>Signals</h4>
+<dl>
+<dt>newConnection(connection)</dt>
+<dd>
+emitted after a new connection was received
+            (Connection)
+</dd>
+</dl>
+<h3>Derived from</h3>
+QTcpServer
+<h3>Class Attributes</h3>
+<table>
+<tr><td>newConnection</td></tr>
+</table>
+<h3>Methods</h3>
+<table>
+<tr>
+<td><a href="#CooperationServer.__init__">CooperationServer</a></td>
+<td>Constructor</td>
+</tr><tr>
+<td><a href="#CooperationServer.incomingConnection">incomingConnection</a></td>
+<td>Protected method handling an incoming connection.</td>
+</tr><tr>
+<td><a href="#CooperationServer.startListening">startListening</a></td>
+<td>Public method to start listening for new connections.</td>
+</tr>
+</table>
+<a NAME="CooperationServer.__init__" ID="CooperationServer.__init__"></a>
+<h4>CooperationServer (Constructor)</h4>
+<b>CooperationServer</b>(<i>parent = None</i>)
+<p>
+        Constructor
+</p><dl>
+<dt><i>parent</i></dt>
+<dd>
+reference to the parent object (QObject)
+</dd>
+</dl><a NAME="CooperationServer.incomingConnection" ID="CooperationServer.incomingConnection"></a>
+<h4>CooperationServer.incomingConnection</h4>
+<b>incomingConnection</b>(<i>socketDescriptor</i>)
+<p>
+        Protected method handling an incoming connection.
+</p><dl>
+<dt><i>socketDescriptor</i></dt>
+<dd>
+native socket descriptor (integer)
+</dd>
+</dl><a NAME="CooperationServer.startListening" ID="CooperationServer.startListening"></a>
+<h4>CooperationServer.startListening</h4>
+<b>startListening</b>(<i>port = -1</i>)
+<p>
+        Public method to start listening for new connections.
+</p><dl>
+<dt><i>port</i></dt>
+<dd>
+port to listen on (integer)
+</dd>
+</dl><dl>
+<dt>Returns:</dt>
+<dd>
+tuple giving a flag indicating success (boolean) and
+            the port the server listens on
+</dd>
+</dl>
+<div align="right"><a href="#top">Up</a></div>
+<hr />
+</body></html>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Documentation/Source/eric5.Preferences.ConfigurationPages.CooperationPage.html	Sun Mar 21 19:34:15 2010 +0000
@@ -0,0 +1,93 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE html PUBLIC '-//W3C//DTD XHTML 1.0 Strict//EN'
+'http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd'>
+<html><head>
+<title>eric5.Preferences.ConfigurationPages.CooperationPage</title>
+<style>
+body {
+    background:white;
+    margin: 0em 1em 10em 1em;
+    color: black;
+}
+
+h1 { color: white; background: #4FA4FF; }
+h2 { color: white; background: #4FA4FF; }
+h3 { color: white; background: #00557F; }
+h4 { color: white; background: #00557F; }
+    
+a { color: #AA5500; }
+
+</style>
+</head>
+<body><a NAME="top" ID="top"></a>
+<h1>eric5.Preferences.ConfigurationPages.CooperationPage</h1>
+<p>
+Module implementing the Cooperation configuration page.
+</p>
+<h3>Global Attributes</h3>
+<table>
+<tr><td>None</td></tr>
+</table>
+<h3>Classes</h3>
+<table>
+<tr>
+<td><a href="#CooperationPage">CooperationPage</a></td>
+<td>Class implementing the Cooperation configuration page.</td>
+</tr>
+</table>
+<h3>Functions</h3>
+<table>
+<tr>
+<td><a href="#create">create</a></td>
+<td>Module function to create the configuration page.</td>
+</tr>
+</table>
+<hr /><hr />
+<a NAME="CooperationPage" ID="CooperationPage"></a>
+<h2>CooperationPage</h2>
+<p>
+    Class implementing the Cooperation configuration page.
+</p>
+<h3>Derived from</h3>
+ConfigurationPageBase, Ui_CooperationPage
+<h3>Class Attributes</h3>
+<table>
+<tr><td>None</td></tr>
+</table>
+<h3>Methods</h3>
+<table>
+<tr>
+<td><a href="#CooperationPage.__init__">CooperationPage</a></td>
+<td>Constructor</td>
+</tr><tr>
+<td><a href="#CooperationPage.save">save</a></td>
+<td>Public slot to save the Cooperation configuration.</td>
+</tr>
+</table>
+<a NAME="CooperationPage.__init__" ID="CooperationPage.__init__"></a>
+<h4>CooperationPage (Constructor)</h4>
+<b>CooperationPage</b>(<i></i>)
+<p>
+        Constructor
+</p><a NAME="CooperationPage.save" ID="CooperationPage.save"></a>
+<h4>CooperationPage.save</h4>
+<b>save</b>(<i></i>)
+<p>
+        Public slot to save the Cooperation configuration.
+</p>
+<div align="right"><a href="#top">Up</a></div>
+<hr /><hr />
+<a NAME="create" ID="create"></a>
+<h2>create</h2>
+<b>create</b>(<i>dlg</i>)
+<p>
+    Module function to create the configuration page.
+</p><dl>
+<dt><i>dlg</i></dt>
+<dd>
+reference to the configuration dialog
+</dd>
+</dl>
+<div align="right"><a href="#top">Up</a></div>
+<hr />
+</body></html>
\ No newline at end of file
--- a/Documentation/Source/eric5.Preferences.__init__.html	Sat Mar 20 13:14:56 2010 +0000
+++ b/Documentation/Source/eric5.Preferences.__init__.html	Sun Mar 21 19:34:15 2010 +0000
@@ -50,6 +50,9 @@
 <td><a href="#exportPreferences">exportPreferences</a></td>
 <td>Module function to export the current preferences.</td>
 </tr><tr>
+<td><a href="#getCooperation">getCooperation</a></td>
+<td>Module function to retrieve the various Cooperation settings.</td>
+</tr><tr>
 <td><a href="#getCorba">getCorba</a></td>
 <td>Module function to retrieve the various corba settings.</td>
 </tr><tr>
@@ -194,6 +197,9 @@
 <td><a href="#saveToolGroups">saveToolGroups</a></td>
 <td>Module function to write the tool groups configuration.</td>
 </tr><tr>
+<td><a href="#setCooperation">setCooperation</a></td>
+<td>Module function to store the various Cooperation settings.</td>
+</tr><tr>
 <td><a href="#setCorba">setCorba</a></td>
 <td>Module function to store the various corba settings.</td>
 </tr><tr>
@@ -331,7 +337,7 @@
 object
 <h3>Class Attributes</h3>
 <table>
-<tr><td>corbaDefaults</td></tr><tr><td>debuggerDefaults</td></tr><tr><td>editorColourDefaults</td></tr><tr><td>editorDefaults</td></tr><tr><td>editorExporterDefaults</td></tr><tr><td>editorOtherFontsDefaults</td></tr><tr><td>editorTypingDefaults</td></tr><tr><td>fontFamily</td></tr><tr><td>fontSize</td></tr><tr><td>geometryDefaults</td></tr><tr><td>graphicsDefaults</td></tr><tr><td>helpDefaults</td></tr><tr><td>iconEditorDefaults</td></tr><tr><td>iconsDefaults</td></tr><tr><td>multiProjectDefaults</td></tr><tr><td>pluginManagerDefaults</td></tr><tr><td>printerDefaults</td></tr><tr><td>projectBrowserColourDefaults</td></tr><tr><td>projectBrowserFlagsDefaults</td></tr><tr><td>projectDefaults</td></tr><tr><td>py3flakesDefaults</td></tr><tr><td>qtDefaults</td></tr><tr><td>resetLayout</td></tr><tr><td>shellDefaults</td></tr><tr><td>sysDefaults</td></tr><tr><td>tasksDefaults</td></tr><tr><td>templatesDefaults</td></tr><tr><td>terminalDefaults</td></tr><tr><td>uiDefaults</td></tr><tr><td>userDefaults</td></tr><tr><td>varDefaults</td></tr><tr><td>vcsDefaults</td></tr><tr><td>viewProfilesLength</td></tr><tr><td>websettings</td></tr>
+<tr><td>cooperationDefaults</td></tr><tr><td>corbaDefaults</td></tr><tr><td>debuggerDefaults</td></tr><tr><td>editorColourDefaults</td></tr><tr><td>editorDefaults</td></tr><tr><td>editorExporterDefaults</td></tr><tr><td>editorOtherFontsDefaults</td></tr><tr><td>editorTypingDefaults</td></tr><tr><td>fontFamily</td></tr><tr><td>fontSize</td></tr><tr><td>geometryDefaults</td></tr><tr><td>graphicsDefaults</td></tr><tr><td>helpDefaults</td></tr><tr><td>iconEditorDefaults</td></tr><tr><td>iconsDefaults</td></tr><tr><td>multiProjectDefaults</td></tr><tr><td>pluginManagerDefaults</td></tr><tr><td>printerDefaults</td></tr><tr><td>projectBrowserColourDefaults</td></tr><tr><td>projectBrowserFlagsDefaults</td></tr><tr><td>projectDefaults</td></tr><tr><td>py3flakesDefaults</td></tr><tr><td>qtDefaults</td></tr><tr><td>resetLayout</td></tr><tr><td>shellDefaults</td></tr><tr><td>sysDefaults</td></tr><tr><td>tasksDefaults</td></tr><tr><td>templatesDefaults</td></tr><tr><td>terminalDefaults</td></tr><tr><td>uiDefaults</td></tr><tr><td>userDefaults</td></tr><tr><td>varDefaults</td></tr><tr><td>vcsDefaults</td></tr><tr><td>viewProfilesLength</td></tr><tr><td>websettings</td></tr>
 </table>
 <h3>Methods</h3>
 <table>
@@ -353,6 +359,27 @@
 </dl>
 <div align="right"><a href="#top">Up</a></div>
 <hr /><hr />
+<a NAME="getCooperation" ID="getCooperation"></a>
+<h2>getCooperation</h2>
+<b>getCooperation</b>(<i>key, prefClass = Prefs</i>)
+<p>
+    Module function to retrieve the various Cooperation settings.
+</p><dl>
+<dt><i>key</i></dt>
+<dd>
+the key of the value to get
+</dd><dt><i>prefClass</i></dt>
+<dd>
+preferences class used as the storage area
+</dd>
+</dl><dl>
+<dt>Returns:</dt>
+<dd>
+the requested UI setting
+</dd>
+</dl>
+<div align="right"><a href="#top">Up</a></div>
+<hr /><hr />
 <a NAME="getCorba" ID="getCorba"></a>
 <h2>getCorba</h2>
 <b>getCorba</b>(<i>key, prefClass = Prefs</i>)
@@ -1278,6 +1305,25 @@
 </dl>
 <div align="right"><a href="#top">Up</a></div>
 <hr /><hr />
+<a NAME="setCooperation" ID="setCooperation"></a>
+<h2>setCooperation</h2>
+<b>setCooperation</b>(<i>key, value, prefClass = Prefs</i>)
+<p>
+    Module function to store the various Cooperation settings.
+</p><dl>
+<dt><i>key</i></dt>
+<dd>
+the key of the setting to be set
+</dd><dt><i>value</i></dt>
+<dd>
+the value to be set
+</dd><dt><i>prefClass</i></dt>
+<dd>
+preferences class used as the storage area
+</dd>
+</dl>
+<div align="right"><a href="#top">Up</a></div>
+<hr /><hr />
 <a NAME="setCorba" ID="setCorba"></a>
 <h2>setCorba</h2>
 <b>setCorba</b>(<i>key, value, prefClass = Prefs</i>)
--- a/Documentation/Source/eric5.UI.UserInterface.html	Sat Mar 20 13:14:56 2010 +0000
+++ b/Documentation/Source/eric5.UI.UserInterface.html	Sun Mar 21 19:34:15 2010 +0000
@@ -178,6 +178,9 @@
 <td><a href="#UserInterface.__activateBrowser">__activateBrowser</a></td>
 <td>Private slot to handle the activation of the file browser.</td>
 </tr><tr>
+<td><a href="#UserInterface.__activateCooperationViewer">__activateCooperationViewer</a></td>
+<td>Private slot to handle the activation of the cooperation window.</td>
+</tr><tr>
 <td><a href="#UserInterface.__activateDebugViewer">__activateDebugViewer</a></td>
 <td>Private slot to handle the activation of the debug viewer.</td>
 </tr><tr>
@@ -502,6 +505,9 @@
 <td><a href="#UserInterface.__toggleBrowser">__toggleBrowser</a></td>
 <td>Private slot to handle the toggle of the File Browser window.</td>
 </tr><tr>
+<td><a href="#UserInterface.__toggleCooperationViewer">__toggleCooperationViewer</a></td>
+<td>Private slot to handle the toggle of the cooperation window.</td>
+</tr><tr>
 <td><a href="#UserInterface.__toggleDebugViewer">__toggleDebugViewer</a></td>
 <td>Private slot to handle the toggle of the debug viewer.</td>
 </tr><tr>
@@ -755,6 +761,11 @@
 <b>__activateBrowser</b>(<i></i>)
 <p>
         Private slot to handle the activation of the file browser.
+</p><a NAME="UserInterface.__activateCooperationViewer" ID="UserInterface.__activateCooperationViewer"></a>
+<h4>UserInterface.__activateCooperationViewer</h4>
+<b>__activateCooperationViewer</b>(<i></i>)
+<p>
+        Private slot to handle the activation of the cooperation window.
 </p><a NAME="UserInterface.__activateDebugViewer" ID="UserInterface.__activateDebugViewer"></a>
 <h4>UserInterface.__activateDebugViewer</h4>
 <b>__activateDebugViewer</b>(<i></i>)
@@ -1524,6 +1535,11 @@
 <b>__toggleBrowser</b>(<i></i>)
 <p>
         Private slot to handle the toggle of the File Browser window.
+</p><a NAME="UserInterface.__toggleCooperationViewer" ID="UserInterface.__toggleCooperationViewer"></a>
+<h4>UserInterface.__toggleCooperationViewer</h4>
+<b>__toggleCooperationViewer</b>(<i></i>)
+<p>
+        Private slot to handle the toggle of the cooperation window.
 </p><a NAME="UserInterface.__toggleDebugViewer" ID="UserInterface.__toggleDebugViewer"></a>
 <h4>UserInterface.__toggleDebugViewer</h4>
 <b>__toggleDebugViewer</b>(<i></i>)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Documentation/Source/index-eric5.Cooperation.html	Sun Mar 21 19:34:15 2010 +0000
@@ -0,0 +1,45 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE html PUBLIC '-//W3C//DTD XHTML 1.0 Strict//EN'
+'http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd'>
+<html><head>
+<title>eric5.Cooperation</title>
+<style>
+body {
+    background:white;
+    margin: 0em 1em 10em 1em;
+    color: black;
+}
+
+h1 { color: white; background: #4FA4FF; }
+h2 { color: white; background: #4FA4FF; }
+h3 { color: white; background: #00557F; }
+h4 { color: white; background: #00557F; }
+    
+a { color: #AA5500; }
+
+</style>
+</head>
+<body>
+<h1>eric5.Cooperation</h1>
+<p>
+Package containing the modules dealing with cooperation.
+</p>
+
+
+<h3>Modules</h3>
+<table>
+<tr>
+<td><a href="eric5.Cooperation.ChatWidget.html">ChatWidget</a></td>
+<td>Module implementing the chat dialog.</td>
+</tr><tr>
+<td><a href="eric5.Cooperation.Connection.html">Connection</a></td>
+<td>Module implementing a class representing a peer connection.</td>
+</tr><tr>
+<td><a href="eric5.Cooperation.CooperationClient.html">CooperationClient</a></td>
+<td>Module implementing the client of the cooperation package.</td>
+</tr><tr>
+<td><a href="eric5.Cooperation.CooperationServer.html">CooperationServer</a></td>
+<td>Module implementing the cooperation server.</td>
+</tr>
+</table>
+</body></html>
\ No newline at end of file
--- a/Documentation/Source/index-eric5.Preferences.ConfigurationPages.html	Sat Mar 20 13:14:56 2010 +0000
+++ b/Documentation/Source/index-eric5.Preferences.ConfigurationPages.html	Sun Mar 21 19:34:15 2010 +0000
@@ -35,6 +35,9 @@
 <td><a href="eric5.Preferences.ConfigurationPages.ConfigurationPageBase.html">ConfigurationPageBase</a></td>
 <td>Module implementing the base class for all configuration pages.</td>
 </tr><tr>
+<td><a href="eric5.Preferences.ConfigurationPages.CooperationPage.html">CooperationPage</a></td>
+<td>Module implementing the Cooperation configuration page.</td>
+</tr><tr>
 <td><a href="eric5.Preferences.ConfigurationPages.CorbaPage.html">CorbaPage</a></td>
 <td>Module implementing the Corba configuration page.</td>
 </tr><tr>
--- a/Documentation/Source/index-eric5.html	Sat Mar 20 13:14:56 2010 +0000
+++ b/Documentation/Source/index-eric5.html	Sun Mar 21 19:34:15 2010 +0000
@@ -31,6 +31,9 @@
 <h3>Packages</h3>
 <table>
 <tr>
+<td><a href="index-eric5.Cooperation.html">Cooperation</a></td>
+<td>Package containing the modules dealing with cooperation.</td>
+</tr><tr>
 <td><a href="index-eric5.DataViews.html">DataViews</a></td>
 <td>Package containing modules for viewing various data.</td>
 </tr><tr>
--- a/Preferences/ConfigurationDialog.py	Sat Mar 20 13:14:56 2010 +0000
+++ b/Preferences/ConfigurationDialog.py	Sun Mar 21 19:34:15 2010 +0000
@@ -93,6 +93,9 @@
                 "applicationPage" : \
                     [self.trUtf8("Application"), "preferences-application.png",
                      "ApplicationPage", None, None],
+                "cooperationPage" : \
+                    [self.trUtf8("Cooperation"), "preferences-cooperation.png",
+                     "CooperationPage", None, None],
                 "corbaPage" : \
                     [self.trUtf8("CORBA"), "preferences-orbit.png",
                     "CorbaPage", None, None],
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Preferences/ConfigurationPages/CooperationPage.py	Sun Mar 21 19:34:15 2010 +0000
@@ -0,0 +1,57 @@
+# -*- coding: utf-8 -*-
+
+# Copyright (c) 2010 Detlev Offenbach <detlev@die-offenbachs.de>
+#
+
+"""
+Module implementing the Cooperation configuration page.
+"""
+
+from .ConfigurationPageBase import ConfigurationPageBase
+from .Ui_CooperationPage import Ui_CooperationPage
+
+import Preferences
+
+class CooperationPage(ConfigurationPageBase, Ui_CooperationPage):
+    """
+    Class implementing the Cooperation configuration page.
+    """
+    def __init__(self):
+        """
+        Constructor
+        """
+        ConfigurationPageBase.__init__(self)
+        self.setupUi(self)
+        self.setObjectName("CooperationPage")
+        
+        # set initial values
+        self.autostartCheckBox.setChecked(
+            Preferences.getCooperation("AutoStartServer"))
+        self.otherPortsCheckBox.setChecked(
+            Preferences.getCooperation("TryOtherPorts"))
+        self.serverPortSpin.setValue(
+            Preferences.getCooperation("ServerPort"))
+        self.portToTrySpin.setValue(
+            Preferences.getCooperation("MaxPortsToTry"))
+    
+    def save(self):
+        """
+        Public slot to save the Cooperation configuration.
+        """
+        Preferences.setCooperation("AutoStartServer", 
+            self.autostartCheckBox.isChecked())
+        Preferences.setCooperation("TryOtherPorts", 
+            self.otherPortsCheckBox.isChecked())
+        Preferences.setCooperation("ServerPort", 
+            self.serverPortSpin.value())
+        Preferences.setCooperation("MaxPortsToTry", 
+            self.portToTrySpin.value())
+    
+def create(dlg):
+    """
+    Module function to create the configuration page.
+    
+    @param dlg reference to the configuration dialog
+    """
+    page = CooperationPage()
+    return page
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Preferences/ConfigurationPages/CooperationPage.ui	Sun Mar 21 19:34:15 2010 +0000
@@ -0,0 +1,195 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ui version="4.0">
+ <class>CooperationPage</class>
+ <widget class="QWidget" name="CooperationPage">
+  <property name="geometry">
+   <rect>
+    <x>0</x>
+    <y>0</y>
+    <width>508</width>
+    <height>442</height>
+   </rect>
+  </property>
+  <property name="windowTitle">
+   <string/>
+  </property>
+  <layout class="QVBoxLayout" name="verticalLayout">
+   <item>
+    <widget class="QLabel" name="headerLabel">
+     <property name="text">
+      <string>&lt;b&gt;Configure cooperation settings&lt;/b&gt;</string>
+     </property>
+    </widget>
+   </item>
+   <item>
+    <widget class="Line" name="line11">
+     <property name="frameShape">
+      <enum>QFrame::HLine</enum>
+     </property>
+     <property name="frameShadow">
+      <enum>QFrame::Sunken</enum>
+     </property>
+     <property name="orientation">
+      <enum>Qt::Horizontal</enum>
+     </property>
+    </widget>
+   </item>
+   <item>
+    <layout class="QGridLayout" name="gridLayout">
+     <item row="0" column="0" colspan="3">
+      <widget class="QCheckBox" name="autostartCheckBox">
+       <property name="toolTip">
+        <string>Select to start the server automatically</string>
+       </property>
+       <property name="text">
+        <string>Start server automatically</string>
+       </property>
+      </widget>
+     </item>
+     <item row="1" column="0">
+      <widget class="QLabel" name="label">
+       <property name="text">
+        <string>Server Port:</string>
+       </property>
+      </widget>
+     </item>
+     <item row="1" column="1">
+      <widget class="QSpinBox" name="serverPortSpin">
+       <property name="toolTip">
+        <string>Enter the port number to listen on</string>
+       </property>
+       <property name="minimum">
+        <number>1025</number>
+       </property>
+       <property name="maximum">
+        <number>65535</number>
+       </property>
+       <property name="singleStep">
+        <number>1</number>
+       </property>
+       <property name="value">
+        <number>42000</number>
+       </property>
+      </widget>
+     </item>
+     <item row="1" column="2">
+      <spacer name="horizontalSpacer">
+       <property name="orientation">
+        <enum>Qt::Horizontal</enum>
+       </property>
+       <property name="sizeHint" stdset="0">
+        <size>
+         <width>40</width>
+         <height>20</height>
+        </size>
+       </property>
+      </spacer>
+     </item>
+     <item row="2" column="0" colspan="3">
+      <widget class="QCheckBox" name="otherPortsCheckBox">
+       <property name="toolTip">
+        <string>Select to incrementally try other ports for the server</string>
+       </property>
+       <property name="text">
+        <string>Try other ports for server</string>
+       </property>
+      </widget>
+     </item>
+     <item row="3" column="0">
+      <widget class="QLabel" name="label_2">
+       <property name="enabled">
+        <bool>false</bool>
+       </property>
+       <property name="text">
+        <string>No. ports to try:</string>
+       </property>
+      </widget>
+     </item>
+     <item row="3" column="1">
+      <widget class="QSpinBox" name="portToTrySpin">
+       <property name="enabled">
+        <bool>false</bool>
+       </property>
+       <property name="toolTip">
+        <string>Enter the maximum number of additional ports to try</string>
+       </property>
+       <property name="minimum">
+        <number>10</number>
+       </property>
+       <property name="maximum">
+        <number>1000</number>
+       </property>
+      </widget>
+     </item>
+     <item row="3" column="2">
+      <spacer name="horizontalSpacer_2">
+       <property name="orientation">
+        <enum>Qt::Horizontal</enum>
+       </property>
+       <property name="sizeHint" stdset="0">
+        <size>
+         <width>40</width>
+         <height>20</height>
+        </size>
+       </property>
+      </spacer>
+     </item>
+    </layout>
+   </item>
+   <item>
+    <spacer name="verticalSpacer">
+     <property name="orientation">
+      <enum>Qt::Vertical</enum>
+     </property>
+     <property name="sizeHint" stdset="0">
+      <size>
+       <width>20</width>
+       <height>291</height>
+      </size>
+     </property>
+    </spacer>
+   </item>
+  </layout>
+ </widget>
+ <tabstops>
+  <tabstop>autostartCheckBox</tabstop>
+  <tabstop>serverPortSpin</tabstop>
+  <tabstop>otherPortsCheckBox</tabstop>
+  <tabstop>portToTrySpin</tabstop>
+ </tabstops>
+ <resources/>
+ <connections>
+  <connection>
+   <sender>otherPortsCheckBox</sender>
+   <signal>toggled(bool)</signal>
+   <receiver>label_2</receiver>
+   <slot>setEnabled(bool)</slot>
+   <hints>
+    <hint type="sourcelabel">
+     <x>41</x>
+     <y>96</y>
+    </hint>
+    <hint type="destinationlabel">
+     <x>38</x>
+     <y>125</y>
+    </hint>
+   </hints>
+  </connection>
+  <connection>
+   <sender>otherPortsCheckBox</sender>
+   <signal>toggled(bool)</signal>
+   <receiver>portToTrySpin</receiver>
+   <slot>setEnabled(bool)</slot>
+   <hints>
+    <hint type="sourcelabel">
+     <x>129</x>
+     <y>102</y>
+    </hint>
+    <hint type="destinationlabel">
+     <x>129</x>
+     <y>123</y>
+    </hint>
+   </hints>
+  </connection>
+ </connections>
+</ui>
--- a/Preferences/ViewProfileDialog.py	Sat Mar 20 13:14:56 2010 +0000
+++ b/Preferences/ViewProfileDialog.py	Sun Mar 21 19:34:15 2010 +0000
@@ -47,6 +47,7 @@
         # set the editor profile
         profile = self.profiles["edit"][0]
         self.ui.epdbCheckBox.setChecked(profile[2])
+        self.ui.epcoCheckBox.setChecked(profile[9])
         if self.__layout in ["Toolboxes", "Sidebars"]:
             profile = self.profiles["edit"][5]
             self.ui.epvtCheckBox.setChecked(profile[0])
@@ -72,6 +73,7 @@
         # set the debug profile
         profile = self.profiles["debug"][0]
         self.ui.dpdbCheckBox.setChecked(profile[2])
+        self.ui.dpcoCheckBox.setChecked(profile[9])
         if self.__layout in ["Toolboxes", "Sidebars"]:
             profile = self.profiles["edit"][5]
             self.ui.dpvtCheckBox.setChecked(profile[0])
@@ -104,12 +106,14 @@
         if self.__layout in ["Toolboxes", "Sidebars"]:
             # get the edit profile
             self.profiles["edit"][0][2] = self.ui.epdbCheckBox.isChecked()
+            self.profiles["edit"][0][9] = self.ui.epcoCheckBox.isChecked()
             self.profiles["edit"][5] = [\
                 self.ui.epvtCheckBox.isChecked(), 
                 self.ui.ephtCheckBox.isChecked(), 
             ]
             # get the debug profile
             self.profiles["debug"][0][2] = self.ui.dpdbCheckBox.isChecked()
+            self.profiles["debug"][0][9] = self.ui.dpcoCheckBox.isChecked()
             self.profiles["debug"][5] = [\
                 self.ui.dpvtCheckBox.isChecked(), 
                 self.ui.dphtCheckBox.isChecked(), 
@@ -126,6 +130,7 @@
                 self.ui.eptevCheckBox.isChecked(),
                 self.ui.epmpbCheckBox.isChecked(),
                 self.ui.eptwCheckBox.isChecked(),
+                self.ui.epcoCheckBox.isChecked()
             ]
             
             # get the debug profile
@@ -139,6 +144,7 @@
                 self.ui.dptevCheckBox.isChecked(),
                 self.ui.dpmpbCheckBox.isChecked(),
                 self.ui.dptwCheckBox.isChecked(),
+                self.ui.dpcoCheckBox.isChecked()
             ]
         
         return self.profiles
--- a/Preferences/ViewProfileDialog.ui	Sat Mar 20 13:14:56 2010 +0000
+++ b/Preferences/ViewProfileDialog.ui	Sun Mar 21 19:34:15 2010 +0000
@@ -1,117 +1,128 @@
-<ui version="4.0" >
+<?xml version="1.0" encoding="UTF-8"?>
+<ui version="4.0">
  <class>ViewProfileDialog</class>
- <widget class="QDialog" name="ViewProfileDialog" >
-  <property name="geometry" >
+ <widget class="QDialog" name="ViewProfileDialog">
+  <property name="geometry">
    <rect>
     <x>0</x>
     <y>0</y>
     <width>608</width>
-    <height>370</height>
+    <height>363</height>
    </rect>
   </property>
-  <property name="windowTitle" >
+  <property name="windowTitle">
    <string>Configure View Profiles</string>
   </property>
-  <property name="sizeGripEnabled" >
+  <property name="sizeGripEnabled">
    <bool>true</bool>
   </property>
-  <layout class="QGridLayout" name="gridLayout" >
-   <item row="0" column="0" colspan="2" >
-    <widget class="QLabel" name="textLabel1" >
-     <property name="text" >
+  <layout class="QGridLayout" name="gridLayout">
+   <item row="0" column="0" colspan="2">
+    <widget class="QLabel" name="textLabel1">
+     <property name="text">
       <string>Select the windows, that should be visible, when the different profiles are active.</string>
      </property>
-     <property name="alignment" >
+     <property name="alignment">
       <set>Qt::AlignVCenter</set>
      </property>
     </widget>
    </item>
-   <item row="1" column="0" >
-    <widget class="QGroupBox" name="editGroup" >
-     <property name="title" >
+   <item row="1" column="0">
+    <widget class="QGroupBox" name="editGroup">
+     <property name="title">
       <string>&amp;Edit Profile</string>
      </property>
-     <layout class="QVBoxLayout" name="verticalLayout" >
+     <layout class="QVBoxLayout" name="verticalLayout">
       <item>
-       <widget class="QCheckBox" name="epmpbCheckBox" >
-        <property name="text" >
-         <string>Multiproject-Viewer</string>
-        </property>
-        <property name="checked" >
-         <bool>true</bool>
+       <widget class="QCheckBox" name="epcoCheckBox">
+        <property name="text">
+         <string>Cooperation</string>
         </property>
-       </widget>
-      </item>
-      <item>
-       <widget class="QCheckBox" name="eppbCheckBox" >
-        <property name="text" >
-         <string>Project-Viewer</string>
-        </property>
-        <property name="checked" >
+        <property name="checked">
          <bool>true</bool>
         </property>
        </widget>
       </item>
       <item>
-       <widget class="QCheckBox" name="epfbCheckBox" >
-        <property name="text" >
+       <widget class="QCheckBox" name="epdbCheckBox">
+        <property name="text">
+         <string>Debug-Viewer</string>
+        </property>
+       </widget>
+      </item>
+      <item>
+       <widget class="QCheckBox" name="epfbCheckBox">
+        <property name="text">
          <string>File-Browser</string>
         </property>
        </widget>
       </item>
       <item>
-       <widget class="QCheckBox" name="epdbCheckBox" >
-        <property name="text" >
-         <string>Debug-Viewer</string>
+       <widget class="QCheckBox" name="eplvCheckBox">
+        <property name="text">
+         <string>Log-Viewer</string>
+        </property>
+        <property name="checked">
+         <bool>true</bool>
         </property>
        </widget>
       </item>
       <item>
-       <widget class="QCheckBox" name="eppsCheckBox" >
-        <property name="text" >
-         <string>Shell</string>
+       <widget class="QCheckBox" name="epmpbCheckBox">
+        <property name="text">
+         <string>Multiproject-Viewer</string>
         </property>
-        <property name="checked" >
+        <property name="checked">
          <bool>true</bool>
         </property>
        </widget>
       </item>
       <item>
-       <widget class="QCheckBox" name="eptwCheckBox" >
-        <property name="text" >
-         <string>Terminal</string>
+       <widget class="QCheckBox" name="eppbCheckBox">
+        <property name="text">
+         <string>Project-Viewer</string>
+        </property>
+        <property name="checked">
+         <bool>true</bool>
         </property>
-        <property name="checked" >
+       </widget>
+      </item>
+      <item>
+       <widget class="QCheckBox" name="eppsCheckBox">
+        <property name="text">
+         <string>Shell</string>
+        </property>
+        <property name="checked">
          <bool>true</bool>
         </property>
        </widget>
       </item>
       <item>
-       <widget class="QCheckBox" name="eplvCheckBox" >
-        <property name="text" >
-         <string>Log-Viewer</string>
+       <widget class="QCheckBox" name="eptvCheckBox">
+        <property name="text">
+         <string>Task-Viewer</string>
         </property>
-        <property name="checked" >
+        <property name="checked">
          <bool>true</bool>
         </property>
        </widget>
       </item>
       <item>
-       <widget class="QCheckBox" name="eptvCheckBox" >
-        <property name="text" >
-         <string>Task-Viewer</string>
+       <widget class="QCheckBox" name="eptevCheckBox">
+        <property name="text">
+         <string>Templates-Viewer</string>
         </property>
-        <property name="checked" >
+        <property name="checked">
          <bool>true</bool>
         </property>
        </widget>
       </item>
       <item>
-       <widget class="QCheckBox" name="eptevCheckBox" >
-        <property name="text" >
-         <string>Templates-Viewer</string>
+       <widget class="QCheckBox" name="eptwCheckBox">
+        <property name="text">
+         <string>Terminal</string>
         </property>
-        <property name="checked" >
+        <property name="checked">
          <bool>true</bool>
         </property>
        </widget>
@@ -119,129 +130,138 @@
      </layout>
     </widget>
    </item>
-   <item row="1" column="1" >
-    <widget class="QGroupBox" name="debugGroup" >
-     <property name="title" >
+   <item row="1" column="1">
+    <widget class="QGroupBox" name="debugGroup">
+     <property name="title">
       <string>&amp;Debug Profile</string>
      </property>
-     <layout class="QVBoxLayout" name="verticalLayout_2" >
+     <layout class="QVBoxLayout" name="verticalLayout_2">
       <item>
-       <widget class="QCheckBox" name="dpmpbCheckBox" >
-        <property name="text" >
-         <string>Multiproject-Viewer</string>
+       <widget class="QCheckBox" name="dpcoCheckBox">
+        <property name="text">
+         <string>Cooperation</string>
         </property>
        </widget>
       </item>
       <item>
-       <widget class="QCheckBox" name="dppbCheckBox" >
-        <property name="text" >
-         <string>Project-Viewer</string>
+       <widget class="QCheckBox" name="dpdbCheckBox">
+        <property name="text">
+         <string>Debug-Viewer</string>
         </property>
-        <property name="checked" >
-         <bool>false</bool>
+        <property name="checked">
+         <bool>true</bool>
         </property>
        </widget>
       </item>
       <item>
-       <widget class="QCheckBox" name="dpfbCheckBox" >
-        <property name="text" >
+       <widget class="QCheckBox" name="dpfbCheckBox">
+        <property name="text">
          <string>File-Browser</string>
         </property>
        </widget>
       </item>
       <item>
-       <widget class="QCheckBox" name="dpdbCheckBox" >
-        <property name="text" >
-         <string>Debug-Viewer</string>
+       <widget class="QCheckBox" name="dplvCheckBox">
+        <property name="text">
+         <string>Log-Viewer</string>
         </property>
-        <property name="checked" >
+        <property name="checked">
          <bool>true</bool>
         </property>
        </widget>
       </item>
       <item>
-       <widget class="QCheckBox" name="dppsCheckBox" >
-        <property name="text" >
-         <string>Shell</string>
-        </property>
-        <property name="checked" >
-         <bool>true</bool>
+       <widget class="QCheckBox" name="dpmpbCheckBox">
+        <property name="text">
+         <string>Multiproject-Viewer</string>
         </property>
        </widget>
       </item>
       <item>
-       <widget class="QCheckBox" name="dptwCheckBox" >
-        <property name="text" >
-         <string>Terminal</string>
+       <widget class="QCheckBox" name="dppbCheckBox">
+        <property name="text">
+         <string>Project-Viewer</string>
+        </property>
+        <property name="checked">
+         <bool>false</bool>
         </property>
-        <property name="checked" >
+       </widget>
+      </item>
+      <item>
+       <widget class="QCheckBox" name="dppsCheckBox">
+        <property name="text">
+         <string>Shell</string>
+        </property>
+        <property name="checked">
          <bool>true</bool>
         </property>
        </widget>
       </item>
       <item>
-       <widget class="QCheckBox" name="dplvCheckBox" >
-        <property name="text" >
-         <string>Log-Viewer</string>
+       <widget class="QCheckBox" name="dptvCheckBox">
+        <property name="text">
+         <string>Task-Viewer</string>
         </property>
-        <property name="checked" >
+        <property name="checked">
          <bool>true</bool>
         </property>
        </widget>
       </item>
       <item>
-       <widget class="QCheckBox" name="dptvCheckBox" >
-        <property name="text" >
-         <string>Task-Viewer</string>
-        </property>
-        <property name="checked" >
-         <bool>true</bool>
+       <widget class="QCheckBox" name="dptevCheckBox">
+        <property name="text">
+         <string>Templates-Viewer</string>
         </property>
        </widget>
       </item>
       <item>
-       <widget class="QCheckBox" name="dptevCheckBox" >
-        <property name="text" >
-         <string>Templates-Viewer</string>
+       <widget class="QCheckBox" name="dptwCheckBox">
+        <property name="text">
+         <string>Terminal</string>
+        </property>
+        <property name="checked">
+         <bool>true</bool>
         </property>
        </widget>
       </item>
      </layout>
     </widget>
    </item>
-   <item row="2" column="0" colspan="2" >
-    <widget class="QDialogButtonBox" name="buttonBox" >
-     <property name="orientation" >
+   <item row="2" column="0" colspan="2">
+    <widget class="QDialogButtonBox" name="buttonBox">
+     <property name="orientation">
       <enum>Qt::Horizontal</enum>
      </property>
-     <property name="standardButtons" >
+     <property name="standardButtons">
       <set>QDialogButtonBox::Cancel|QDialogButtonBox::Ok</set>
      </property>
     </widget>
    </item>
   </layout>
  </widget>
- <layoutdefault spacing="6" margin="6" />
+ <layoutdefault spacing="6" margin="6"/>
  <pixmapfunction>qPixmapFromMimeSource</pixmapfunction>
  <tabstops>
+  <tabstop>epcoCheckBox</tabstop>
+  <tabstop>epdbCheckBox</tabstop>
+  <tabstop>epfbCheckBox</tabstop>
+  <tabstop>eplvCheckBox</tabstop>
   <tabstop>epmpbCheckBox</tabstop>
   <tabstop>eppbCheckBox</tabstop>
-  <tabstop>epfbCheckBox</tabstop>
-  <tabstop>epdbCheckBox</tabstop>
   <tabstop>eppsCheckBox</tabstop>
-  <tabstop>eptwCheckBox</tabstop>
-  <tabstop>eplvCheckBox</tabstop>
   <tabstop>eptvCheckBox</tabstop>
   <tabstop>eptevCheckBox</tabstop>
+  <tabstop>eptwCheckBox</tabstop>
+  <tabstop>dpcoCheckBox</tabstop>
+  <tabstop>dpdbCheckBox</tabstop>
+  <tabstop>dpfbCheckBox</tabstop>
+  <tabstop>dplvCheckBox</tabstop>
   <tabstop>dpmpbCheckBox</tabstop>
   <tabstop>dppbCheckBox</tabstop>
-  <tabstop>dpfbCheckBox</tabstop>
-  <tabstop>dpdbCheckBox</tabstop>
   <tabstop>dppsCheckBox</tabstop>
-  <tabstop>dptwCheckBox</tabstop>
-  <tabstop>dplvCheckBox</tabstop>
   <tabstop>dptvCheckBox</tabstop>
   <tabstop>dptevCheckBox</tabstop>
+  <tabstop>dptwCheckBox</tabstop>
   <tabstop>buttonBox</tabstop>
  </tabstops>
  <resources/>
@@ -252,11 +272,11 @@
    <receiver>ViewProfileDialog</receiver>
    <slot>accept()</slot>
    <hints>
-    <hint type="sourcelabel" >
+    <hint type="sourcelabel">
      <x>56</x>
      <y>208</y>
     </hint>
-    <hint type="destinationlabel" >
+    <hint type="destinationlabel">
      <x>56</x>
      <y>229</y>
     </hint>
@@ -268,11 +288,11 @@
    <receiver>ViewProfileDialog</receiver>
    <slot>reject()</slot>
    <hints>
-    <hint type="sourcelabel" >
+    <hint type="sourcelabel">
      <x>146</x>
      <y>215</y>
     </hint>
-    <hint type="destinationlabel" >
+    <hint type="destinationlabel">
      <x>146</x>
      <y>234</y>
     </hint>
--- a/Preferences/ViewProfileSidebarsDialog.ui	Sat Mar 20 13:14:56 2010 +0000
+++ b/Preferences/ViewProfileSidebarsDialog.ui	Sun Mar 21 19:34:15 2010 +0000
@@ -1,60 +1,71 @@
-<ui version="4.0" >
+<?xml version="1.0" encoding="UTF-8"?>
+<ui version="4.0">
  <class>ViewProfileSidebarsDialog</class>
- <widget class="QDialog" name="ViewProfileSidebarsDialog" >
-  <property name="geometry" >
+ <widget class="QDialog" name="ViewProfileSidebarsDialog">
+  <property name="geometry">
    <rect>
     <x>0</x>
     <y>0</y>
     <width>608</width>
-    <height>179</height>
+    <height>201</height>
    </rect>
   </property>
-  <property name="windowTitle" >
+  <property name="windowTitle">
    <string>Configure View Profiles</string>
   </property>
-  <property name="sizeGripEnabled" >
+  <property name="sizeGripEnabled">
    <bool>true</bool>
   </property>
-  <layout class="QGridLayout" name="gridLayout" >
-   <item row="0" column="0" colspan="2" >
-    <widget class="QLabel" name="textLabel1" >
-     <property name="text" >
+  <layout class="QGridLayout" name="gridLayout">
+   <item row="0" column="0" colspan="2">
+    <widget class="QLabel" name="textLabel1">
+     <property name="text">
       <string>Select the windows, that should be visible, when the different profiles are active.</string>
      </property>
-     <property name="alignment" >
+     <property name="alignment">
       <set>Qt::AlignVCenter</set>
      </property>
     </widget>
    </item>
-   <item row="1" column="0" >
-    <widget class="QGroupBox" name="editGroup" >
-     <property name="title" >
+   <item row="1" column="0">
+    <widget class="QGroupBox" name="editGroup">
+     <property name="title">
       <string>&amp;Edit Profile</string>
      </property>
-     <layout class="QVBoxLayout" name="verticalLayout" >
+     <layout class="QVBoxLayout" name="verticalLayout">
       <item>
-       <widget class="QCheckBox" name="epvtCheckBox" >
-        <property name="text" >
+       <widget class="QCheckBox" name="epvtCheckBox">
+        <property name="text">
          <string>Left Sidebar</string>
         </property>
-        <property name="checked" >
+        <property name="checked">
          <bool>true</bool>
         </property>
        </widget>
       </item>
       <item>
-       <widget class="QCheckBox" name="ephtCheckBox" >
-        <property name="text" >
+       <widget class="QCheckBox" name="ephtCheckBox">
+        <property name="text">
          <string>Bottom Sidebar</string>
         </property>
-        <property name="checked" >
+        <property name="checked">
          <bool>true</bool>
         </property>
        </widget>
       </item>
       <item>
-       <widget class="QCheckBox" name="epdbCheckBox" >
-        <property name="text" >
+       <widget class="QCheckBox" name="epcoCheckBox">
+        <property name="text">
+         <string>Cooperation</string>
+        </property>
+        <property name="checked">
+         <bool>true</bool>
+        </property>
+       </widget>
+      </item>
+      <item>
+       <widget class="QCheckBox" name="epdbCheckBox">
+        <property name="text">
          <string>Debug-Viewer</string>
         </property>
        </widget>
@@ -62,35 +73,42 @@
      </layout>
     </widget>
    </item>
-   <item row="1" column="1" >
-    <widget class="QGroupBox" name="debugGroup" >
-     <property name="title" >
+   <item row="1" column="1">
+    <widget class="QGroupBox" name="debugGroup">
+     <property name="title">
       <string>&amp;Debug Profile</string>
      </property>
-     <layout class="QVBoxLayout" name="verticalLayout_2" >
+     <layout class="QVBoxLayout" name="verticalLayout_2">
       <item>
-       <widget class="QCheckBox" name="dpvtCheckBox" >
-        <property name="text" >
+       <widget class="QCheckBox" name="dpvtCheckBox">
+        <property name="text">
          <string>Left Sidebar</string>
         </property>
        </widget>
       </item>
       <item>
-       <widget class="QCheckBox" name="dphtCheckBox" >
-        <property name="text" >
+       <widget class="QCheckBox" name="dphtCheckBox">
+        <property name="text">
          <string>Bottom Sidebar</string>
         </property>
-        <property name="checked" >
+        <property name="checked">
          <bool>true</bool>
         </property>
        </widget>
       </item>
       <item>
-       <widget class="QCheckBox" name="dpdbCheckBox" >
-        <property name="text" >
+       <widget class="QCheckBox" name="dpcoCheckBox">
+        <property name="text">
+         <string>Cooperation</string>
+        </property>
+       </widget>
+      </item>
+      <item>
+       <widget class="QCheckBox" name="dpdbCheckBox">
+        <property name="text">
          <string>Debug-Viewer</string>
         </property>
-        <property name="checked" >
+        <property name="checked">
          <bool>true</bool>
         </property>
        </widget>
@@ -98,26 +116,28 @@
      </layout>
     </widget>
    </item>
-   <item row="2" column="0" colspan="2" >
-    <widget class="QDialogButtonBox" name="buttonBox" >
-     <property name="orientation" >
+   <item row="2" column="0" colspan="2">
+    <widget class="QDialogButtonBox" name="buttonBox">
+     <property name="orientation">
       <enum>Qt::Horizontal</enum>
      </property>
-     <property name="standardButtons" >
+     <property name="standardButtons">
       <set>QDialogButtonBox::Cancel|QDialogButtonBox::Ok</set>
      </property>
     </widget>
    </item>
   </layout>
  </widget>
- <layoutdefault spacing="6" margin="6" />
+ <layoutdefault spacing="6" margin="6"/>
  <pixmapfunction>qPixmapFromMimeSource</pixmapfunction>
  <tabstops>
   <tabstop>epvtCheckBox</tabstop>
   <tabstop>ephtCheckBox</tabstop>
+  <tabstop>epcoCheckBox</tabstop>
   <tabstop>epdbCheckBox</tabstop>
   <tabstop>dpvtCheckBox</tabstop>
   <tabstop>dphtCheckBox</tabstop>
+  <tabstop>dpcoCheckBox</tabstop>
   <tabstop>dpdbCheckBox</tabstop>
   <tabstop>buttonBox</tabstop>
  </tabstops>
@@ -129,11 +149,11 @@
    <receiver>ViewProfileSidebarsDialog</receiver>
    <slot>accept()</slot>
    <hints>
-    <hint type="sourcelabel" >
+    <hint type="sourcelabel">
      <x>56</x>
      <y>208</y>
     </hint>
-    <hint type="destinationlabel" >
+    <hint type="destinationlabel">
      <x>56</x>
      <y>229</y>
     </hint>
@@ -145,11 +165,11 @@
    <receiver>ViewProfileSidebarsDialog</receiver>
    <slot>reject()</slot>
    <hints>
-    <hint type="sourcelabel" >
+    <hint type="sourcelabel">
      <x>146</x>
      <y>215</y>
     </hint>
-    <hint type="destinationlabel" >
+    <hint type="destinationlabel">
      <x>146</x>
      <y>234</y>
     </hint>
--- a/Preferences/ViewProfileToolboxesDialog.ui	Sat Mar 20 13:14:56 2010 +0000
+++ b/Preferences/ViewProfileToolboxesDialog.ui	Sun Mar 21 19:34:15 2010 +0000
@@ -1,60 +1,71 @@
-<ui version="4.0" >
+<?xml version="1.0" encoding="UTF-8"?>
+<ui version="4.0">
  <class>ViewProfileToolboxesDialog</class>
- <widget class="QDialog" name="ViewProfileToolboxesDialog" >
-  <property name="geometry" >
+ <widget class="QDialog" name="ViewProfileToolboxesDialog">
+  <property name="geometry">
    <rect>
     <x>0</x>
     <y>0</y>
     <width>608</width>
-    <height>179</height>
+    <height>201</height>
    </rect>
   </property>
-  <property name="windowTitle" >
+  <property name="windowTitle">
    <string>Configure View Profiles</string>
   </property>
-  <property name="sizeGripEnabled" >
+  <property name="sizeGripEnabled">
    <bool>true</bool>
   </property>
-  <layout class="QGridLayout" name="gridLayout" >
-   <item row="0" column="0" colspan="2" >
-    <widget class="QLabel" name="textLabel1" >
-     <property name="text" >
+  <layout class="QGridLayout" name="gridLayout">
+   <item row="0" column="0" colspan="2">
+    <widget class="QLabel" name="textLabel1">
+     <property name="text">
       <string>Select the windows, that should be visible, when the different profiles are active.</string>
      </property>
-     <property name="alignment" >
+     <property name="alignment">
       <set>Qt::AlignVCenter</set>
      </property>
     </widget>
    </item>
-   <item row="1" column="0" >
-    <widget class="QGroupBox" name="editGroup" >
-     <property name="title" >
+   <item row="1" column="0">
+    <widget class="QGroupBox" name="editGroup">
+     <property name="title">
       <string>&amp;Edit Profile</string>
      </property>
-     <layout class="QVBoxLayout" name="verticalLayout" >
+     <layout class="QVBoxLayout" name="verticalLayout">
       <item>
-       <widget class="QCheckBox" name="epvtCheckBox" >
-        <property name="text" >
+       <widget class="QCheckBox" name="epvtCheckBox">
+        <property name="text">
          <string>Vertical Toolbox</string>
         </property>
-        <property name="checked" >
+        <property name="checked">
          <bool>true</bool>
         </property>
        </widget>
       </item>
       <item>
-       <widget class="QCheckBox" name="ephtCheckBox" >
-        <property name="text" >
+       <widget class="QCheckBox" name="ephtCheckBox">
+        <property name="text">
          <string>Horizontal Toolbox</string>
         </property>
-        <property name="checked" >
+        <property name="checked">
          <bool>true</bool>
         </property>
        </widget>
       </item>
       <item>
-       <widget class="QCheckBox" name="epdbCheckBox" >
-        <property name="text" >
+       <widget class="QCheckBox" name="epcoCheckBox">
+        <property name="text">
+         <string>Cooperation</string>
+        </property>
+        <property name="checked">
+         <bool>true</bool>
+        </property>
+       </widget>
+      </item>
+      <item>
+       <widget class="QCheckBox" name="epdbCheckBox">
+        <property name="text">
          <string>Debug-Viewer</string>
         </property>
        </widget>
@@ -62,35 +73,42 @@
      </layout>
     </widget>
    </item>
-   <item row="1" column="1" >
-    <widget class="QGroupBox" name="debugGroup" >
-     <property name="title" >
+   <item row="1" column="1">
+    <widget class="QGroupBox" name="debugGroup">
+     <property name="title">
       <string>&amp;Debug Profile</string>
      </property>
-     <layout class="QVBoxLayout" name="verticalLayout_2" >
+     <layout class="QVBoxLayout" name="verticalLayout_2">
       <item>
-       <widget class="QCheckBox" name="dpvtCheckBox" >
-        <property name="text" >
+       <widget class="QCheckBox" name="dpvtCheckBox">
+        <property name="text">
          <string>Vertical Toolbox</string>
         </property>
        </widget>
       </item>
       <item>
-       <widget class="QCheckBox" name="dphtCheckBox" >
-        <property name="text" >
+       <widget class="QCheckBox" name="dphtCheckBox">
+        <property name="text">
          <string>Horizontal Toolbox</string>
         </property>
-        <property name="checked" >
+        <property name="checked">
          <bool>true</bool>
         </property>
        </widget>
       </item>
       <item>
-       <widget class="QCheckBox" name="dpdbCheckBox" >
-        <property name="text" >
+       <widget class="QCheckBox" name="dpcoCheckBox">
+        <property name="text">
+         <string>Cooperation</string>
+        </property>
+       </widget>
+      </item>
+      <item>
+       <widget class="QCheckBox" name="dpdbCheckBox">
+        <property name="text">
          <string>Debug-Viewer</string>
         </property>
-        <property name="checked" >
+        <property name="checked">
          <bool>true</bool>
         </property>
        </widget>
@@ -98,26 +116,28 @@
      </layout>
     </widget>
    </item>
-   <item row="2" column="0" colspan="2" >
-    <widget class="QDialogButtonBox" name="buttonBox" >
-     <property name="orientation" >
+   <item row="2" column="0" colspan="2">
+    <widget class="QDialogButtonBox" name="buttonBox">
+     <property name="orientation">
       <enum>Qt::Horizontal</enum>
      </property>
-     <property name="standardButtons" >
+     <property name="standardButtons">
       <set>QDialogButtonBox::Cancel|QDialogButtonBox::Ok</set>
      </property>
     </widget>
    </item>
   </layout>
  </widget>
- <layoutdefault spacing="6" margin="6" />
+ <layoutdefault spacing="6" margin="6"/>
  <pixmapfunction>qPixmapFromMimeSource</pixmapfunction>
  <tabstops>
   <tabstop>epvtCheckBox</tabstop>
   <tabstop>ephtCheckBox</tabstop>
+  <tabstop>epcoCheckBox</tabstop>
   <tabstop>epdbCheckBox</tabstop>
   <tabstop>dpvtCheckBox</tabstop>
   <tabstop>dphtCheckBox</tabstop>
+  <tabstop>dpcoCheckBox</tabstop>
   <tabstop>dpdbCheckBox</tabstop>
   <tabstop>buttonBox</tabstop>
  </tabstops>
@@ -129,11 +149,11 @@
    <receiver>ViewProfileToolboxesDialog</receiver>
    <slot>accept()</slot>
    <hints>
-    <hint type="sourcelabel" >
+    <hint type="sourcelabel">
      <x>56</x>
      <y>208</y>
     </hint>
-    <hint type="destinationlabel" >
+    <hint type="destinationlabel">
      <x>56</x>
      <y>229</y>
     </hint>
@@ -145,11 +165,11 @@
    <receiver>ViewProfileToolboxesDialog</receiver>
    <slot>reject()</slot>
    <hints>
-    <hint type="sourcelabel" >
+    <hint type="sourcelabel">
      <x>146</x>
      <y>215</y>
     </hint>
-    <hint type="destinationlabel" >
+    <hint type="destinationlabel">
      <x>146</x>
      <y>234</y>
     </hint>
--- a/Preferences/__init__.py	Sat Mar 20 13:14:56 2010 +0000
+++ b/Preferences/__init__.py	Sun Mar 21 19:34:15 2010 +0000
@@ -85,6 +85,7 @@
     }
     debuggerDefaults["AllowedHosts"] = ["127.0.0.1", "::1%0"]
     
+    # defaults for the UI settings
     uiDefaults = {
         "Language" : "System",
         "Style" : "System",
@@ -113,15 +114,15 @@
         "TabViewManagerFilenameOnly" : True, 
         # the order in ViewProfiles is Project-Viewer, File-Browser,
         # Debug-Viewer, Python-Shell, Log-Viewer, Task-Viewer,
-        # Templates-Viewer, Multiproject-Viewer, Terminal
+        # Templates-Viewer, Multiproject-Viewer, Terminal, Chat
         "ViewProfiles" : {
             "edit"  : [
                     # visibility (0)
-                    [ True,  False,  False,  True,  True,  True,  True,  True, True],
+                    [ True, False, False, True, True, True, True,  True,  True, True],
                     # saved state main window with dock windows (1)
                     b"",
                     # saved states floating windows (2)
-                    [b"", b"", b"", b"", b"", b"", b"", b"", b""],
+                    [b"", b"", b"", b"", b"", b"", b"", b"", b"", b""],
                     # saved state main window with floating windows (3)
                     b"", 
                     # saved state main window with toolbox windows (4)
@@ -134,11 +135,11 @@
                 ],
             "debug" : [
                     # visibility (0)
-                    [ False,  False,  True,  True,  True,  True,  False,  False, True], 
+                    [ False, False, True, True, True, True, False, False, True, True], 
                     # saved state main window with dock windows (1)
                     b"",
                     # saved states floating windows (2)
-                    [b"", b"", b"", b"", b"", b"", b"", b"", b""],
+                    [b"", b"", b"", b"", b"", b"", b"", b"", b"", b""],
                     # saved state main window with floating windows (3)
                     b"", 
                     # saved state main window with toolbox windows (4)
@@ -193,6 +194,14 @@
         "Path" : [],
     }
     
+    # defaults for the cooperation settings
+    cooperationDefaults = {
+        "ServerPort" : 42000, 
+        "AutoStartServer" : False,
+        "TryOtherPorts" : True, 
+        "MaxPortsToTry" : 100, 
+    }
+    
     # defaults for the editor settings
     editorDefaults = {
         "AutosaveInterval" : 0,
@@ -1151,6 +1160,34 @@
     """
     prefClass.settings.setValue("UI/Icons/" + key, value)
     
+def getCooperation(key, prefClass = Prefs):
+    """
+    Module function to retrieve the various Cooperation settings.
+    
+    @param key the key of the value to get
+    @param prefClass preferences class used as the storage area
+    @return the requested UI setting
+    """
+    if key in ["AutoStartServer", "TryOtherPorts"]:
+        return toBool(prefClass.settings.value("Cooperation/" + key,
+            prefClass.cooperationDefaults[key]))
+    elif key in ["ServerPort", "MaxPortsToTry"]:
+        return int(prefClass.settings.value("Cooperation/" + key,
+            prefClass.cooperationDefaults[key]))
+    else:
+        return prefClass.settings.value("Cooperation/" + key, 
+            prefClass.cooperationDefaults[key])
+    
+def setCooperation(key, value, prefClass = Prefs):
+    """
+    Module function to store the various Cooperation settings.
+    
+    @param key the key of the setting to be set
+    @param value the value to be set
+    @param prefClass preferences class used as the storage area
+    """
+    prefClass.settings.setValue("Cooperation/" + key, value)
+
 def getEditor(key, prefClass = Prefs):
     """
     Module function to retrieve the various editor settings.
--- a/UI/UserInterface.py	Sat Mar 20 13:14:56 2010 +0000
+++ b/UI/UserInterface.py	Sun Mar 21 19:34:15 2010 +0000
@@ -57,6 +57,8 @@
 
 from Templates.TemplateViewer import TemplateViewer
 
+from Cooperation.ChatWidget import ChatWidget
+
 from .Browser import Browser
 from .Info import *
 from . import Config
@@ -454,6 +456,8 @@
                      self.pluginManager.preferencesChanged)
         self.connect(self, SIGNAL('preferencesChanged'),
                      debugServer.preferencesChanged)
+        self.connect(self, SIGNAL('preferencesChanged'),
+                     self.cooperation.preferencesChanged)
         
         self.connect(self.viewmanager, SIGNAL('editorSaved'),
                      self.project.repopulateItem)
@@ -706,6 +710,10 @@
             embeddedBrowser=(self.embeddedFileBrowser == 1))
         self.debugViewer.setWindowTitle(self.trUtf8("Debug-Viewer"))
 
+        # Create the chat part of the user interface
+        self.cooperation = ChatWidget()
+        self.cooperation.setWindowTitle(self.trUtf8("Cooperation"))
+        
         # Create the log viewer part of the user interface
         self.logViewer = LogViewer(None)
         self.logViewer.setWindowTitle(self.trUtf8("Log-Viewer"))
@@ -724,7 +732,7 @@
 
         self.windows = [self.projectBrowser, None, self.debugViewer, 
             None, self.logViewer, self.taskViewer, self.templateViewer, 
-            self.multiProjectBrowser, self.terminal]
+            self.multiProjectBrowser, self.terminal, self.cooperation]
 
         if self.embeddedShell:
             self.shell = self.debugViewer.shell
@@ -773,6 +781,12 @@
         self.__setupDockWindow(self.debugViewerDock, Qt.RightDockWidgetArea,
                              self.debugViewer, self.trUtf8("Debug-Viewer"))
 
+        # Create the chat part of the user interface
+        self.cooperationDock = self.__createDockWindow("CooperationDock")
+        self.cooperation = ChatWidget(parent = self.cooperationDock)
+        self.__setupDockWindow(self.cooperationDock, Qt.RightDockWidgetArea,
+                             self.cooperation, self.trUtf8("Cooperation"))
+        
         # Create the log viewer part of the user interface
         self.logViewerDock = self.__createDockWindow("LogViewerDock")
         self.logViewer = LogViewer(self.logViewerDock)
@@ -800,7 +814,7 @@
         
         self.windows = [self.projectBrowserDock, None, self.debugViewerDock, 
             None, self.logViewerDock, self.taskViewerDock, self.templateViewerDock, 
-            self.multiProjectBrowserDock, self.terminalDock]
+            self.multiProjectBrowserDock, self.terminalDock, self.cooperationDock]
 
         if self.embeddedShell:
             self.shell = self.debugViewer.shell
@@ -871,6 +885,12 @@
         self.__setupDockWindow(self.debugViewerDock, Qt.RightDockWidgetArea,
                              self.debugViewer, self.trUtf8("Debug-Viewer"))
 
+        # Create the chat part of the user interface
+        self.cooperationDock = self.__createDockWindow("CooperationDock")
+        self.cooperation = ChatWidget(parent = self.cooperationDock)
+        self.__setupDockWindow(self.cooperationDock, Qt.RightDockWidgetArea,
+                             self.cooperation, self.trUtf8("Cooperation"))
+        
         # Create the terminal part of the user interface
         self.terminal = Terminal(self.viewmanager)
         self.hToolbox.addItem(self.terminal, 
@@ -889,8 +909,8 @@
                               UI.PixmapCache.getIcon("logViewer.png"), 
                               self.trUtf8("Log-Viewer"))
 
-        self.windows = [None, None, self.debugViewerDock, 
-            None, None, None, None, None]
+        self.windows = [None, None, self.debugViewerDock, None, None, 
+                        None, None, None, None, self.cooperationDock]
 
         if self.embeddedShell:
             self.shell = self.debugViewer.shell
@@ -959,6 +979,12 @@
         self.__setupDockWindow(self.debugViewerDock, Qt.RightDockWidgetArea,
                              self.debugViewer, self.trUtf8("Debug-Viewer"))
 
+        # Create the chat part of the user interface
+        self.cooperationDock = self.__createDockWindow("CooperationDock")
+        self.cooperation = ChatWidget(parent = self.cooperationDock)
+        self.__setupDockWindow(self.cooperationDock, Qt.RightDockWidgetArea,
+                             self.cooperation, self.trUtf8("Cooperation"))
+        
         # Create the terminal part of the user interface
         logging.debug("Creating Terminal...")
         self.terminal = Terminal(self.viewmanager)
@@ -980,7 +1006,8 @@
                               UI.PixmapCache.getIcon("logViewer.png"), 
                               self.trUtf8("Log-Viewer"))
 
-        self.windows = [None, None, self.debugViewerDock, None, None, None, None, None]
+        self.windows = [None, None, self.debugViewerDock, None, None, 
+                        None, None, None, None, self.cooperationDock]
 
         if self.embeddedShell:
             self.shell = self.debugViewer.shell
@@ -1536,6 +1563,30 @@
         self.connect(self.bsbAct, SIGNAL('triggered()'), self.__toggleBottomSidebar)
         self.actions.append(self.bsbAct)
         
+        self.cooperationViewerAct = E5Action(self.trUtf8('Cooperation'),
+                self.trUtf8('&Cooperation'), 0, 0, self, 'cooperation_viewer', True)
+        self.cooperationViewerAct.setStatusTip(self.trUtf8(
+            'Toggle the Cooperation window'))
+        self.cooperationViewerAct.setWhatsThis(self.trUtf8(
+            """<b>Toggle the Cooperation window</b>"""
+            """<p>If the Cooperation window is hidden then display it."""
+            """ If it is displayed then close it.</p>"""
+        ))
+        self.connect(self.cooperationViewerAct, SIGNAL('triggered()'), 
+                self.__toggleCooperationViewer)
+        self.actions.append(self.cooperationViewerAct)
+        
+        self.cooperationViewerActivateAct = E5Action(
+                self.trUtf8('Activate Cooperation-Viewer'),
+                self.trUtf8('Activate Cooperation-Viewer'),
+                QKeySequence(self.trUtf8("Alt+Shift+O")),
+                0, self,
+                'cooperation_viewer_activate', True)
+        self.connect(self.cooperationViewerActivateAct, SIGNAL('triggered()'), 
+                self.__activateCooperationViewer)
+        self.actions.append(self.cooperationViewerActivateAct)
+        self.addAction(self.cooperationViewerActivateAct)
+
         self.whatsThisAct = E5Action(self.trUtf8('What\'s This?'),
                 UI.PixmapCache.getIcon("whatsThis.png"),
                 self.trUtf8('&What\'s This?'), 
@@ -3036,6 +3087,8 @@
             self.vtAct.setChecked(not self.vToolboxDock.isHidden())
             self.__menus["window"].addAction(self.htAct)
             self.htAct.setChecked(not self.hToolboxDock.isHidden())
+            self.__menus["window"].addAction(self.cooperationViewerAct)
+            self.cooperationViewerAct.setChecked(not self.cooperationDock.isHidden())
             self.__menus["window"].addAction(self.debugViewerAct)
             self.debugViewerAct.setChecked(not self.debugViewerDock.isHidden())
         elif self.layout == "Sidebars":
@@ -3043,6 +3096,8 @@
             self.lsbAct.setChecked(not self.leftSidebar.isHidden())
             self.__menus["window"].addAction(self.bsbAct)
             self.bsbAct.setChecked(not self.bottomSidebar.isHidden())
+            self.__menus["window"].addAction(self.cooperationViewerAct)
+            self.cooperationViewerAct.setChecked(not self.cooperationDock.isHidden())
             self.__menus["window"].addAction(self.debugViewerAct)
             self.debugViewerAct.setChecked(not self.debugViewerDock.isHidden())
         else:
@@ -3103,6 +3158,12 @@
             else:
                 self.templateViewerAct.setChecked(not self.templateViewer.isHidden())
 
+            self.__menus["window"].addAction(self.cooperationViewerAct)
+            if self.layout == "DockWindows":
+                self.cooperationViewerAct.setChecked(not self.cooperationDock.isHidden())
+            else:
+                self.cooperationViewerAct.setChecked(not self.cooperation.isHidden())
+
         # Insert menu entry for toolbar settings
         self.__menus["window"].addSeparator()
         self.__menus["window"].addMenu(self.__menus["toolbars"])
@@ -3673,6 +3734,32 @@
             if hasFocus:
                 self.__activateViewmanager()
         
+    def __toggleCooperationViewer(self):
+        """
+        Private slot to handle the toggle of the cooperation window.
+        """
+        hasFocus = self.cooperation.hasFocus()
+        if self.layout in ["DockWindows", "Toolboxes", "Sidebars"]:
+            shown = self.__toggleWindow(self.cooperationDock)
+        else:
+            shown = self.__toggleWindow(self.cooperation)
+        if shown:
+            self.__activateCooperationViewer()
+        else:
+            if hasFocus:
+                self.__activateViewmanager()
+        
+    def __activateCooperationViewer(self):
+        """
+        Private slot to handle the activation of the cooperation window.
+        """
+        if self.layout in ["DockWindows", "Toolboxes", "Sidebars"]:
+            self.cooperationDock.show()
+            self.cooperationDock.raise_()
+        else:
+            self.cooperation.show()
+        self.cooperation.setFocus(Qt.ActiveWindowFocusReason)
+        
     def __activateViewmanager(self):
         """
         Private slot to handle the activation of the current editor.
--- a/changelog	Sat Mar 20 13:14:56 2010 +0000
+++ b/changelog	Sun Mar 21 19:34:15 2010 +0000
@@ -3,6 +3,7 @@
 Version 5.0-snapshot-2010mmdd:
 - bug fixes
 - added installation of a .desktop file for Linux systems
+- added stage 1 of the cooperation functions (chat system)
 
 Version 5.0-snapshot-20100306:
 - bug fixes
--- a/eric5.e4p	Sat Mar 20 13:14:56 2010 +0000
+++ b/eric5.e4p	Sun Mar 21 19:34:15 2010 +0000
@@ -763,6 +763,12 @@
     <Source>Utilities/py3flakes/messages.py</Source>
     <Source>Preferences/ConfigurationPages/Py3FlakesPage.py</Source>
     <Source>Preferences/ConfigurationPages/EditorKeywordsPage.py</Source>
+    <Source>Cooperation/__init__.py</Source>
+    <Source>Cooperation/Connection.py</Source>
+    <Source>Cooperation/ChatWidget.py</Source>
+    <Source>Cooperation/CooperationClient.py</Source>
+    <Source>Cooperation/CooperationServer.py</Source>
+    <Source>Preferences/ConfigurationPages/CooperationPage.py</Source>
   </Sources>
   <Forms>
     <Form>PyUnit/UnittestDialog.ui</Form>
@@ -966,6 +972,8 @@
     <Form>E5Gui/E5ToolBarDialog.ui</Form>
     <Form>Preferences/ConfigurationPages/Py3FlakesPage.ui</Form>
     <Form>Preferences/ConfigurationPages/EditorKeywordsPage.ui</Form>
+    <Form>Cooperation/ChatWidget.ui</Form>
+    <Form>Preferences/ConfigurationPages/CooperationPage.ui</Form>
   </Forms>
   <Translations>
     <Translation>i18n/eric5_cs.qm</Translation>
--- a/i18n/eric5_cs.ts	Sat Mar 20 13:14:56 2010 +0000
+++ b/i18n/eric5_cs.ts	Sun Mar 21 19:34:15 2010 +0000
@@ -1943,6 +1943,103 @@
     </message>
 </context>
 <context>
+    <name>ChatWidget</name>
+    <message>
+        <location filename="Cooperation/ChatWidget.ui" line="48"/>
+        <source>Chat</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="Cooperation/ChatWidget.ui" line="26"/>
+        <source>Users</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="Cooperation/ChatWidget.ui" line="67"/>
+        <source>Press to send the text above</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="Cooperation/ChatWidget.ui" line="70"/>
+        <source>Send</source>
+        <translation type="unfinished">Odeslat</translation>
+    </message>
+    <message>
+        <location filename="Cooperation/ChatWidget.ui" line="80"/>
+        <source>Connection</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="Cooperation/ChatWidget.ui" line="86"/>
+        <source>Host:</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="Cooperation/ChatWidget.ui" line="151"/>
+        <source>Port:</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="Cooperation/ChatWidget.ui" line="135"/>
+        <source>Shows the connection status</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="Cooperation/ChatWidget.ui" line="145"/>
+        <source>Server</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="Cooperation/ChatWidget.ui" line="190"/>
+        <source>Shows the status of the server</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="Cooperation/ChatWidget.py" line="172"/>
+        <source>Start Server</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="Cooperation/ChatWidget.py" line="67"/>
+        <source>! Unknown command: {0}
+</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="Cooperation/ChatWidget.py" line="88"/>
+        <source>* {0} has joined.
+</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="Cooperation/ChatWidget.py" line="117"/>
+        <source>* {0} has left.
+</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="Cooperation/ChatWidget.py" line="180"/>
+        <source>Stop Server</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="Cooperation/ChatWidget.py" line="185"/>
+        <source>! Server Error: {0}
+</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="Cooperation/ChatWidget.py" line="198"/>
+        <source>Disconnect</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="Cooperation/ChatWidget.py" line="206"/>
+        <source>Connect</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
     <name>CodeMetricsDialog</name>
     <message>
         <location filename="DataViews/CodeMetricsDialog.ui" line="13"/>
@@ -2511,167 +2608,167 @@
         <translation>Aplikace</translation>
     </message>
     <message>
-        <location filename="Preferences/ConfigurationDialog.py" line="97"/>
+        <location filename="Preferences/ConfigurationDialog.py" line="100"/>
         <source>CORBA</source>
         <translation>CORBA</translation>
     </message>
     <message>
-        <location filename="Preferences/ConfigurationDialog.py" line="100"/>
-        <source>Email</source>
-        <translation>Email</translation>
-    </message>
-    <message>
         <location filename="Preferences/ConfigurationDialog.py" line="103"/>
-        <source>Graphics</source>
-        <translation>Grafika</translation>
+        <source>Email</source>
+        <translation>Email</translation>
     </message>
     <message>
         <location filename="Preferences/ConfigurationDialog.py" line="106"/>
+        <source>Graphics</source>
+        <translation>Grafika</translation>
+    </message>
+    <message>
+        <location filename="Preferences/ConfigurationDialog.py" line="109"/>
         <source>Icons</source>
         <translation>Ikony</translation>
     </message>
     <message>
-        <location filename="Preferences/ConfigurationDialog.py" line="112"/>
-        <source>Plugin Manager</source>
-        <translation>Plugin Manažer</translation>
-    </message>
-    <message>
         <location filename="Preferences/ConfigurationDialog.py" line="115"/>
+        <source>Plugin Manager</source>
+        <translation>Plugin Manažer</translation>
+    </message>
+    <message>
+        <location filename="Preferences/ConfigurationDialog.py" line="118"/>
         <source>Printer</source>
         <translation>Tiskárna</translation>
     </message>
     <message>
-        <location filename="Preferences/ConfigurationDialog.py" line="272"/>
+        <location filename="Preferences/ConfigurationDialog.py" line="275"/>
         <source>Python</source>
         <translation>Python</translation>
     </message>
     <message>
-        <location filename="Preferences/ConfigurationDialog.py" line="124"/>
-        <source>Qt</source>
-        <translation>Qt</translation>
-    </message>
-    <message>
         <location filename="Preferences/ConfigurationDialog.py" line="127"/>
-        <source>Shell</source>
-        <translation>Shell</translation>
+        <source>Qt</source>
+        <translation>Qt</translation>
     </message>
     <message>
         <location filename="Preferences/ConfigurationDialog.py" line="130"/>
-        <source>Tasks</source>
-        <translation>Úlohy</translation>
+        <source>Shell</source>
+        <translation>Shell</translation>
     </message>
     <message>
         <location filename="Preferences/ConfigurationDialog.py" line="133"/>
+        <source>Tasks</source>
+        <translation>Úlohy</translation>
+    </message>
+    <message>
+        <location filename="Preferences/ConfigurationDialog.py" line="136"/>
         <source>Templates</source>
         <translation>Šablony</translation>
     </message>
     <message>
-        <location filename="Preferences/ConfigurationDialog.py" line="139"/>
+        <location filename="Preferences/ConfigurationDialog.py" line="142"/>
         <source>Version Control Systems</source>
         <translation>Version Control Systems</translation>
     </message>
     <message>
-        <location filename="Preferences/ConfigurationDialog.py" line="143"/>
+        <location filename="Preferences/ConfigurationDialog.py" line="146"/>
         <source>Debugger</source>
         <translation>Debugger</translation>
     </message>
     <message>
-        <location filename="Preferences/ConfigurationDialog.py" line="155"/>
+        <location filename="Preferences/ConfigurationDialog.py" line="158"/>
         <source>Ruby</source>
         <translation>Ruby</translation>
     </message>
     <message>
-        <location filename="Preferences/ConfigurationDialog.py" line="159"/>
-        <source>Editor</source>
-        <translation>Editor</translation>
-    </message>
-    <message>
         <location filename="Preferences/ConfigurationDialog.py" line="162"/>
-        <source>APIs</source>
-        <translation>APIs</translation>
+        <source>Editor</source>
+        <translation>Editor</translation>
     </message>
     <message>
         <location filename="Preferences/ConfigurationDialog.py" line="165"/>
+        <source>APIs</source>
+        <translation>APIs</translation>
+    </message>
+    <message>
+        <location filename="Preferences/ConfigurationDialog.py" line="168"/>
         <source>Autocompletion</source>
         <translation>Autodoplňování</translation>
     </message>
     <message>
-        <location filename="Preferences/ConfigurationDialog.py" line="172"/>
+        <location filename="Preferences/ConfigurationDialog.py" line="175"/>
         <source>Calltips</source>
         <translation>Rychlé tipy</translation>
     </message>
     <message>
-        <location filename="Preferences/ConfigurationDialog.py" line="178"/>
+        <location filename="Preferences/ConfigurationDialog.py" line="181"/>
         <source>General</source>
         <translation>Hlavní</translation>
     </message>
     <message>
-        <location filename="Preferences/ConfigurationDialog.py" line="193"/>
-        <source>Typing</source>
-        <translation>Psaní</translation>
-    </message>
-    <message>
         <location filename="Preferences/ConfigurationDialog.py" line="196"/>
+        <source>Typing</source>
+        <translation>Psaní</translation>
+    </message>
+    <message>
+        <location filename="Preferences/ConfigurationDialog.py" line="199"/>
         <source>Exporters</source>
         <translation>Exportery</translation>
     </message>
     <message>
-        <location filename="Preferences/ConfigurationDialog.py" line="200"/>
-        <source>Highlighters</source>
-        <translation>Zvýrazňovače</translation>
-    </message>
-    <message>
         <location filename="Preferences/ConfigurationDialog.py" line="203"/>
+        <source>Highlighters</source>
+        <translation>Zvýrazňovače</translation>
+    </message>
+    <message>
+        <location filename="Preferences/ConfigurationDialog.py" line="206"/>
         <source>Filetype Associations</source>
         <translation>Asociace typů souborů</translation>
     </message>
     <message>
-        <location filename="Preferences/ConfigurationDialog.py" line="207"/>
+        <location filename="Preferences/ConfigurationDialog.py" line="210"/>
         <source>Styles</source>
         <translation>Styly</translation>
     </message>
     <message>
-        <location filename="Preferences/ConfigurationDialog.py" line="276"/>
+        <location filename="Preferences/ConfigurationDialog.py" line="279"/>
         <source>Help</source>
         <translation>Nápověda</translation>
     </message>
     <message>
-        <location filename="Preferences/ConfigurationDialog.py" line="282"/>
+        <location filename="Preferences/ConfigurationDialog.py" line="285"/>
         <source>Help Documentation</source>
         <translation>Dokumenty nápovědy</translation>
     </message>
     <message>
-        <location filename="Preferences/ConfigurationDialog.py" line="286"/>
+        <location filename="Preferences/ConfigurationDialog.py" line="289"/>
         <source>Help Viewers</source>
         <translation>Prohlížeče nápovědy</translation>
     </message>
     <message>
+        <location filename="Preferences/ConfigurationDialog.py" line="244"/>
+        <source>Project</source>
+        <translation>Projekt</translation>
+    </message>
+    <message>
         <location filename="Preferences/ConfigurationDialog.py" line="241"/>
-        <source>Project</source>
-        <translation>Projekt</translation>
-    </message>
-    <message>
-        <location filename="Preferences/ConfigurationDialog.py" line="238"/>
         <source>Project Viewer</source>
         <translation>Prohlížeč projektu</translation>
     </message>
     <message>
-        <location filename="Preferences/ConfigurationDialog.py" line="244"/>
+        <location filename="Preferences/ConfigurationDialog.py" line="247"/>
         <source>Multiproject</source>
         <translation>Multiprojekt</translation>
     </message>
     <message>
-        <location filename="Preferences/ConfigurationDialog.py" line="251"/>
-        <source>Interface</source>
-        <translation>Interface</translation>
-    </message>
-    <message>
         <location filename="Preferences/ConfigurationDialog.py" line="254"/>
+        <source>Interface</source>
+        <translation>Interface</translation>
+    </message>
+    <message>
+        <location filename="Preferences/ConfigurationDialog.py" line="257"/>
         <source>Viewmanager</source>
         <translation>Viewmanager</translation>
     </message>
     <message>
-        <location filename="Preferences/ConfigurationDialog.py" line="421"/>
+        <location filename="Preferences/ConfigurationDialog.py" line="424"/>
         <source>Configuration Page Error</source>
         <translation>Chyba na straně konfigurace</translation>
     </message>
@@ -2681,86 +2778,104 @@
         <translation type="obsolete">&lt;p&gt;Konfigurační strana &lt;b&gt;%1&lt;/b&gt; nelze načíst.&lt;/p&gt;</translation>
     </message>
     <message>
-        <location filename="Preferences/ConfigurationDialog.py" line="181"/>
+        <location filename="Preferences/ConfigurationDialog.py" line="184"/>
         <source>Filehandling</source>
         <translation>Manažer souborů</translation>
     </message>
     <message>
-        <location filename="Preferences/ConfigurationDialog.py" line="184"/>
+        <location filename="Preferences/ConfigurationDialog.py" line="187"/>
         <source>Searching</source>
         <translation>Vyhledávání</translation>
     </message>
     <message>
-        <location filename="Preferences/ConfigurationDialog.py" line="279"/>
+        <location filename="Preferences/ConfigurationDialog.py" line="282"/>
         <source>Appearance</source>
         <translation>Vzhled</translation>
     </message>
     <message>
-        <location filename="Preferences/ConfigurationDialog.py" line="175"/>
+        <location filename="Preferences/ConfigurationDialog.py" line="178"/>
         <source>QScintilla</source>
         <translation>QScintilla</translation>
     </message>
     <message>
-        <location filename="Preferences/ConfigurationDialog.py" line="190"/>
+        <location filename="Preferences/ConfigurationDialog.py" line="193"/>
         <source>Style</source>
         <translation>Styl</translation>
     </message>
     <message>
-        <location filename="Preferences/ConfigurationDialog.py" line="214"/>
+        <location filename="Preferences/ConfigurationDialog.py" line="217"/>
         <source>Properties</source>
         <translation>Nastavení</translation>
     </message>
     <message>
-        <location filename="Preferences/ConfigurationDialog.py" line="382"/>
+        <location filename="Preferences/ConfigurationDialog.py" line="385"/>
         <source>Preferences</source>
         <translation>Předvolby</translation>
     </message>
     <message>
-        <location filename="Preferences/ConfigurationDialog.py" line="387"/>
+        <location filename="Preferences/ConfigurationDialog.py" line="390"/>
         <source>Please select an entry of the list 
 to display the configuration page.</source>
         <translation>Pro zobrazení strany s konfigurací vyberte položku ze seznamu.</translation>
     </message>
     <message>
-        <location filename="Preferences/ConfigurationDialog.py" line="136"/>
+        <location filename="Preferences/ConfigurationDialog.py" line="139"/>
         <source>Terminal</source>
         <translation>Terminál</translation>
     </message>
     <message>
-        <location filename="Preferences/ConfigurationDialog.py" line="269"/>
+        <location filename="Preferences/ConfigurationDialog.py" line="272"/>
         <source>Network</source>
         <translation>Síť</translation>
     </message>
     <message>
-        <location filename="Preferences/ConfigurationDialog.py" line="187"/>
+        <location filename="Preferences/ConfigurationDialog.py" line="190"/>
         <source>Spell checking</source>
         <translation>Kontrola pravopisu</translation>
     </message>
     <message>
-        <location filename="Preferences/ConfigurationDialog.py" line="152"/>
+        <location filename="Preferences/ConfigurationDialog.py" line="155"/>
         <source>Python3</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="Preferences/ConfigurationDialog.py" line="289"/>
+        <location filename="Preferences/ConfigurationDialog.py" line="292"/>
         <source>Eric Web Browser</source>
         <translation>Eric web prohlížeč</translation>
     </message>
     <message>
-        <location filename="Preferences/ConfigurationDialog.py" line="421"/>
+        <location filename="Preferences/ConfigurationDialog.py" line="424"/>
         <source>&lt;p&gt;The configuration page &lt;b&gt;{0}&lt;/b&gt; could not be loaded.&lt;/p&gt;</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="Preferences/ConfigurationDialog.py" line="118"/>
+        <location filename="Preferences/ConfigurationDialog.py" line="121"/>
         <source>Py3Flakes</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="Preferences/ConfigurationDialog.py" line="211"/>
+        <location filename="Preferences/ConfigurationDialog.py" line="214"/>
         <source>Keywords</source>
         <translation type="unfinished">Klíčové slovo</translation>
     </message>
+    <message>
+        <location filename="Preferences/ConfigurationDialog.py" line="97"/>
+        <source>Cooperation</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
+    <name>Connection</name>
+    <message>
+        <location filename="Cooperation/Connection.py" line="63"/>
+        <source>undefined</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="Cooperation/Connection.py" line="64"/>
+        <source>unknown</source>
+        <translation type="unfinished">neznámý</translation>
+    </message>
 </context>
 <context>
     <name>CookieDetailsDialog</name>
@@ -3096,6 +3211,68 @@
     </message>
 </context>
 <context>
+    <name>CooperationClient</name>
+    <message>
+        <location filename="Cooperation/CooperationClient.py" line="63"/>
+        <source>unknown</source>
+        <translation type="unfinished">neznámý</translation>
+    </message>
+    <message>
+        <location filename="Cooperation/CooperationClient.py" line="252"/>
+        <source>Illegal address: {0}:{1}
+</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
+    <name>CooperationPage</name>
+    <message>
+        <location filename="Preferences/ConfigurationPages/CooperationPage.ui" line="20"/>
+        <source>&lt;b&gt;Configure cooperation settings&lt;/b&gt;</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="Preferences/ConfigurationPages/CooperationPage.ui" line="42"/>
+        <source>Select to start the server automatically</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="Preferences/ConfigurationPages/CooperationPage.ui" line="45"/>
+        <source>Start server automatically</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="Preferences/ConfigurationPages/CooperationPage.ui" line="52"/>
+        <source>Server Port:</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="Preferences/ConfigurationPages/CooperationPage.ui" line="59"/>
+        <source>Enter the port number to listen on</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="Preferences/ConfigurationPages/CooperationPage.ui" line="91"/>
+        <source>Select to incrementally try other ports for the server</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="Preferences/ConfigurationPages/CooperationPage.ui" line="94"/>
+        <source>Try other ports for server</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="Preferences/ConfigurationPages/CooperationPage.ui" line="104"/>
+        <source>No. ports to try:</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="Preferences/ConfigurationPages/CooperationPage.ui" line="114"/>
+        <source>Enter the maximum number of additional ports to try</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
     <name>CorbaPage</name>
     <message>
         <location filename="Preferences/ConfigurationPages/CorbaPage.ui" line="16"/>
@@ -19854,12 +20031,12 @@
 <context>
     <name>Preferences</name>
     <message>
-        <location filename="Preferences/__init__.py" line="816"/>
+        <location filename="Preferences/__init__.py" line="825"/>
         <source>Export Preferences</source>
         <translation>Předvolby exportu</translation>
     </message>
     <message>
-        <location filename="Preferences/__init__.py" line="835"/>
+        <location filename="Preferences/__init__.py" line="844"/>
         <source>Import Preferences</source>
         <translation>Předvolby importu</translation>
     </message>
@@ -34518,52 +34695,52 @@
 <context>
     <name>UserInterface</name>
     <message>
-        <location filename="UI/UserInterface.py" line="232"/>
+        <location filename="UI/UserInterface.py" line="234"/>
         <source>Generating Main User Interface...</source>
         <translation>Generování hlavního uživatelského rozhraní...</translation>
     </message>
     <message>
-        <location filename="UI/UserInterface.py" line="258"/>
+        <location filename="UI/UserInterface.py" line="260"/>
         <source>Setting up connections...</source>
         <translation>Nastavení připojení...</translation>
     </message>
     <message>
-        <location filename="UI/UserInterface.py" line="504"/>
+        <location filename="UI/UserInterface.py" line="508"/>
         <source>Initializing Tools...</source>
         <translation>Inicializace nástrojů...</translation>
     </message>
     <message>
-        <location filename="UI/UserInterface.py" line="513"/>
+        <location filename="UI/UserInterface.py" line="517"/>
         <source>Registering Objects...</source>
         <translation>Registrování objektů...</translation>
     </message>
     <message>
-        <location filename="UI/UserInterface.py" line="532"/>
-        <source>Initializing Actions...</source>
-        <translation>Inicializace akcí...</translation>
-    </message>
-    <message>
-        <location filename="UI/UserInterface.py" line="534"/>
-        <source>Initializing Menus...</source>
-        <translation>Inicializace menu...</translation>
-    </message>
-    <message>
         <location filename="UI/UserInterface.py" line="536"/>
-        <source>Initializing Toolbars...</source>
-        <translation>Inicializace nástrojových lišt...</translation>
+        <source>Initializing Actions...</source>
+        <translation>Inicializace akcí...</translation>
     </message>
     <message>
         <location filename="UI/UserInterface.py" line="538"/>
+        <source>Initializing Menus...</source>
+        <translation>Inicializace menu...</translation>
+    </message>
+    <message>
+        <location filename="UI/UserInterface.py" line="540"/>
+        <source>Initializing Toolbars...</source>
+        <translation>Inicializace nástrojových lišt...</translation>
+    </message>
+    <message>
+        <location filename="UI/UserInterface.py" line="542"/>
         <source>Initializing Statusbar...</source>
         <translation>Inicializace statusbaru...</translation>
     </message>
     <message>
-        <location filename="UI/UserInterface.py" line="562"/>
+        <location filename="UI/UserInterface.py" line="566"/>
         <source>Initializing Single Application Server...</source>
         <translation>Inicializace jednouživatelského aplikačního serveru...</translation>
     </message>
     <message>
-        <location filename="UI/UserInterface.py" line="629"/>
+        <location filename="UI/UserInterface.py" line="633"/>
         <source>Loading Style Sheet</source>
         <translation>Načtení kaskádového stylu</translation>
     </message>
@@ -34573,37 +34750,37 @@
         <translation type="obsolete">&lt;p&gt;Soubor &lt;b&gt;%1&lt;/b&gt; s Qt kaskádovým stylem nelze načíst.&lt;br&gt;Důvod: %2&lt;/p&gt;</translation>
     </message>
     <message>
-        <location filename="UI/UserInterface.py" line="1300"/>
+        <location filename="UI/UserInterface.py" line="1327"/>
         <source>Project-Viewer</source>
         <translation>Prohlížeč projektu</translation>
     </message>
     <message>
-        <location filename="UI/UserInterface.py" line="1343"/>
+        <location filename="UI/UserInterface.py" line="1370"/>
         <source>Debug-Viewer</source>
         <translation>Prohlížeč debugeru</translation>
     </message>
     <message>
-        <location filename="UI/UserInterface.py" line="1428"/>
+        <location filename="UI/UserInterface.py" line="1455"/>
         <source>Log-Viewer</source>
         <translation>Prohlížeč logu</translation>
     </message>
     <message>
-        <location filename="UI/UserInterface.py" line="1449"/>
+        <location filename="UI/UserInterface.py" line="1476"/>
         <source>Task-Viewer</source>
         <translation>Prohlížeč úloh</translation>
     </message>
     <message>
-        <location filename="UI/UserInterface.py" line="1470"/>
+        <location filename="UI/UserInterface.py" line="1497"/>
         <source>Template-Viewer</source>
         <translation>Prohlížeč šablon</translation>
     </message>
     <message>
-        <location filename="UI/UserInterface.py" line="1364"/>
+        <location filename="UI/UserInterface.py" line="1391"/>
         <source>Shell</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="UI/UserInterface.py" line="1406"/>
+        <location filename="UI/UserInterface.py" line="1433"/>
         <source>File-Browser</source>
         <translation>Browser souborů</translation>
     </message>
@@ -34623,283 +34800,283 @@
         <translation type="obsolete">%1 - %2 - %3 pasivní mód</translation>
     </message>
     <message>
-        <location filename="UI/UserInterface.py" line="1252"/>
+        <location filename="UI/UserInterface.py" line="1279"/>
         <source>Quit</source>
         <translation>Konec</translation>
     </message>
     <message>
-        <location filename="UI/UserInterface.py" line="1252"/>
+        <location filename="UI/UserInterface.py" line="1279"/>
         <source>&amp;Quit</source>
         <translation>&amp;Konec</translation>
     </message>
     <message>
-        <location filename="UI/UserInterface.py" line="1252"/>
+        <location filename="UI/UserInterface.py" line="1279"/>
         <source>Ctrl+Q</source>
         <comment>File|Quit</comment>
         <translation></translation>
     </message>
     <message>
-        <location filename="UI/UserInterface.py" line="1257"/>
-        <source>Quit the IDE</source>
-        <translation>Ukončit IDE</translation>
-    </message>
-    <message>
-        <location filename="UI/UserInterface.py" line="1258"/>
-        <source>&lt;b&gt;Quit the IDE&lt;/b&gt;&lt;p&gt;This quits the IDE. Any unsaved changes may be saved first. Any Python program being debugged will be stopped and the preferences will be written to disc.&lt;/p&gt;</source>
-        <translation>&lt;b&gt;Ukončit IDE&lt;/b&gt;&lt;p&gt;Ukončí se IDE. Nejdříve by se měly uložit neuložené změny. Python programy běžící v debug procesu budou ukončeny a nastavení budou uložena.&lt;/p&gt;</translation>
-    </message>
-    <message>
-        <location filename="UI/UserInterface.py" line="1269"/>
-        <source>Edit Profile</source>
-        <translation>Editační profil</translation>
-    </message>
-    <message>
-        <location filename="UI/UserInterface.py" line="1274"/>
-        <source>Activate the edit view profile</source>
-        <translation>Aktivovat profil editace</translation>
-    </message>
-    <message>
-        <location filename="UI/UserInterface.py" line="1275"/>
-        <source>&lt;b&gt;Edit Profile&lt;/b&gt;&lt;p&gt;Activate the &quot;Edit View Profile&quot;. Windows being shown, if this profile is active, may be configured with the &quot;View Profile Configuration&quot; dialog.&lt;/p&gt;</source>
-        <translation>&lt;b&gt;Editační profil&lt;/b&gt;&lt;p&gt;Aktivování skupiny &apos;Editační profil&apos;. Okna, která se v tomto profilu zobrazí lze nastavit v dialogu &apos;Konfigurace profilu pohledů&apos;.&lt;/p&gt;</translation>
-    </message>
-    <message>
         <location filename="UI/UserInterface.py" line="1284"/>
-        <source>Debug Profile</source>
-        <translation>Debugovací profil</translation>
-    </message>
-    <message>
-        <location filename="UI/UserInterface.py" line="1289"/>
-        <source>Activate the debug view profile</source>
-        <translation>Aktivovat debugovací profil</translation>
-    </message>
-    <message>
-        <location filename="UI/UserInterface.py" line="1291"/>
-        <source>&lt;b&gt;Debug Profile&lt;/b&gt;&lt;p&gt;Activate the &quot;Debug View Profile&quot;. Windows being shown, if this profile is active, may be configured with the &quot;View Profile Configuration&quot; dialog.&lt;/p&gt;</source>
-        <translation>&lt;b&gt;Debugovací profil&lt;/b&gt;&lt;p&gt;Aktivování skupiny &apos;Debugovací profil&apos;. Okna, která se v tomto profilu zobrazí lze nastavit v dialogu &apos;Konfigurace profilu pohledů&apos;.&lt;/p&gt;</translation>
-    </message>
-    <message>
-        <location filename="UI/UserInterface.py" line="1300"/>
-        <source>&amp;Project-Viewer</source>
-        <translation>Prohlížeč &amp;projektu</translation>
+        <source>Quit the IDE</source>
+        <translation>Ukončit IDE</translation>
+    </message>
+    <message>
+        <location filename="UI/UserInterface.py" line="1285"/>
+        <source>&lt;b&gt;Quit the IDE&lt;/b&gt;&lt;p&gt;This quits the IDE. Any unsaved changes may be saved first. Any Python program being debugged will be stopped and the preferences will be written to disc.&lt;/p&gt;</source>
+        <translation>&lt;b&gt;Ukončit IDE&lt;/b&gt;&lt;p&gt;Ukončí se IDE. Nejdříve by se měly uložit neuložené změny. Python programy běžící v debug procesu budou ukončeny a nastavení budou uložena.&lt;/p&gt;</translation>
+    </message>
+    <message>
+        <location filename="UI/UserInterface.py" line="1296"/>
+        <source>Edit Profile</source>
+        <translation>Editační profil</translation>
+    </message>
+    <message>
+        <location filename="UI/UserInterface.py" line="1301"/>
+        <source>Activate the edit view profile</source>
+        <translation>Aktivovat profil editace</translation>
     </message>
     <message>
         <location filename="UI/UserInterface.py" line="1302"/>
-        <source>Toggle the Project-Viewer window</source>
-        <translation>Přepnout okno Prohlížeč projektu</translation>
-    </message>
-    <message>
-        <location filename="UI/UserInterface.py" line="1303"/>
-        <source>&lt;b&gt;Toggle the Project-Viewer window&lt;/b&gt;&lt;p&gt;If the Project-Viewer window is hidden then display it. If it is displayed then close it.&lt;/p&gt;</source>
-        <translation>&lt;b&gt;Přepnout okno Prohlížeč projektu&lt;/b&gt;&lt;p&gt;Pokud bylo okno skryto, tak se zobrazí. Pokud se zobrazovalo, tak se skryje.&lt;/p&gt;</translation>
-    </message>
-    <message>
-        <location filename="UI/UserInterface.py" line="1311"/>
-        <source>Activate Project-Viewer</source>
-        <translation>Aktivovat prohlížeč projektu</translation>
+        <source>&lt;b&gt;Edit Profile&lt;/b&gt;&lt;p&gt;Activate the &quot;Edit View Profile&quot;. Windows being shown, if this profile is active, may be configured with the &quot;View Profile Configuration&quot; dialog.&lt;/p&gt;</source>
+        <translation>&lt;b&gt;Editační profil&lt;/b&gt;&lt;p&gt;Aktivování skupiny &apos;Editační profil&apos;. Okna, která se v tomto profilu zobrazí lze nastavit v dialogu &apos;Konfigurace profilu pohledů&apos;.&lt;/p&gt;</translation>
     </message>
     <message>
         <location filename="UI/UserInterface.py" line="1311"/>
+        <source>Debug Profile</source>
+        <translation>Debugovací profil</translation>
+    </message>
+    <message>
+        <location filename="UI/UserInterface.py" line="1316"/>
+        <source>Activate the debug view profile</source>
+        <translation>Aktivovat debugovací profil</translation>
+    </message>
+    <message>
+        <location filename="UI/UserInterface.py" line="1318"/>
+        <source>&lt;b&gt;Debug Profile&lt;/b&gt;&lt;p&gt;Activate the &quot;Debug View Profile&quot;. Windows being shown, if this profile is active, may be configured with the &quot;View Profile Configuration&quot; dialog.&lt;/p&gt;</source>
+        <translation>&lt;b&gt;Debugovací profil&lt;/b&gt;&lt;p&gt;Aktivování skupiny &apos;Debugovací profil&apos;. Okna, která se v tomto profilu zobrazí lze nastavit v dialogu &apos;Konfigurace profilu pohledů&apos;.&lt;/p&gt;</translation>
+    </message>
+    <message>
+        <location filename="UI/UserInterface.py" line="1327"/>
+        <source>&amp;Project-Viewer</source>
+        <translation>Prohlížeč &amp;projektu</translation>
+    </message>
+    <message>
+        <location filename="UI/UserInterface.py" line="1329"/>
+        <source>Toggle the Project-Viewer window</source>
+        <translation>Přepnout okno Prohlížeč projektu</translation>
+    </message>
+    <message>
+        <location filename="UI/UserInterface.py" line="1330"/>
+        <source>&lt;b&gt;Toggle the Project-Viewer window&lt;/b&gt;&lt;p&gt;If the Project-Viewer window is hidden then display it. If it is displayed then close it.&lt;/p&gt;</source>
+        <translation>&lt;b&gt;Přepnout okno Prohlížeč projektu&lt;/b&gt;&lt;p&gt;Pokud bylo okno skryto, tak se zobrazí. Pokud se zobrazovalo, tak se skryje.&lt;/p&gt;</translation>
+    </message>
+    <message>
+        <location filename="UI/UserInterface.py" line="1338"/>
+        <source>Activate Project-Viewer</source>
+        <translation>Aktivovat prohlížeč projektu</translation>
+    </message>
+    <message>
+        <location filename="UI/UserInterface.py" line="1338"/>
         <source>Alt+Shift+P</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="UI/UserInterface.py" line="1354"/>
+        <location filename="UI/UserInterface.py" line="1381"/>
         <source>Alt+Shift+D</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="UI/UserInterface.py" line="1364"/>
+        <location filename="UI/UserInterface.py" line="1391"/>
         <source>&amp;Shell</source>
         <translation>&amp;Shell</translation>
     </message>
     <message>
-        <location filename="UI/UserInterface.py" line="1366"/>
+        <location filename="UI/UserInterface.py" line="1393"/>
         <source>Toggle the Shell window</source>
         <translation>Zobrazit/skrýt Shell okno</translation>
     </message>
     <message>
-        <location filename="UI/UserInterface.py" line="1367"/>
+        <location filename="UI/UserInterface.py" line="1394"/>
         <source>&lt;b&gt;Toggle the Shell window&lt;/b&gt;&lt;p&gt;If the Shell window is hidden then display it. If it is displayed then close it.&lt;/p&gt;</source>
         <translation>&lt;b&gt;Zobrazit/skrýt Shell okno&lt;/b&gt;&lt;p&gt;Pokud je shell okno skryté zobrazí se. Pokud se okno zobrazuje, tak se skryje.&lt;/p&gt;</translation>
     </message>
     <message>
-        <location filename="UI/UserInterface.py" line="1376"/>
+        <location filename="UI/UserInterface.py" line="1403"/>
         <source>Activate Shell</source>
         <translation>Aktivovat Shell</translation>
     </message>
     <message>
-        <location filename="UI/UserInterface.py" line="1376"/>
+        <location filename="UI/UserInterface.py" line="1403"/>
         <source>Alt+Shift+S</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="UI/UserInterface.py" line="1406"/>
+        <location filename="UI/UserInterface.py" line="1433"/>
         <source>File-&amp;Browser</source>
         <translation>&amp;Browser souborů</translation>
     </message>
     <message>
-        <location filename="UI/UserInterface.py" line="1408"/>
+        <location filename="UI/UserInterface.py" line="1435"/>
         <source>Toggle the File-Browser window</source>
         <translation>Zobrazit/skrýt browser souborů</translation>
     </message>
     <message>
-        <location filename="UI/UserInterface.py" line="1409"/>
+        <location filename="UI/UserInterface.py" line="1436"/>
         <source>&lt;b&gt;Toggle the File-Browser window&lt;/b&gt;&lt;p&gt;If the File-Browser window is hidden then display it. If it is displayed then close it.&lt;/p&gt;</source>
         <translation>&lt;b&gt;Zobrazit/skrýt browser souborů&lt;/b&gt;&lt;p&gt;Pokud je okno skryté zobrazí se. Pokud se okno zobrazuje, tak se skryje.&lt;/p&gt;</translation>
     </message>
     <message>
-        <location filename="UI/UserInterface.py" line="1418"/>
+        <location filename="UI/UserInterface.py" line="1445"/>
         <source>Activate File-Browser</source>
         <translation>Aktivovat Browser souborů</translation>
     </message>
     <message>
-        <location filename="UI/UserInterface.py" line="1418"/>
+        <location filename="UI/UserInterface.py" line="1445"/>
         <source>Alt+Shift+F</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="UI/UserInterface.py" line="1428"/>
+        <location filename="UI/UserInterface.py" line="1455"/>
         <source>&amp;Log-Viewer</source>
         <translation>&amp;Log prohlížeč</translation>
     </message>
     <message>
-        <location filename="UI/UserInterface.py" line="1430"/>
+        <location filename="UI/UserInterface.py" line="1457"/>
         <source>Toggle the Log-Viewer window</source>
         <translation>Zobrazit/skrýt Log prohlížeč</translation>
     </message>
     <message>
-        <location filename="UI/UserInterface.py" line="1431"/>
+        <location filename="UI/UserInterface.py" line="1458"/>
         <source>&lt;b&gt;Toggle the Log-Viewer window&lt;/b&gt;&lt;p&gt;If the Log-Viewer window is hidden then display it. If it is displayed then close it.&lt;/p&gt;</source>
         <translation>&lt;b&gt;Zobrazit/skrýt Log prohlížeč&lt;/b&gt;&lt;p&gt;Pokud je okno skryté zobrazí se. Pokud se okno zobrazuje, tak se skryje.&lt;/p&gt;</translation>
     </message>
     <message>
-        <location filename="UI/UserInterface.py" line="1439"/>
+        <location filename="UI/UserInterface.py" line="1466"/>
         <source>Activate Log-Viewer</source>
         <translation>Aktivovat Log prohlížeč</translation>
     </message>
     <message>
-        <location filename="UI/UserInterface.py" line="1439"/>
+        <location filename="UI/UserInterface.py" line="1466"/>
         <source>Alt+Shift+G</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="UI/UserInterface.py" line="1449"/>
+        <location filename="UI/UserInterface.py" line="1476"/>
         <source>T&amp;ask-Viewer</source>
         <translation>Pr&amp;ohlížeč úloh</translation>
     </message>
     <message>
-        <location filename="UI/UserInterface.py" line="1451"/>
+        <location filename="UI/UserInterface.py" line="1478"/>
         <source>Toggle the Task-Viewer window</source>
         <translation>Zobrazit/skrýt prohlížeč úloh</translation>
     </message>
     <message>
-        <location filename="UI/UserInterface.py" line="1452"/>
+        <location filename="UI/UserInterface.py" line="1479"/>
         <source>&lt;b&gt;Toggle the Task-Viewer window&lt;/b&gt;&lt;p&gt;If the Task-Viewer window is hidden then display it. If it is displayed then close it.&lt;/p&gt;</source>
         <translation>&lt;b&gt;Zobrazit/skrýt prohlížeč úloh&lt;/b&gt;&lt;p&gt;Pokud je okno skryté zobrazí se. Pokud se okno zobrazuje, tak se skryje.&lt;/p&gt;</translation>
     </message>
     <message>
-        <location filename="UI/UserInterface.py" line="1460"/>
+        <location filename="UI/UserInterface.py" line="1487"/>
         <source>Activate Task-Viewer</source>
         <translation>Aktivovat prohlížeč úloh</translation>
     </message>
     <message>
-        <location filename="UI/UserInterface.py" line="1460"/>
+        <location filename="UI/UserInterface.py" line="1487"/>
         <source>Alt+Shift+T</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="UI/UserInterface.py" line="1472"/>
+        <location filename="UI/UserInterface.py" line="1499"/>
         <source>Toggle the Template-Viewer window</source>
         <translation>Zobrazit/skrýt prohlížeč šablon</translation>
     </message>
     <message>
-        <location filename="UI/UserInterface.py" line="1474"/>
+        <location filename="UI/UserInterface.py" line="1501"/>
         <source>&lt;b&gt;Toggle the Template-Viewer window&lt;/b&gt;&lt;p&gt;If the Template-Viewer window is hidden then display it. If it is displayed then close it.&lt;/p&gt;</source>
         <translation>&lt;b&gt;Zobrazit/skrýt prohlížeč šablon&lt;/b&gt;&lt;p&gt;Pokud je okno skryté zobrazí se. Pokud se okno zobrazuje, tak se skryje.&lt;/p&gt;</translation>
     </message>
     <message>
-        <location filename="UI/UserInterface.py" line="1483"/>
+        <location filename="UI/UserInterface.py" line="1510"/>
         <source>Activate Template-Viewer</source>
         <translation>Aktivovat prohlížeč šablon</translation>
     </message>
     <message>
-        <location filename="UI/UserInterface.py" line="1333"/>
+        <location filename="UI/UserInterface.py" line="1360"/>
         <source>Alt+Shift+M</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="UI/UserInterface.py" line="1539"/>
+        <location filename="UI/UserInterface.py" line="1590"/>
         <source>What&apos;s This?</source>
         <translation>Co je to?</translation>
     </message>
     <message>
-        <location filename="UI/UserInterface.py" line="1539"/>
+        <location filename="UI/UserInterface.py" line="1590"/>
         <source>&amp;What&apos;s This?</source>
         <translation>&amp;Co je to?</translation>
     </message>
     <message>
-        <location filename="UI/UserInterface.py" line="1539"/>
+        <location filename="UI/UserInterface.py" line="1590"/>
         <source>Shift+F1</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="UI/UserInterface.py" line="1544"/>
+        <location filename="UI/UserInterface.py" line="1595"/>
         <source>Context sensitive help</source>
         <translation>Kontextově senzitivní nápověda</translation>
     </message>
     <message>
-        <location filename="UI/UserInterface.py" line="1545"/>
+        <location filename="UI/UserInterface.py" line="1596"/>
         <source>&lt;b&gt;Display context sensitive help&lt;/b&gt;&lt;p&gt;In What&apos;s This? mode, the mouse cursor shows an arrow with a question mark, and you can click on the interface elements to get a short description of what they do and how to use them. In dialogs, this feature can be accessed using the context help button in the titlebar.&lt;/p&gt;</source>
         <translation>&lt;b&gt;Zobrazit kontextově senzitivní nápovědu&lt;/b&gt;&lt;p&gt;V režimu &quot;Co je to?&quot; se nad různými prvky aplikace u kurzoru zobrazí otazník. Když pak kliknete na tyto prvky, zobrazí se krátký popis co daný prvek znamená a jak jej použít. V dialogových oknech se tato funkce spustí tlačítkem kontextové nápovědy na horní liště.&lt;/p&gt;</translation>
     </message>
     <message>
-        <location filename="UI/UserInterface.py" line="1556"/>
+        <location filename="UI/UserInterface.py" line="1607"/>
         <source>Helpviewer</source>
         <translation>Prohlížeč nápovědy</translation>
     </message>
     <message>
-        <location filename="UI/UserInterface.py" line="1556"/>
+        <location filename="UI/UserInterface.py" line="1607"/>
         <source>&amp;Helpviewer...</source>
         <translation>Pro&amp;hlížeč nápovědy...</translation>
     </message>
     <message>
-        <location filename="UI/UserInterface.py" line="1556"/>
+        <location filename="UI/UserInterface.py" line="1607"/>
         <source>F1</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="UI/UserInterface.py" line="1561"/>
+        <location filename="UI/UserInterface.py" line="1612"/>
         <source>Open the helpviewer window</source>
         <translation>Otevřít okno prohlížeče nápovědy</translation>
     </message>
     <message>
-        <location filename="UI/UserInterface.py" line="1579"/>
+        <location filename="UI/UserInterface.py" line="1630"/>
         <source>Show Versions</source>
         <translation>Zobrazit verze</translation>
     </message>
     <message>
-        <location filename="UI/UserInterface.py" line="1579"/>
+        <location filename="UI/UserInterface.py" line="1630"/>
         <source>Show &amp;Versions</source>
         <translation>Zobrazit &amp;verze</translation>
     </message>
     <message>
-        <location filename="UI/UserInterface.py" line="1581"/>
+        <location filename="UI/UserInterface.py" line="1632"/>
         <source>Display version information</source>
         <translation>Zobrazit informace o verzích</translation>
     </message>
     <message>
-        <location filename="UI/UserInterface.py" line="1582"/>
+        <location filename="UI/UserInterface.py" line="1633"/>
         <source>&lt;b&gt;Show Versions&lt;/b&gt;&lt;p&gt;Display version information.&lt;/p&gt;</source>
         <translation>&lt;b&gt;Zobrazit verze&lt;/b&gt;&lt;p&gt;Zobrazí informace o verzích.&lt;/p&gt;</translation>
     </message>
     <message>
-        <location filename="UI/UserInterface.py" line="1591"/>
+        <location filename="UI/UserInterface.py" line="1642"/>
         <source>Check for Updates</source>
         <translation>Zjistit aktualizace</translation>
     </message>
     <message>
-        <location filename="UI/UserInterface.py" line="1589"/>
+        <location filename="UI/UserInterface.py" line="1640"/>
         <source>Check for &amp;Updates...</source>
         <translation>Zjistit akt&amp;ualizace...</translation>
     </message>
@@ -34909,422 +35086,422 @@
         <translation type="obsolete">&lt;b&gt;Zjistit aktualizace&lt;/b&gt;&lt;p&gt;Zkontroluje přes internet jestli existují nějaké aktualizace Eric4.&lt;/p&gt;</translation>
     </message>
     <message>
-        <location filename="UI/UserInterface.py" line="2645"/>
+        <location filename="UI/UserInterface.py" line="2696"/>
         <source>Report Bug</source>
         <translation>Reportovat Bugy</translation>
     </message>
     <message>
-        <location filename="UI/UserInterface.py" line="1613"/>
+        <location filename="UI/UserInterface.py" line="1664"/>
         <source>Report &amp;Bug...</source>
         <translation>Reportovat &amp;Bugy...</translation>
     </message>
     <message>
-        <location filename="UI/UserInterface.py" line="1615"/>
-        <source>Report a bug</source>
-        <translation>Reportovat bug</translation>
-    </message>
-    <message>
-        <location filename="UI/UserInterface.py" line="1616"/>
-        <source>&lt;b&gt;Report Bug...&lt;/b&gt;&lt;p&gt;Opens a dialog to report a bug.&lt;/p&gt;</source>
-        <translation>&lt;b&gt;Reportovat bug...&lt;/b&gt;&lt;p&gt;Otevře se dialog pro reportování bugu.&lt;/p&gt;</translation>
-    </message>
-    <message>
-        <location filename="UI/UserInterface.py" line="2302"/>
-        <source>Unittest</source>
-        <translation></translation>
-    </message>
-    <message>
-        <location filename="UI/UserInterface.py" line="1635"/>
-        <source>&amp;Unittest...</source>
-        <translation>&amp;Unittest...</translation>
-    </message>
-    <message>
-        <location filename="UI/UserInterface.py" line="1639"/>
-        <source>Start unittest dialog</source>
-        <translation>Otevřít dialog unittestu</translation>
-    </message>
-    <message>
-        <location filename="UI/UserInterface.py" line="1640"/>
-        <source>&lt;b&gt;Unittest&lt;/b&gt;&lt;p&gt;Perform unit tests. The dialog gives you the ability to select and run a unittest suite.&lt;/p&gt;</source>
-        <translation>&lt;b&gt;Unittest&lt;/b&gt;&lt;p&gt;Provést unittesty. V dialogovém okně se nastaví který test se má provést.&lt;/p&gt;</translation>
-    </message>
-    <message>
-        <location filename="UI/UserInterface.py" line="1648"/>
-        <source>Unittest Restart</source>
-        <translation>Restart unittestu</translation>
-    </message>
-    <message>
-        <location filename="UI/UserInterface.py" line="1648"/>
-        <source>&amp;Restart Unittest...</source>
-        <translation>&amp;Restart unittestu...</translation>
-    </message>
-    <message>
-        <location filename="UI/UserInterface.py" line="1652"/>
-        <source>Restart last unittest</source>
-        <translation>Restart posledního unittestu</translation>
-    </message>
-    <message>
-        <location filename="UI/UserInterface.py" line="1653"/>
-        <source>&lt;b&gt;Restart Unittest&lt;/b&gt;&lt;p&gt;Restart the unittest performed last.&lt;/p&gt;</source>
-        <translation>&lt;b&gt;Restart unittestu&lt;/b&gt;&lt;p&gt;Restartuje se poslední provedený unittest.&lt;/p&gt;</translation>
-    </message>
-    <message>
-        <location filename="UI/UserInterface.py" line="1661"/>
-        <source>Unittest Script</source>
-        <translation></translation>
-    </message>
-    <message>
-        <location filename="UI/UserInterface.py" line="1661"/>
-        <source>Unittest &amp;Script...</source>
-        <translation>Unittest &amp;Script...</translation>
-    </message>
-    <message>
-        <location filename="UI/UserInterface.py" line="1665"/>
-        <source>Run unittest with current script</source>
-        <translation>Spustit unittest s aktuálním skriptem</translation>
-    </message>
-    <message>
         <location filename="UI/UserInterface.py" line="1666"/>
-        <source>&lt;b&gt;Unittest Script&lt;/b&gt;&lt;p&gt;Run unittest with current script.&lt;/p&gt;</source>
-        <translation>&lt;b&gt;Unittest Script&lt;/b&gt;&lt;p&gt;Spustit unittest s aktuálním skriptem.&lt;/p&gt;</translation>
-    </message>
-    <message>
-        <location filename="UI/UserInterface.py" line="3754"/>
-        <source>Unittest Project</source>
-        <translation>Unittest Projekt</translation>
-    </message>
-    <message>
-        <location filename="UI/UserInterface.py" line="1674"/>
-        <source>Unittest &amp;Project...</source>
-        <translation>Unittest &amp;Projekt...</translation>
-    </message>
-    <message>
-        <location filename="UI/UserInterface.py" line="1678"/>
-        <source>Run unittest with current project</source>
-        <translation>Spustit unittest s aktuálním projektem</translation>
-    </message>
-    <message>
-        <location filename="UI/UserInterface.py" line="1679"/>
-        <source>&lt;b&gt;Unittest Project&lt;/b&gt;&lt;p&gt;Run unittest with current project.&lt;/p&gt;</source>
-        <translation>&lt;b&gt;Unittest projekt&lt;/b&gt;&lt;p&gt;Spustit unittest s aktuálním projektem.&lt;/p&gt;</translation>
-    </message>
-    <message>
-        <location filename="UI/UserInterface.py" line="1692"/>
-        <source>Qt-Designer 4</source>
-        <translation></translation>
-    </message>
-    <message>
-        <location filename="UI/UserInterface.py" line="1695"/>
-        <source>Start Qt-Designer 4</source>
-        <translation>Spustit Qt-Designer 4</translation>
-    </message>
-    <message>
-        <location filename="UI/UserInterface.py" line="1696"/>
-        <source>&lt;b&gt;Qt-Designer 4&lt;/b&gt;&lt;p&gt;Start Qt-Designer 4.&lt;/p&gt;</source>
-        <translation>&lt;b&gt;Qt-Designer 4&lt;/b&gt;&lt;p&gt;Spustit Qt-Designer 4.&lt;/p&gt;</translation>
-    </message>
-    <message>
-        <location filename="UI/UserInterface.py" line="1709"/>
-        <source>Qt-Linguist 4</source>
+        <source>Report a bug</source>
+        <translation>Reportovat bug</translation>
+    </message>
+    <message>
+        <location filename="UI/UserInterface.py" line="1667"/>
+        <source>&lt;b&gt;Report Bug...&lt;/b&gt;&lt;p&gt;Opens a dialog to report a bug.&lt;/p&gt;</source>
+        <translation>&lt;b&gt;Reportovat bug...&lt;/b&gt;&lt;p&gt;Otevře se dialog pro reportování bugu.&lt;/p&gt;</translation>
+    </message>
+    <message>
+        <location filename="UI/UserInterface.py" line="2353"/>
+        <source>Unittest</source>
+        <translation></translation>
+    </message>
+    <message>
+        <location filename="UI/UserInterface.py" line="1686"/>
+        <source>&amp;Unittest...</source>
+        <translation>&amp;Unittest...</translation>
+    </message>
+    <message>
+        <location filename="UI/UserInterface.py" line="1690"/>
+        <source>Start unittest dialog</source>
+        <translation>Otevřít dialog unittestu</translation>
+    </message>
+    <message>
+        <location filename="UI/UserInterface.py" line="1691"/>
+        <source>&lt;b&gt;Unittest&lt;/b&gt;&lt;p&gt;Perform unit tests. The dialog gives you the ability to select and run a unittest suite.&lt;/p&gt;</source>
+        <translation>&lt;b&gt;Unittest&lt;/b&gt;&lt;p&gt;Provést unittesty. V dialogovém okně se nastaví který test se má provést.&lt;/p&gt;</translation>
+    </message>
+    <message>
+        <location filename="UI/UserInterface.py" line="1699"/>
+        <source>Unittest Restart</source>
+        <translation>Restart unittestu</translation>
+    </message>
+    <message>
+        <location filename="UI/UserInterface.py" line="1699"/>
+        <source>&amp;Restart Unittest...</source>
+        <translation>&amp;Restart unittestu...</translation>
+    </message>
+    <message>
+        <location filename="UI/UserInterface.py" line="1703"/>
+        <source>Restart last unittest</source>
+        <translation>Restart posledního unittestu</translation>
+    </message>
+    <message>
+        <location filename="UI/UserInterface.py" line="1704"/>
+        <source>&lt;b&gt;Restart Unittest&lt;/b&gt;&lt;p&gt;Restart the unittest performed last.&lt;/p&gt;</source>
+        <translation>&lt;b&gt;Restart unittestu&lt;/b&gt;&lt;p&gt;Restartuje se poslední provedený unittest.&lt;/p&gt;</translation>
+    </message>
+    <message>
+        <location filename="UI/UserInterface.py" line="1712"/>
+        <source>Unittest Script</source>
         <translation></translation>
     </message>
     <message>
         <location filename="UI/UserInterface.py" line="1712"/>
-        <source>Start Qt-Linguist 4</source>
-        <translation>Spustit Qt-Linguist 4</translation>
-    </message>
-    <message>
-        <location filename="UI/UserInterface.py" line="1713"/>
-        <source>&lt;b&gt;Qt-Linguist 4&lt;/b&gt;&lt;p&gt;Start Qt-Linguist 4.&lt;/p&gt;</source>
-        <translation>&lt;b&gt;Qt-Linguist 4&lt;/b&gt;&lt;p&gt;Spustit Qt-Linguist 4.&lt;/p&gt;</translation>
-    </message>
-    <message>
-        <location filename="UI/UserInterface.py" line="1722"/>
-        <source>UI Previewer</source>
-        <translation></translation>
-    </message>
-    <message>
-        <location filename="UI/UserInterface.py" line="1722"/>
-        <source>&amp;UI Previewer...</source>
-        <translation>&amp;UI Previewer...</translation>
+        <source>Unittest &amp;Script...</source>
+        <translation>Unittest &amp;Script...</translation>
+    </message>
+    <message>
+        <location filename="UI/UserInterface.py" line="1716"/>
+        <source>Run unittest with current script</source>
+        <translation>Spustit unittest s aktuálním skriptem</translation>
+    </message>
+    <message>
+        <location filename="UI/UserInterface.py" line="1717"/>
+        <source>&lt;b&gt;Unittest Script&lt;/b&gt;&lt;p&gt;Run unittest with current script.&lt;/p&gt;</source>
+        <translation>&lt;b&gt;Unittest Script&lt;/b&gt;&lt;p&gt;Spustit unittest s aktuálním skriptem.&lt;/p&gt;</translation>
+    </message>
+    <message>
+        <location filename="UI/UserInterface.py" line="3841"/>
+        <source>Unittest Project</source>
+        <translation>Unittest Projekt</translation>
     </message>
     <message>
         <location filename="UI/UserInterface.py" line="1725"/>
-        <source>Start the UI Previewer</source>
-        <translation>Spustit UI Previewer</translation>
-    </message>
-    <message>
-        <location filename="UI/UserInterface.py" line="1726"/>
-        <source>&lt;b&gt;UI Previewer&lt;/b&gt;&lt;p&gt;Start the UI Previewer.&lt;/p&gt;</source>
-        <translation>&lt;b&gt;UI Previewer&lt;/b&gt;&lt;p&gt;Spustit UI Previewer.&lt;/p&gt;</translation>
-    </message>
-    <message>
-        <location filename="UI/UserInterface.py" line="1733"/>
-        <source>Translations Previewer</source>
-        <translation>Náhled překladů</translation>
-    </message>
-    <message>
-        <location filename="UI/UserInterface.py" line="1733"/>
-        <source>&amp;Translations Previewer...</source>
-        <translation>Náhled &amp;překladů...</translation>
-    </message>
-    <message>
-        <location filename="UI/UserInterface.py" line="1736"/>
-        <source>Start the Translations Previewer</source>
-        <translation>Spustit Previewer překladů</translation>
-    </message>
-    <message>
-        <location filename="UI/UserInterface.py" line="1737"/>
-        <source>&lt;b&gt;Translations Previewer&lt;/b&gt;&lt;p&gt;Start the Translations Previewer.&lt;/p&gt;</source>
-        <translation>&lt;b&gt;Previewer překladů&lt;/b&gt;&lt;p&gt;Spustit Previewer překladů.&lt;/p&gt;</translation>
-    </message>
-    <message>
-        <location filename="UI/UserInterface.py" line="1744"/>
-        <source>Compare Files</source>
-        <translation>Porovnat soubory</translation>
-    </message>
-    <message>
-        <location filename="UI/UserInterface.py" line="1744"/>
-        <source>&amp;Compare Files...</source>
-        <translation>&amp;Porovnat soubory...</translation>
-    </message>
-    <message>
-        <location filename="UI/UserInterface.py" line="1759"/>
-        <source>Compare two files</source>
-        <translation>Porovnat dva soubory</translation>
-    </message>
-    <message>
-        <location filename="UI/UserInterface.py" line="1748"/>
-        <source>&lt;b&gt;Compare Files&lt;/b&gt;&lt;p&gt;Open a dialog to compare two files.&lt;/p&gt;</source>
-        <translation>&lt;b&gt;Porovnat soubory&lt;/b&gt;&lt;p&gt;Otevře dialog pro porovnání dvou souborů.&lt;/p&gt;</translation>
-    </message>
-    <message>
-        <location filename="UI/UserInterface.py" line="1755"/>
-        <source>Compare Files side by side</source>
-        <translation>Porovnat soubory stranu proti straně</translation>
-    </message>
-    <message>
-        <location filename="UI/UserInterface.py" line="1755"/>
-        <source>Compare Files &amp;side by side...</source>
-        <translation>Porovnat soubory &amp;stranu proti straně...</translation>
+        <source>Unittest &amp;Project...</source>
+        <translation>Unittest &amp;Projekt...</translation>
+    </message>
+    <message>
+        <location filename="UI/UserInterface.py" line="1729"/>
+        <source>Run unittest with current project</source>
+        <translation>Spustit unittest s aktuálním projektem</translation>
+    </message>
+    <message>
+        <location filename="UI/UserInterface.py" line="1730"/>
+        <source>&lt;b&gt;Unittest Project&lt;/b&gt;&lt;p&gt;Run unittest with current project.&lt;/p&gt;</source>
+        <translation>&lt;b&gt;Unittest projekt&lt;/b&gt;&lt;p&gt;Spustit unittest s aktuálním projektem.&lt;/p&gt;</translation>
+    </message>
+    <message>
+        <location filename="UI/UserInterface.py" line="1743"/>
+        <source>Qt-Designer 4</source>
+        <translation></translation>
+    </message>
+    <message>
+        <location filename="UI/UserInterface.py" line="1746"/>
+        <source>Start Qt-Designer 4</source>
+        <translation>Spustit Qt-Designer 4</translation>
+    </message>
+    <message>
+        <location filename="UI/UserInterface.py" line="1747"/>
+        <source>&lt;b&gt;Qt-Designer 4&lt;/b&gt;&lt;p&gt;Start Qt-Designer 4.&lt;/p&gt;</source>
+        <translation>&lt;b&gt;Qt-Designer 4&lt;/b&gt;&lt;p&gt;Spustit Qt-Designer 4.&lt;/p&gt;</translation>
     </message>
     <message>
         <location filename="UI/UserInterface.py" line="1760"/>
+        <source>Qt-Linguist 4</source>
+        <translation></translation>
+    </message>
+    <message>
+        <location filename="UI/UserInterface.py" line="1763"/>
+        <source>Start Qt-Linguist 4</source>
+        <translation>Spustit Qt-Linguist 4</translation>
+    </message>
+    <message>
+        <location filename="UI/UserInterface.py" line="1764"/>
+        <source>&lt;b&gt;Qt-Linguist 4&lt;/b&gt;&lt;p&gt;Start Qt-Linguist 4.&lt;/p&gt;</source>
+        <translation>&lt;b&gt;Qt-Linguist 4&lt;/b&gt;&lt;p&gt;Spustit Qt-Linguist 4.&lt;/p&gt;</translation>
+    </message>
+    <message>
+        <location filename="UI/UserInterface.py" line="1773"/>
+        <source>UI Previewer</source>
+        <translation></translation>
+    </message>
+    <message>
+        <location filename="UI/UserInterface.py" line="1773"/>
+        <source>&amp;UI Previewer...</source>
+        <translation>&amp;UI Previewer...</translation>
+    </message>
+    <message>
+        <location filename="UI/UserInterface.py" line="1776"/>
+        <source>Start the UI Previewer</source>
+        <translation>Spustit UI Previewer</translation>
+    </message>
+    <message>
+        <location filename="UI/UserInterface.py" line="1777"/>
+        <source>&lt;b&gt;UI Previewer&lt;/b&gt;&lt;p&gt;Start the UI Previewer.&lt;/p&gt;</source>
+        <translation>&lt;b&gt;UI Previewer&lt;/b&gt;&lt;p&gt;Spustit UI Previewer.&lt;/p&gt;</translation>
+    </message>
+    <message>
+        <location filename="UI/UserInterface.py" line="1784"/>
+        <source>Translations Previewer</source>
+        <translation>Náhled překladů</translation>
+    </message>
+    <message>
+        <location filename="UI/UserInterface.py" line="1784"/>
+        <source>&amp;Translations Previewer...</source>
+        <translation>Náhled &amp;překladů...</translation>
+    </message>
+    <message>
+        <location filename="UI/UserInterface.py" line="1787"/>
+        <source>Start the Translations Previewer</source>
+        <translation>Spustit Previewer překladů</translation>
+    </message>
+    <message>
+        <location filename="UI/UserInterface.py" line="1788"/>
+        <source>&lt;b&gt;Translations Previewer&lt;/b&gt;&lt;p&gt;Start the Translations Previewer.&lt;/p&gt;</source>
+        <translation>&lt;b&gt;Previewer překladů&lt;/b&gt;&lt;p&gt;Spustit Previewer překladů.&lt;/p&gt;</translation>
+    </message>
+    <message>
+        <location filename="UI/UserInterface.py" line="1795"/>
+        <source>Compare Files</source>
+        <translation>Porovnat soubory</translation>
+    </message>
+    <message>
+        <location filename="UI/UserInterface.py" line="1795"/>
+        <source>&amp;Compare Files...</source>
+        <translation>&amp;Porovnat soubory...</translation>
+    </message>
+    <message>
+        <location filename="UI/UserInterface.py" line="1810"/>
+        <source>Compare two files</source>
+        <translation>Porovnat dva soubory</translation>
+    </message>
+    <message>
+        <location filename="UI/UserInterface.py" line="1799"/>
+        <source>&lt;b&gt;Compare Files&lt;/b&gt;&lt;p&gt;Open a dialog to compare two files.&lt;/p&gt;</source>
+        <translation>&lt;b&gt;Porovnat soubory&lt;/b&gt;&lt;p&gt;Otevře dialog pro porovnání dvou souborů.&lt;/p&gt;</translation>
+    </message>
+    <message>
+        <location filename="UI/UserInterface.py" line="1806"/>
+        <source>Compare Files side by side</source>
+        <translation>Porovnat soubory stranu proti straně</translation>
+    </message>
+    <message>
+        <location filename="UI/UserInterface.py" line="1806"/>
+        <source>Compare Files &amp;side by side...</source>
+        <translation>Porovnat soubory &amp;stranu proti straně...</translation>
+    </message>
+    <message>
+        <location filename="UI/UserInterface.py" line="1811"/>
         <source>&lt;b&gt;Compare Files side by side&lt;/b&gt;&lt;p&gt;Open a dialog to compare two files and show the result side by side.&lt;/p&gt;</source>
         <translation>&lt;b&gt;Porovnat soubory stranu proti straně&lt;/b&gt;&lt;p&gt;Otevře dialog pro porovnání souborů a zobrazení rozdílů strany proti straně.&lt;/p&gt;</translation>
     </message>
     <message>
-        <location filename="UI/UserInterface.py" line="1816"/>
+        <location filename="UI/UserInterface.py" line="1867"/>
         <source>Preferences</source>
         <translation>Nastavení</translation>
     </message>
     <message>
-        <location filename="UI/UserInterface.py" line="1816"/>
+        <location filename="UI/UserInterface.py" line="1867"/>
         <source>&amp;Preferences...</source>
         <translation>Na&amp;stavení...</translation>
     </message>
     <message>
-        <location filename="UI/UserInterface.py" line="1819"/>
+        <location filename="UI/UserInterface.py" line="1870"/>
         <source>Set the prefered configuration</source>
         <translation>Nastavení konfigurace</translation>
     </message>
     <message>
-        <location filename="UI/UserInterface.py" line="1820"/>
+        <location filename="UI/UserInterface.py" line="1871"/>
         <source>&lt;b&gt;Preferences&lt;/b&gt;&lt;p&gt;Set the configuration items of the application with your prefered values.&lt;/p&gt;</source>
         <translation>&lt;b&gt;Nastavení&lt;/b&gt;&lt;p&gt;Upravit konfiguraci aplikace podle požadavků uživatele.&lt;/p&gt;</translation>
     </message>
     <message>
-        <location filename="UI/UserInterface.py" line="1851"/>
+        <location filename="UI/UserInterface.py" line="1902"/>
         <source>Reload APIs</source>
         <translation>Obnovit API</translation>
     </message>
     <message>
-        <location filename="UI/UserInterface.py" line="1851"/>
+        <location filename="UI/UserInterface.py" line="1902"/>
         <source>Reload &amp;APIs</source>
         <translation>Obnovit &amp;API</translation>
     </message>
     <message>
-        <location filename="UI/UserInterface.py" line="1864"/>
+        <location filename="UI/UserInterface.py" line="1915"/>
         <source>Reload the API information</source>
         <translation>Obnovit API nastavení</translation>
     </message>
     <message>
-        <location filename="UI/UserInterface.py" line="1854"/>
-        <source>&lt;b&gt;Reload APIs&lt;/b&gt;&lt;p&gt;Reload the API information.&lt;/p&gt;</source>
-        <translation>&lt;b&gt;Obnovit API&lt;/b&gt;&lt;p&gt;Obnovit API nastavení.&lt;/p&gt;</translation>
-    </message>
-    <message>
-        <location filename="UI/UserInterface.py" line="1874"/>
-        <source>View Profiles</source>
-        <translation>Profily pohledů</translation>
-    </message>
-    <message>
-        <location filename="UI/UserInterface.py" line="1874"/>
-        <source>&amp;View Profiles...</source>
-        <translation>Profily &amp;pohledů...</translation>
-    </message>
-    <message>
-        <location filename="UI/UserInterface.py" line="1877"/>
-        <source>Configure view profiles</source>
-        <translation>Konfigurace profilů pohledů</translation>
-    </message>
-    <message>
-        <location filename="UI/UserInterface.py" line="1878"/>
-        <source>&lt;b&gt;View Profiles&lt;/b&gt;&lt;p&gt;Configure the view profiles. With this dialog you may set the visibility of the various windows for the predetermined view profiles.&lt;/p&gt;</source>
-        <translation>&lt;b&gt;Profily pohledů&lt;/b&gt;&lt;p&gt;Konfigurace profilu pohledů. V tomto dialogu můžete nastavit zobrazování různých typů pohledů - editačních oken.&lt;/p&gt;</translation>
-    </message>
-    <message>
-        <location filename="UI/UserInterface.py" line="1901"/>
-        <source>Keyboard Shortcuts</source>
-        <translation>Klávesové zkratky</translation>
-    </message>
-    <message>
-        <location filename="UI/UserInterface.py" line="1901"/>
-        <source>Keyboard &amp;Shortcuts...</source>
-        <translation>Klávesové &amp;zkratky...</translation>
-    </message>
-    <message>
-        <location filename="UI/UserInterface.py" line="1904"/>
-        <source>Set the keyboard shortcuts</source>
-        <translation>Nastavení klávesových zkratek</translation>
-    </message>
-    <message>
         <location filename="UI/UserInterface.py" line="1905"/>
+        <source>&lt;b&gt;Reload APIs&lt;/b&gt;&lt;p&gt;Reload the API information.&lt;/p&gt;</source>
+        <translation>&lt;b&gt;Obnovit API&lt;/b&gt;&lt;p&gt;Obnovit API nastavení.&lt;/p&gt;</translation>
+    </message>
+    <message>
+        <location filename="UI/UserInterface.py" line="1925"/>
+        <source>View Profiles</source>
+        <translation>Profily pohledů</translation>
+    </message>
+    <message>
+        <location filename="UI/UserInterface.py" line="1925"/>
+        <source>&amp;View Profiles...</source>
+        <translation>Profily &amp;pohledů...</translation>
+    </message>
+    <message>
+        <location filename="UI/UserInterface.py" line="1928"/>
+        <source>Configure view profiles</source>
+        <translation>Konfigurace profilů pohledů</translation>
+    </message>
+    <message>
+        <location filename="UI/UserInterface.py" line="1929"/>
+        <source>&lt;b&gt;View Profiles&lt;/b&gt;&lt;p&gt;Configure the view profiles. With this dialog you may set the visibility of the various windows for the predetermined view profiles.&lt;/p&gt;</source>
+        <translation>&lt;b&gt;Profily pohledů&lt;/b&gt;&lt;p&gt;Konfigurace profilu pohledů. V tomto dialogu můžete nastavit zobrazování různých typů pohledů - editačních oken.&lt;/p&gt;</translation>
+    </message>
+    <message>
+        <location filename="UI/UserInterface.py" line="1952"/>
+        <source>Keyboard Shortcuts</source>
+        <translation>Klávesové zkratky</translation>
+    </message>
+    <message>
+        <location filename="UI/UserInterface.py" line="1952"/>
+        <source>Keyboard &amp;Shortcuts...</source>
+        <translation>Klávesové &amp;zkratky...</translation>
+    </message>
+    <message>
+        <location filename="UI/UserInterface.py" line="1955"/>
+        <source>Set the keyboard shortcuts</source>
+        <translation>Nastavení klávesových zkratek</translation>
+    </message>
+    <message>
+        <location filename="UI/UserInterface.py" line="1956"/>
         <source>&lt;b&gt;Keyboard Shortcuts&lt;/b&gt;&lt;p&gt;Set the keyboard shortcuts of the application with your prefered values.&lt;/p&gt;</source>
         <translation>&lt;b&gt;Klávesové zkratky&lt;/b&gt;&lt;p&gt;Nastavení klávesových zkratek aplikace podle zvyklostí uživatele.&lt;/p&gt;</translation>
     </message>
     <message>
-        <location filename="UI/UserInterface.py" line="4712"/>
+        <location filename="UI/UserInterface.py" line="4799"/>
         <source>Export Keyboard Shortcuts</source>
         <translation>Exportovat klávesové zkratky</translation>
     </message>
     <message>
-        <location filename="UI/UserInterface.py" line="1913"/>
+        <location filename="UI/UserInterface.py" line="1964"/>
         <source>&amp;Export Keyboard Shortcuts...</source>
         <translation>&amp;Exportovat klávesové zkratky...</translation>
     </message>
     <message>
-        <location filename="UI/UserInterface.py" line="1917"/>
+        <location filename="UI/UserInterface.py" line="1968"/>
         <source>Export the keyboard shortcuts</source>
         <translation>Export klávesových zkratek</translation>
     </message>
     <message>
-        <location filename="UI/UserInterface.py" line="1918"/>
+        <location filename="UI/UserInterface.py" line="1969"/>
         <source>&lt;b&gt;Export Keyboard Shortcuts&lt;/b&gt;&lt;p&gt;Export the keyboard shortcuts of the application.&lt;/p&gt;</source>
         <translation>&lt;b&gt;Export klávesových zkratek&lt;/b&gt;&lt;p&gt;Exportují se klávesové zkratky z aplikace.&lt;/p&gt;</translation>
     </message>
     <message>
-        <location filename="UI/UserInterface.py" line="4721"/>
+        <location filename="UI/UserInterface.py" line="4808"/>
         <source>Import Keyboard Shortcuts</source>
         <translation>Import klávesových zkratek</translation>
     </message>
     <message>
-        <location filename="UI/UserInterface.py" line="1926"/>
+        <location filename="UI/UserInterface.py" line="1977"/>
         <source>&amp;Import Keyboard Shortcuts...</source>
         <translation>&amp;Import klávesových zkratek...</translation>
     </message>
     <message>
-        <location filename="UI/UserInterface.py" line="1930"/>
+        <location filename="UI/UserInterface.py" line="1981"/>
         <source>Import the keyboard shortcuts</source>
         <translation>Import klávesových zkratek</translation>
     </message>
     <message>
-        <location filename="UI/UserInterface.py" line="1931"/>
+        <location filename="UI/UserInterface.py" line="1982"/>
         <source>&lt;b&gt;Import Keyboard Shortcuts&lt;/b&gt;&lt;p&gt;Import the keyboard shortcuts of the application.&lt;/p&gt;</source>
         <translation>&lt;b&gt;Import klávesových zkratek&lt;/b&gt;&lt;p&gt;Do aplikace se importují klávesové zkratky.&lt;/p&gt;</translation>
     </message>
     <message>
-        <location filename="UI/UserInterface.py" line="1939"/>
+        <location filename="UI/UserInterface.py" line="1990"/>
         <source>Activate current editor</source>
         <translation>Aktivovat aktuální editor</translation>
     </message>
     <message>
-        <location filename="UI/UserInterface.py" line="1939"/>
+        <location filename="UI/UserInterface.py" line="1990"/>
         <source>Alt+Shift+E</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="UI/UserInterface.py" line="1949"/>
+        <location filename="UI/UserInterface.py" line="2000"/>
         <source>Ctrl+Alt+Tab</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="UI/UserInterface.py" line="1957"/>
+        <location filename="UI/UserInterface.py" line="2008"/>
         <source>Shift+Ctrl+Alt+Tab</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="UI/UserInterface.py" line="2038"/>
+        <location filename="UI/UserInterface.py" line="2089"/>
         <source>Qt4 Documentation</source>
         <translation>Qt4 dokumentace</translation>
     </message>
     <message>
-        <location filename="UI/UserInterface.py" line="2038"/>
+        <location filename="UI/UserInterface.py" line="2089"/>
         <source>Qt&amp;4 Documentation</source>
         <translation>Qt&amp;4 dokumentace</translation>
     </message>
     <message>
-        <location filename="UI/UserInterface.py" line="2040"/>
+        <location filename="UI/UserInterface.py" line="2091"/>
         <source>Open Qt4 Documentation</source>
         <translation>Otevřít Qt4 dokumentaci</translation>
     </message>
     <message>
-        <location filename="UI/UserInterface.py" line="2041"/>
+        <location filename="UI/UserInterface.py" line="2092"/>
         <source>&lt;b&gt;Qt4 Documentation&lt;/b&gt;&lt;p&gt;Display the Qt4 Documentation. Dependant upon your settings, this will either show the help in Eric&apos;s internal help viewer, or execute a web browser or Qt Assistant. &lt;/p&gt;</source>
         <translation>&lt;b&gt;Qt4 dokumentace&lt;/b&gt;&lt;p&gt;Zobrazit Qt4 dokumentaci. V závislosti na vašich nastaveních zobrazí interní Eric prohlížeč nápovědy nebo spustí webový prohlížeč nebo Qt Assistant.&lt;/p&gt;</translation>
     </message>
     <message>
-        <location filename="UI/UserInterface.py" line="2050"/>
+        <location filename="UI/UserInterface.py" line="2101"/>
         <source>PyQt4 Documentation</source>
         <translation>PyQt4 dokumentace</translation>
     </message>
     <message>
-        <location filename="UI/UserInterface.py" line="2050"/>
+        <location filename="UI/UserInterface.py" line="2101"/>
         <source>P&amp;yQt4 Documentation</source>
         <translation>P&amp;yQt4 dokumentace</translation>
     </message>
     <message>
-        <location filename="UI/UserInterface.py" line="2052"/>
+        <location filename="UI/UserInterface.py" line="2103"/>
         <source>Open PyQt4 Documentation</source>
         <translation>Otevřít PyQt4 dokumentaci</translation>
     </message>
     <message>
-        <location filename="UI/UserInterface.py" line="2053"/>
+        <location filename="UI/UserInterface.py" line="2104"/>
         <source>&lt;b&gt;PyQt4 Documentation&lt;/b&gt;&lt;p&gt;Display the PyQt4 Documentation. Dependant upon your settings, this will either show the help in Eric&apos;s internal help viewer, or execute a web browser or Qt Assistant. &lt;/p&gt;</source>
         <translation>&lt;b&gt;PyQt4 dokumentace&lt;/b&gt;&lt;p&gt;Zobrazit PyQt4 dokumentaci. V závislosti na vašich nastaveních zobrazí interní Eric prohlížeč nápovědy nebo spustí webový prohlížeč nebo Qt Assistant.&lt;/p&gt;</translation>
     </message>
     <message>
-        <location filename="UI/UserInterface.py" line="2066"/>
+        <location filename="UI/UserInterface.py" line="2117"/>
         <source>Python Documentation</source>
         <translation>Python dokumentace</translation>
     </message>
     <message>
-        <location filename="UI/UserInterface.py" line="2066"/>
+        <location filename="UI/UserInterface.py" line="2117"/>
         <source>&amp;Python Documentation</source>
         <translation>&amp;Python dokumentace</translation>
     </message>
     <message>
-        <location filename="UI/UserInterface.py" line="2068"/>
+        <location filename="UI/UserInterface.py" line="2119"/>
         <source>Open Python Documentation</source>
         <translation>Otevřít Python dokumentaci</translation>
     </message>
     <message>
-        <location filename="UI/UserInterface.py" line="2069"/>
+        <location filename="UI/UserInterface.py" line="2120"/>
         <source>&lt;b&gt;Python Documentation&lt;/b&gt;&lt;p&gt;Display the python documentation. If no documentation directory is configured, the location of the python documentation is assumed to be the doc directory underneath the location of the python executable on Windows and &lt;i&gt;/usr/share/doc/packages/python/html&lt;/i&gt; on Unix. Set PYTHONDOCDIR in your environment to override this. &lt;/p&gt;</source>
         <translation>&lt;b&gt;Python dokumentace&lt;/b&gt;&lt;p&gt;Zobrazí python dokumentaci. Pokud není adresář dokumentace nastaven, tak ve Windows se dokumentace hledá v adresáři odkud se python spouští a na Unixu v doc adresáři &lt;i&gt;/usr/share/doc/packages/python/html&lt;/i&gt;. Pokud chcete jiný, nastavte si proměnnou prostředí PYTHONDOCDIR.&lt;/p&gt;</translation>
     </message>
     <message>
-        <location filename="UI/UserInterface.py" line="2085"/>
+        <location filename="UI/UserInterface.py" line="2136"/>
         <source>Eric API Documentation</source>
         <translation>Eric API dokumentace</translation>
     </message>
     <message>
-        <location filename="UI/UserInterface.py" line="2085"/>
+        <location filename="UI/UserInterface.py" line="2136"/>
         <source>&amp;Eric API Documentation</source>
         <translation>&amp;Eric API dokumentace</translation>
     </message>
     <message>
-        <location filename="UI/UserInterface.py" line="2087"/>
+        <location filename="UI/UserInterface.py" line="2138"/>
         <source>Open Eric API Documentation</source>
         <translation>Otevřít Eric API dokumentaci</translation>
     </message>
@@ -35334,102 +35511,102 @@
         <translation type="obsolete">&lt;b&gt;Eric API dokumentace&lt;/b&gt;&lt;p&gt;Zobrazit Eric API dokumentaci. Umístění dokumentace je v podadresáři Documentation/Source v instalačním adresáři eric4.&lt;/p&gt;</translation>
     </message>
     <message>
-        <location filename="UI/UserInterface.py" line="2141"/>
+        <location filename="UI/UserInterface.py" line="2192"/>
         <source>&amp;Unittest</source>
         <translation>&amp;Unittest</translation>
     </message>
     <message>
-        <location filename="UI/UserInterface.py" line="2156"/>
+        <location filename="UI/UserInterface.py" line="2207"/>
         <source>E&amp;xtras</source>
         <translation>E&amp;xtra funkce</translation>
     </message>
     <message>
-        <location filename="UI/UserInterface.py" line="2170"/>
+        <location filename="UI/UserInterface.py" line="2221"/>
         <source>&amp;Tools</source>
         <translation>&amp;Nástroje</translation>
     </message>
     <message>
-        <location filename="UI/UserInterface.py" line="2175"/>
+        <location filename="UI/UserInterface.py" line="2226"/>
         <source>Select Tool Group</source>
         <translation>Vybrat skupinu nástrojů</translation>
     </message>
     <message>
-        <location filename="UI/UserInterface.py" line="2183"/>
+        <location filename="UI/UserInterface.py" line="2234"/>
         <source>Se&amp;ttings</source>
         <translation>Nas&amp;tavení</translation>
     </message>
     <message>
-        <location filename="UI/UserInterface.py" line="2201"/>
+        <location filename="UI/UserInterface.py" line="2252"/>
         <source>&amp;Window</source>
         <translation>O&amp;kno</translation>
     </message>
     <message>
-        <location filename="UI/UserInterface.py" line="2208"/>
+        <location filename="UI/UserInterface.py" line="2259"/>
         <source>&amp;Toolbars</source>
         <translation>&amp;Toolbary</translation>
     </message>
     <message>
-        <location filename="UI/UserInterface.py" line="2235"/>
+        <location filename="UI/UserInterface.py" line="2286"/>
         <source>&amp;Help</source>
         <translation>&amp;Nápověda</translation>
     </message>
     <message>
-        <location filename="UI/UserInterface.py" line="2301"/>
+        <location filename="UI/UserInterface.py" line="2352"/>
         <source>Tools</source>
         <translation>Nástroje</translation>
     </message>
     <message>
-        <location filename="UI/UserInterface.py" line="2303"/>
+        <location filename="UI/UserInterface.py" line="2354"/>
         <source>Settings</source>
         <translation>Nastavení</translation>
     </message>
     <message>
-        <location filename="UI/UserInterface.py" line="3970"/>
+        <location filename="UI/UserInterface.py" line="4057"/>
         <source>Help</source>
         <translation>Nápověda</translation>
     </message>
     <message>
-        <location filename="UI/UserInterface.py" line="2305"/>
+        <location filename="UI/UserInterface.py" line="2356"/>
         <source>Profiles</source>
         <translation>Profily</translation>
     </message>
     <message>
-        <location filename="UI/UserInterface.py" line="2600"/>
+        <location filename="UI/UserInterface.py" line="2651"/>
         <source>&lt;h3&gt;Version Numbers&lt;/h3&gt;&lt;table&gt;</source>
         <translation>&lt;h3&gt;Čísla verzí&lt;/h3&gt;&lt;table&gt;</translation>
     </message>
     <message>
-        <location filename="UI/UserInterface.py" line="5435"/>
+        <location filename="UI/UserInterface.py" line="5522"/>
         <source>&lt;/table&gt;</source>
         <translation>&lt;/table&gt;</translation>
     </message>
     <message>
-        <location filename="UI/UserInterface.py" line="2645"/>
+        <location filename="UI/UserInterface.py" line="2696"/>
         <source>Email address or mail server address is empty. Please configure your Email settings in the Preferences Dialog.</source>
         <translation>Emailová adresa nebo mail server adresa jsou prázdné. Prosím, nastavte váš email v dialogovém okně Nastavení.</translation>
     </message>
     <message>
-        <location filename="UI/UserInterface.py" line="2937"/>
-        <source>Configure Tool Groups ...</source>
-        <translation>Konfigurace Skupin nástrojů...</translation>
-    </message>
-    <message>
-        <location filename="UI/UserInterface.py" line="2940"/>
-        <source>Configure current Tool Group ...</source>
-        <translation>Konfigurace aktuální skupiny nástrojů...</translation>
-    </message>
-    <message>
         <location filename="UI/UserInterface.py" line="2988"/>
+        <source>Configure Tool Groups ...</source>
+        <translation>Konfigurace Skupin nástrojů...</translation>
+    </message>
+    <message>
+        <location filename="UI/UserInterface.py" line="2991"/>
+        <source>Configure current Tool Group ...</source>
+        <translation>Konfigurace aktuální skupiny nástrojů...</translation>
+    </message>
+    <message>
+        <location filename="UI/UserInterface.py" line="3039"/>
         <source>&amp;Builtin Tools</source>
         <translation>&amp;Vestavěné nástroje</translation>
     </message>
     <message>
-        <location filename="UI/UserInterface.py" line="3754"/>
+        <location filename="UI/UserInterface.py" line="3841"/>
         <source>There is no main script defined for the current project. Aborting</source>
         <translation>V aktuálním projektu není definován hlavní skript. Zrušeno</translation>
     </message>
     <message>
-        <location filename="UI/UserInterface.py" line="4078"/>
+        <location filename="UI/UserInterface.py" line="4165"/>
         <source>Problem</source>
         <translation>Problém</translation>
     </message>
@@ -35439,7 +35616,7 @@
         <translation type="obsolete">&lt;p&gt;Soubor &lt;b&gt;%1&lt;/b&gt; neexistuje nebo má nulovou délku.&lt;/p&gt;</translation>
     </message>
     <message>
-        <location filename="UI/UserInterface.py" line="4214"/>
+        <location filename="UI/UserInterface.py" line="4301"/>
         <source>Process Generation Error</source>
         <translation>Chyba v procesu generování</translation>
     </message>
@@ -35459,17 +35636,17 @@
         <translation type="obsolete">&lt;p&gt;Nemohu spustit Qt-Assistant.&lt;br&gt;Ověřte jestli je dostupný jako &lt;b&gt;%1&lt;/b&gt;.&lt;/p&gt;</translation>
     </message>
     <message>
-        <location filename="UI/UserInterface.py" line="3958"/>
+        <location filename="UI/UserInterface.py" line="4045"/>
         <source>Open Browser</source>
         <translation>Otevřít browser</translation>
     </message>
     <message>
-        <location filename="UI/UserInterface.py" line="3958"/>
+        <location filename="UI/UserInterface.py" line="4045"/>
         <source>Could not start a web browser</source>
         <translation>Nemohu spustit web browser</translation>
     </message>
     <message>
-        <location filename="UI/UserInterface.py" line="3970"/>
+        <location filename="UI/UserInterface.py" line="4057"/>
         <source>Currently no custom viewer is selected. Please use the preferences dialog to specify one.</source>
         <translation>Aktuálně není vybrán žádný prohlížeč. Prosím otevřete Nastavení a nějaký vyberte.</translation>
     </message>
@@ -35479,7 +35656,7 @@
         <translation type="obsolete">&lt;p&gt;Nemohu spustit aktuální prohlížeč.&lt;br&gt;Ověřte jestli je dostupný jako &lt;b&gt;%1&lt;/b&gt;.&lt;/p&gt;</translation>
     </message>
     <message>
-        <location filename="UI/UserInterface.py" line="4001"/>
+        <location filename="UI/UserInterface.py" line="4088"/>
         <source>&lt;p&gt;Could not start the help viewer.&lt;br&gt;Ensure that it is available as &lt;b&gt;hh&lt;/b&gt;.&lt;/p&gt;</source>
         <translation>&lt;p&gt;Nemohu spustit prohlížeč nápovědy.&lt;br&gt;Ověřte jestli je dostupný jako &lt;b&gt;hh&lt;/b&gt;.&lt;/p&gt;</translation>
     </message>
@@ -35511,7 +35688,7 @@
         <translation type="obsolete">Proces &apos;%1&apos; byl ukončen.</translation>
     </message>
     <message>
-        <location filename="UI/UserInterface.py" line="4498"/>
+        <location filename="UI/UserInterface.py" line="4585"/>
         <source>Documentation Missing</source>
         <translation>Dokumentace chybí</translation>
     </message>
@@ -35521,12 +35698,12 @@
         <translation type="obsolete">&lt;p&gt;Adresář dokumentace &quot;&lt;b&gt;%1&lt;/b&gt;&quot; nebylo nalezen.&lt;/p&gt;</translation>
     </message>
     <message>
-        <location filename="UI/UserInterface.py" line="4483"/>
+        <location filename="UI/UserInterface.py" line="4570"/>
         <source>Documentation</source>
         <translation>Dokumentace</translation>
     </message>
     <message>
-        <location filename="UI/UserInterface.py" line="4398"/>
+        <location filename="UI/UserInterface.py" line="4485"/>
         <source>&lt;p&gt;The PyQt4 documentation starting point has not been configured.&lt;/p&gt;</source>
         <translation>&lt;p&gt;Adresář PyQt4 dokumentace není nakonfigurován.&lt;/p&gt;</translation>
     </message>
@@ -35546,7 +35723,7 @@
         <translation type="obsolete">Soubor eric4 klávesových zkratek (*.e4k *.e4kz);;Soubor eric3 klávesových zkratek (*.e3k *.e3kz)</translation>
     </message>
     <message>
-        <location filename="UI/UserInterface.py" line="4845"/>
+        <location filename="UI/UserInterface.py" line="4932"/>
         <source>Save tasks</source>
         <translation>Uložit úlohy</translation>
     </message>
@@ -35556,7 +35733,7 @@
         <translation type="obsolete">&lt;p&gt;Soubor s úlohami &lt;b&gt;%1&lt;/b&gt; nelze uložit.&lt;/p&gt;</translation>
     </message>
     <message>
-        <location filename="UI/UserInterface.py" line="4902"/>
+        <location filename="UI/UserInterface.py" line="4989"/>
         <source>Read tasks</source>
         <translation>Načíst úlohy</translation>
     </message>
@@ -35571,7 +35748,7 @@
         <translation type="obsolete">&lt;p&gt;Soubor s úlohami &lt;b&gt;%1&lt;/b&gt; je v nepodporovaném formátu.&lt;/p&gt;</translation>
     </message>
     <message>
-        <location filename="UI/UserInterface.py" line="5099"/>
+        <location filename="UI/UserInterface.py" line="5186"/>
         <source>Drop Error</source>
         <translation>Zahodit chybu</translation>
     </message>
@@ -35581,17 +35758,17 @@
         <translation type="obsolete">&lt;p&gt;&lt;b&gt;%1&lt;/b&gt; není soubor.&lt;/p&gt;</translation>
     </message>
     <message>
-        <location filename="UI/UserInterface.py" line="5401"/>
+        <location filename="UI/UserInterface.py" line="5488"/>
         <source>Error during updates check</source>
         <translation>Chyba během zjišťování aktualizací</translation>
     </message>
     <message>
-        <location filename="UI/UserInterface.py" line="5249"/>
+        <location filename="UI/UserInterface.py" line="5336"/>
         <source>Proxy usage was activated but no proxy host configured.</source>
         <translation>Použití proxy je aktivováno ale není definován proxy host.</translation>
     </message>
     <message>
-        <location filename="UI/UserInterface.py" line="5385"/>
+        <location filename="UI/UserInterface.py" line="5472"/>
         <source>Update available</source>
         <translation>Byla nalezena aktualizace</translation>
     </message>
@@ -35606,12 +35783,12 @@
         <translation type="obsolete">Eric4 je aktuální</translation>
     </message>
     <message>
-        <location filename="UI/UserInterface.py" line="1861"/>
+        <location filename="UI/UserInterface.py" line="1912"/>
         <source>Show external tools</source>
         <translation>Zobrazit externí nástroje</translation>
     </message>
     <message>
-        <location filename="UI/UserInterface.py" line="1861"/>
+        <location filename="UI/UserInterface.py" line="1912"/>
         <source>Show external &amp;tools</source>
         <translation>Zobrazit externí nás&amp;troje</translation>
     </message>
@@ -35621,12 +35798,12 @@
         <translation type="obsolete">&lt;b&gt;Zobrazit externí nástroje&lt;/b&gt;&lt;p&gt;Otevře dialog pro zobrazení cesty a verze externích nástrojů používaných Eric4.&lt;/p&gt;</translation>
     </message>
     <message>
-        <location filename="UI/UserInterface.py" line="5401"/>
+        <location filename="UI/UserInterface.py" line="5488"/>
         <source>Could not perform updates check.</source>
         <translation>Kontrolu updatů nelze provést.</translation>
     </message>
     <message>
-        <location filename="UI/UserInterface.py" line="5274"/>
+        <location filename="UI/UserInterface.py" line="5361"/>
         <source>&amp;Cancel</source>
         <translation>&amp;Zrušit</translation>
     </message>
@@ -35636,7 +35813,7 @@
         <translation type="obsolete">Zkouším host %1</translation>
     </message>
     <message>
-        <location filename="UI/UserInterface.py" line="5494"/>
+        <location filename="UI/UserInterface.py" line="5581"/>
         <source>First time usage</source>
         <translation>Spuštěno poprvé</translation>
     </message>
@@ -35646,92 +35823,92 @@
         <translation type="obsolete">eric4 nebyl ještě nakonfigurován. Bude spuštěn konfigurační dialog.</translation>
     </message>
     <message>
-        <location filename="UI/UserInterface.py" line="227"/>
+        <location filename="UI/UserInterface.py" line="229"/>
         <source>Initializing Plugin Manager...</source>
         <translation>Inicializace Plugin manažera...</translation>
     </message>
     <message>
-        <location filename="UI/UserInterface.py" line="2221"/>
+        <location filename="UI/UserInterface.py" line="2272"/>
         <source>P&amp;lugins</source>
         <translation>P&amp;luginy</translation>
     </message>
     <message>
-        <location filename="UI/UserInterface.py" line="2306"/>
+        <location filename="UI/UserInterface.py" line="2357"/>
         <source>Plugins</source>
         <translation>Pluginy</translation>
     </message>
     <message>
-        <location filename="UI/UserInterface.py" line="1973"/>
+        <location filename="UI/UserInterface.py" line="2024"/>
         <source>Plugin Infos</source>
         <translation>Plugin Infa</translation>
     </message>
     <message>
-        <location filename="UI/UserInterface.py" line="1976"/>
+        <location filename="UI/UserInterface.py" line="2027"/>
         <source>Show Plugin Infos</source>
         <translation>Zobrazit Plugin infa</translation>
     </message>
     <message>
-        <location filename="UI/UserInterface.py" line="1977"/>
+        <location filename="UI/UserInterface.py" line="2028"/>
         <source>&lt;b&gt;Plugin Infos...&lt;/b&gt;&lt;p&gt;This opens a dialog, that show some information about loaded plugins.&lt;/p&gt;</source>
         <translation>&lt;b&gt;Plugin Infa&lt;/b&gt;&lt;p&gt;Otevře dialog, který zobrazí informace o načtených pluginech.&lt;/p&gt;</translation>
     </message>
     <message>
-        <location filename="UI/UserInterface.py" line="1973"/>
+        <location filename="UI/UserInterface.py" line="2024"/>
         <source>&amp;Plugin Infos...</source>
         <translation>&amp;Plugin Infa...</translation>
     </message>
     <message>
-        <location filename="UI/UserInterface.py" line="2996"/>
+        <location filename="UI/UserInterface.py" line="3047"/>
         <source>&amp;Plugin Tools</source>
         <translation>&amp;Plugin nástroje</translation>
     </message>
     <message>
-        <location filename="UI/UserInterface.py" line="1999"/>
+        <location filename="UI/UserInterface.py" line="2050"/>
         <source>Uninstall Plugin</source>
         <translation>Odinstalovat plugin</translation>
     </message>
     <message>
-        <location filename="UI/UserInterface.py" line="1996"/>
+        <location filename="UI/UserInterface.py" line="2047"/>
         <source>&amp;Uninstall Plugin...</source>
         <translation>&amp;Odinstalovat plugin...</translation>
     </message>
     <message>
-        <location filename="UI/UserInterface.py" line="2000"/>
+        <location filename="UI/UserInterface.py" line="2051"/>
         <source>&lt;b&gt;Uninstall Plugin...&lt;/b&gt;&lt;p&gt;This opens a dialog to uninstall a plugin.&lt;/p&gt;</source>
         <translation>&lt;b&gt;Odinstalovat plugin...&lt;/b&gt;&lt;p&gt;Otevře dialog pro odinstalaci pluginu.&lt;/p&gt;</translation>
     </message>
     <message>
-        <location filename="UI/UserInterface.py" line="3133"/>
+        <location filename="UI/UserInterface.py" line="3194"/>
         <source>&amp;Show all</source>
         <translation>&amp;Zobrazit vše</translation>
     </message>
     <message>
-        <location filename="UI/UserInterface.py" line="3135"/>
+        <location filename="UI/UserInterface.py" line="3196"/>
         <source>&amp;Hide all</source>
         <translation>&amp;Skrýt vše</translation>
     </message>
     <message>
-        <location filename="UI/UserInterface.py" line="570"/>
+        <location filename="UI/UserInterface.py" line="574"/>
         <source>Activating Plugins...</source>
         <translation>Aktivace pluginů...</translation>
     </message>
     <message>
-        <location filename="UI/UserInterface.py" line="2162"/>
+        <location filename="UI/UserInterface.py" line="2213"/>
         <source>Wi&amp;zards</source>
         <translation>&amp;Průvodci</translation>
     </message>
     <message>
-        <location filename="UI/UserInterface.py" line="1599"/>
+        <location filename="UI/UserInterface.py" line="1650"/>
         <source>Show downloadable versions</source>
         <translation>Zobrazit verze ke stažení</translation>
     </message>
     <message>
-        <location filename="UI/UserInterface.py" line="1599"/>
+        <location filename="UI/UserInterface.py" line="1650"/>
         <source>Show &amp;downloadable versions...</source>
         <translation>Zobrazit verze pro &amp;download...</translation>
     </message>
     <message>
-        <location filename="UI/UserInterface.py" line="1602"/>
+        <location filename="UI/UserInterface.py" line="1653"/>
         <source>Show the versions available for download</source>
         <translation>Zobrazit dostupné verze ke stažení</translation>
     </message>
@@ -35741,102 +35918,102 @@
         <translation type="obsolete">&lt;b&gt;Zobrazit dostupné verze ke stažení&lt;/b&gt;&lt;p&gt;Zobrazit dostupné verze eric4 pro stažení z internetu.&lt;/p&gt;</translation>
     </message>
     <message>
-        <location filename="UI/UserInterface.py" line="5306"/>
+        <location filename="UI/UserInterface.py" line="5393"/>
         <source>Error downloading versions file</source>
         <translation>Chyba v souboru stahování verzí</translation>
     </message>
     <message>
-        <location filename="UI/UserInterface.py" line="5306"/>
+        <location filename="UI/UserInterface.py" line="5393"/>
         <source>Could not download the versions file.</source>
         <translation>Nelze stáhnout soubor s verzemi.</translation>
     </message>
     <message>
-        <location filename="UI/UserInterface.py" line="5422"/>
+        <location filename="UI/UserInterface.py" line="5509"/>
         <source>&lt;h3&gt;Available versions&lt;/h3&gt;&lt;table&gt;</source>
         <translation>&lt;h3&gt;Dostupné verze&lt;/h3&gt;&lt;table&gt;</translation>
     </message>
     <message>
-        <location filename="UI/UserInterface.py" line="2008"/>
+        <location filename="UI/UserInterface.py" line="2059"/>
         <source>Plugin Repository</source>
         <translation>Repozitář pluginů</translation>
     </message>
     <message>
-        <location filename="UI/UserInterface.py" line="2008"/>
+        <location filename="UI/UserInterface.py" line="2059"/>
         <source>Plugin &amp;Repository...</source>
         <translation>&amp;Repozitář pluginů...</translation>
     </message>
     <message>
-        <location filename="UI/UserInterface.py" line="2011"/>
+        <location filename="UI/UserInterface.py" line="2062"/>
         <source>Show Plugins available for download</source>
         <translation>Zobrazit pluginy dostupné ke stažení</translation>
     </message>
     <message>
-        <location filename="UI/UserInterface.py" line="2013"/>
+        <location filename="UI/UserInterface.py" line="2064"/>
         <source>&lt;b&gt;Plugin Repository...&lt;/b&gt;&lt;p&gt;This opens a dialog, that shows a list of plugins available on the Internet.&lt;/p&gt;</source>
         <translation>&lt;b&gt;Repozitář pluginů...&lt;/b&gt;&lt;p&gt;Otevře se dialog, který zobrazí seznam pluginů dostupných ke stažení přes internet.&lt;/p&gt;</translation>
     </message>
     <message>
-        <location filename="UI/UserInterface.py" line="1988"/>
+        <location filename="UI/UserInterface.py" line="2039"/>
         <source>Install Plugins</source>
         <translation>Instalovat pluginy</translation>
     </message>
     <message>
-        <location filename="UI/UserInterface.py" line="1985"/>
+        <location filename="UI/UserInterface.py" line="2036"/>
         <source>&amp;Install Plugins...</source>
         <translation>&amp;Instalovat pluginy...</translation>
     </message>
     <message>
-        <location filename="UI/UserInterface.py" line="1989"/>
+        <location filename="UI/UserInterface.py" line="2040"/>
         <source>&lt;b&gt;Install Plugins...&lt;/b&gt;&lt;p&gt;This opens a dialog to install or update plugins.&lt;/p&gt;</source>
         <translation>&lt;b&gt;Instalovat pluginy...&lt;/b&gt;&lt;p&gt;Otevře dialog pro instalaci nebo aktualizaci pluginů.&lt;/p&gt;</translation>
     </message>
     <message>
-        <location filename="UI/UserInterface.py" line="1784"/>
+        <location filename="UI/UserInterface.py" line="1835"/>
         <source>Mini Editor</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="UI/UserInterface.py" line="1780"/>
+        <location filename="UI/UserInterface.py" line="1831"/>
         <source>Mini &amp;Editor...</source>
         <translation>Mini &amp;Editor...</translation>
     </message>
     <message>
-        <location filename="UI/UserInterface.py" line="1785"/>
+        <location filename="UI/UserInterface.py" line="1836"/>
         <source>&lt;b&gt;Mini Editor&lt;/b&gt;&lt;p&gt;Open a dialog with a simplified editor.&lt;/p&gt;</source>
         <translation>&lt;b&gt;Mini editor&lt;/b&gt;&lt;p&gt;Otevře se okno s jednoduchým editorem&lt;/p&gt;</translation>
     </message>
     <message>
-        <location filename="UI/UserInterface.py" line="1692"/>
+        <location filename="UI/UserInterface.py" line="1743"/>
         <source>&amp;Designer 4...</source>
         <translation>&amp;Designer 4...</translation>
     </message>
     <message>
-        <location filename="UI/UserInterface.py" line="1709"/>
+        <location filename="UI/UserInterface.py" line="1760"/>
         <source>&amp;Linguist 4...</source>
         <translation>&amp;Linguist 4...</translation>
     </message>
     <message>
-        <location filename="UI/UserInterface.py" line="1888"/>
+        <location filename="UI/UserInterface.py" line="1939"/>
         <source>Toolbars</source>
         <translation>Lišty nástrojů</translation>
     </message>
     <message>
-        <location filename="UI/UserInterface.py" line="1888"/>
+        <location filename="UI/UserInterface.py" line="1939"/>
         <source>Tool&amp;bars...</source>
         <translation>&amp;Lišty nástrojů...</translation>
     </message>
     <message>
-        <location filename="UI/UserInterface.py" line="1891"/>
+        <location filename="UI/UserInterface.py" line="1942"/>
         <source>Configure toolbars</source>
         <translation>Konfigurace lišt nástrojů</translation>
     </message>
     <message>
-        <location filename="UI/UserInterface.py" line="1892"/>
+        <location filename="UI/UserInterface.py" line="1943"/>
         <source>&lt;b&gt;Toolbars&lt;/b&gt;&lt;p&gt;Configure the toolbars. With this dialog you may change the actions shown on the various toolbars and define your own toolbars.&lt;/p&gt;</source>
         <translation>&lt;b&gt;Listy nástrojů&lt;/b&gt;&lt;p&gt;Konfigurace lišt nástrojů. S tímto dialogem můžete změnit akce zobrazené v různých nástrojových lištách nebo definovat své vlastní nástrojové lišty.&lt;/p&gt;</translation>
     </message>
     <message>
-        <location filename="UI/UserInterface.py" line="577"/>
+        <location filename="UI/UserInterface.py" line="581"/>
         <source>Restoring Toolbarmanager...</source>
         <translation>Obnovit manažer nástrojových lišt...</translation>
     </message>
@@ -35846,7 +36023,7 @@
         <translation type="obsolete">Externí nástroje/%1</translation>
     </message>
     <message>
-        <location filename="UI/UserInterface.py" line="4159"/>
+        <location filename="UI/UserInterface.py" line="4246"/>
         <source>External Tools</source>
         <translation>Externí nástroje</translation>
     </message>
@@ -35861,32 +36038,32 @@
         <translation type="obsolete">Záznam nástroje &apos;%1&apos; nenalezen. </translation>
     </message>
     <message>
-        <location filename="UI/UserInterface.py" line="1321"/>
+        <location filename="UI/UserInterface.py" line="1348"/>
         <source>Multiproject-Viewer</source>
         <translation>Prohlížeč multiprojektu</translation>
     </message>
     <message>
-        <location filename="UI/UserInterface.py" line="1321"/>
+        <location filename="UI/UserInterface.py" line="1348"/>
         <source>&amp;Multiproject-Viewer</source>
         <translation>Prohlížeč &amp;multiprojektu</translation>
     </message>
     <message>
-        <location filename="UI/UserInterface.py" line="1324"/>
+        <location filename="UI/UserInterface.py" line="1351"/>
         <source>Toggle the Multiproject-Viewer window</source>
         <translation>Přepnout okno Prohlížeč multiprojektu</translation>
     </message>
     <message>
-        <location filename="UI/UserInterface.py" line="1325"/>
+        <location filename="UI/UserInterface.py" line="1352"/>
         <source>&lt;b&gt;Toggle the Multiproject-Viewer window&lt;/b&gt;&lt;p&gt;If the Multiproject-Viewer window is hidden then display it. If it is displayed then close it.&lt;/p&gt;</source>
         <translation>&lt;b&gt;Přepnout okno Prohlížeče multiprojektu&lt;/b&gt;&lt;p&gt;Pokud bylo okno skryto, tak se zobrazí. Pokud se zobrazovalo, tak se skryje.&lt;/p&gt;</translation>
     </message>
     <message>
-        <location filename="UI/UserInterface.py" line="1333"/>
+        <location filename="UI/UserInterface.py" line="1360"/>
         <source>Activate Multiproject-Viewer</source>
         <translation>Aktivovat prohlížeč multiprojektu</translation>
     </message>
     <message>
-        <location filename="UI/UserInterface.py" line="1470"/>
+        <location filename="UI/UserInterface.py" line="1497"/>
         <source>Temp&amp;late-Viewer</source>
         <translation>Proh&amp;lížeč šablon</translation>
     </message>
@@ -35911,7 +36088,7 @@
         <translation type="obsolete">&lt;p&gt;Počátek dokumentace PyKDE4 nebyl nastaven.&lt;/p&gt;</translation>
     </message>
     <message>
-        <location filename="UI/UserInterface.py" line="4920"/>
+        <location filename="UI/UserInterface.py" line="5007"/>
         <source>Save session</source>
         <translation>Uložit relaci</translation>
     </message>
@@ -35921,7 +36098,7 @@
         <translation type="obsolete">&lt;p&gt;Zápis do souboru relace session &lt;b&gt;%1&lt;/b&gt; se nezdařil.&lt;/p&gt;</translation>
     </message>
     <message>
-        <location filename="UI/UserInterface.py" line="4981"/>
+        <location filename="UI/UserInterface.py" line="5068"/>
         <source>Read session</source>
         <translation>Načíst relaci</translation>
     </message>
@@ -35936,12 +36113,12 @@
         <translation type="obsolete">&lt;p&gt;Soubor relace (session) &lt;b&gt;%1&lt;/b&gt; je v nepodporovaném formátu.&lt;/p&gt;</translation>
     </message>
     <message>
-        <location filename="UI/UserInterface.py" line="2420"/>
+        <location filename="UI/UserInterface.py" line="2471"/>
         <source>&lt;p&gt;This part of the status bar displays the current editors encoding.&lt;/p&gt;</source>
         <translation>&lt;p&gt;Tato část status baru zobrazuje aktuální kódování editorů.&lt;/p&gt;</translation>
     </message>
     <message>
-        <location filename="UI/UserInterface.py" line="2434"/>
+        <location filename="UI/UserInterface.py" line="2485"/>
         <source>&lt;p&gt;This part of the status bar displays an indication of the current editors files writability.&lt;/p&gt;</source>
         <translation>&lt;p&gt;Tato část status baru zobrazuje indikátor práva zápisu editoru do souboru.&lt;/p&gt;</translation>
     </message>
@@ -35951,7 +36128,7 @@
         <translation type="obsolete">&lt;b&gt;Připojit k proxy &apos;%1&apos; za použití:&lt;/b&gt;</translation>
     </message>
     <message>
-        <location filename="UI/UserInterface.py" line="5468"/>
+        <location filename="UI/UserInterface.py" line="5555"/>
         <source>SSL Errors</source>
         <translation>SSL chyby</translation>
     </message>
@@ -35961,277 +36138,277 @@
         <translation type="obsolete">&lt;p&gt;SSL chyby:&lt;/p&gt;&lt;p&gt;%1&lt;/p&gt;&lt;p&gt;Chcete tyto chyby ignorovat?&lt;/p&gt;</translation>
     </message>
     <message>
-        <location filename="UI/UserInterface.py" line="1623"/>
+        <location filename="UI/UserInterface.py" line="1674"/>
         <source>Request Feature</source>
         <translation>Požadavek na vlastnost</translation>
     </message>
     <message>
-        <location filename="UI/UserInterface.py" line="1623"/>
+        <location filename="UI/UserInterface.py" line="1674"/>
         <source>Request &amp;Feature...</source>
         <translation>&amp;Požadavek na vlastnost...</translation>
     </message>
     <message>
-        <location filename="UI/UserInterface.py" line="1625"/>
+        <location filename="UI/UserInterface.py" line="1676"/>
         <source>Send a feature request</source>
         <translation>Poslat požadavek na vlastnost</translation>
     </message>
     <message>
-        <location filename="UI/UserInterface.py" line="1626"/>
+        <location filename="UI/UserInterface.py" line="1677"/>
         <source>&lt;b&gt;Request Feature...&lt;/b&gt;&lt;p&gt;Opens a dialog to send a feature request.&lt;/p&gt;</source>
         <translation>&lt;b&gt;Požadavek na vlastnost...&lt;/b&gt;&lt;p&gt;Otevře dialog pro odeslání požadavku.&lt;/p&gt;</translation>
     </message>
     <message>
-        <location filename="UI/UserInterface.py" line="2413"/>
+        <location filename="UI/UserInterface.py" line="2464"/>
         <source>&lt;p&gt;This part of the status bar displays the current editors language.&lt;/p&gt;</source>
         <translation>&lt;p&gt;Tato část status baru zobrazuje aktuální jazyk editoru.&lt;/p&gt;</translation>
     </message>
     <message>
-        <location filename="UI/UserInterface.py" line="2443"/>
+        <location filename="UI/UserInterface.py" line="2494"/>
         <source>&lt;p&gt;This part of the status bar displays the name of the file of the current editor.&lt;/p&gt;</source>
         <translation>&lt;p&gt;Tato část statusbaru zobrazuje jméno souboru v aktuálním editoru.&lt;/p&gt;</translation>
     </message>
     <message>
-        <location filename="UI/UserInterface.py" line="2450"/>
+        <location filename="UI/UserInterface.py" line="2501"/>
         <source>&lt;p&gt;This part of the status bar displays the line number of the current editor.&lt;/p&gt;</source>
         <translation>&lt;p&gt;Tato část status baru zobrazuje číslo řádku v aktuálním editoru.&lt;/p&gt;</translation>
     </message>
     <message>
-        <location filename="UI/UserInterface.py" line="2457"/>
+        <location filename="UI/UserInterface.py" line="2508"/>
         <source>&lt;p&gt;This part of the status bar displays the cursor position of the current editor.&lt;/p&gt;</source>
         <translation>&lt;p&gt;Tato část status baru zobrazuje pozici kurzoru v aktuálním editoru.&lt;/p&gt;</translation>
     </message>
     <message>
-        <location filename="UI/UserInterface.py" line="1493"/>
+        <location filename="UI/UserInterface.py" line="1520"/>
         <source>Vertical Toolbox</source>
         <translation>Svislá nástrojová lišta</translation>
     </message>
     <message>
-        <location filename="UI/UserInterface.py" line="1504"/>
+        <location filename="UI/UserInterface.py" line="1531"/>
         <source>Horizontal Toolbox</source>
         <translation>Vodorovná nástrojová lišta</translation>
     </message>
     <message>
-        <location filename="UI/UserInterface.py" line="1493"/>
+        <location filename="UI/UserInterface.py" line="1520"/>
         <source>&amp;Vertical Toolbox</source>
         <translation>S&amp;vislá nástrojová lišta</translation>
     </message>
     <message>
-        <location filename="UI/UserInterface.py" line="1495"/>
+        <location filename="UI/UserInterface.py" line="1522"/>
         <source>Toggle the Vertical Toolbox window</source>
         <translation>Přepnout na svislou nástrojovou lištu</translation>
     </message>
     <message>
-        <location filename="UI/UserInterface.py" line="1496"/>
+        <location filename="UI/UserInterface.py" line="1523"/>
         <source>&lt;b&gt;Toggle the Vertical Toolbox window&lt;/b&gt;&lt;p&gt;If the Vertical Toolbox window is hidden then display it. If it is displayed then close it.&lt;/p&gt;</source>
         <translation>&lt;b&gt;Přepnout svislou nástrojovou lištu&lt;/b&gt;&lt;p&gt;Pokud je svislá nástrojová lišta skryta, tak se zobrazí. Je-li zobrazena, skryje se.&lt;/p&gt;</translation>
     </message>
     <message>
-        <location filename="UI/UserInterface.py" line="1504"/>
-        <source>&amp;Horizontal Toolbox</source>
-        <translation>&amp;Horizontální lista nástrojů</translation>
-    </message>
-    <message>
-        <location filename="UI/UserInterface.py" line="1507"/>
-        <source>Toggle the Horizontal Toolbox window</source>
-        <translation>Přepnout na vodorovnou lištu nástrojů</translation>
-    </message>
-    <message>
-        <location filename="UI/UserInterface.py" line="1508"/>
-        <source>&lt;b&gt;Toggle the Horizontal Toolbox window&lt;/b&gt;&lt;p&gt;If the Horizontal Toolbox window is hidden then display it. If it is displayed then close it.&lt;/p&gt;</source>
-        <translation>&lt;b&gt;Přepnout vodorovnou nástrojovou lištu&lt;/b&gt;&lt;p&gt;Pokud je vodorovná nástrojová lišta skryta, tak se zobrazí. Je-li zobrazena, skryje se.&lt;/p&gt;</translation>
-    </message>
-    <message>
-        <location filename="UI/UserInterface.py" line="2913"/>
-        <source>Restart application</source>
-        <translation>Restartovat aplikaci</translation>
-    </message>
-    <message>
-        <location filename="UI/UserInterface.py" line="2913"/>
-        <source>The application needs to be restarted. Do it now?</source>
-        <translation>Aplikace potřebuje restartovat. Má se provést nyní?</translation>
-    </message>
-    <message>
-        <location filename="UI/UserInterface.py" line="1385"/>
-        <source>Terminal</source>
-        <translation>Terminál</translation>
-    </message>
-    <message>
-        <location filename="UI/UserInterface.py" line="1385"/>
-        <source>Te&amp;rminal</source>
-        <translation>Te&amp;rminál</translation>
-    </message>
-    <message>
-        <location filename="UI/UserInterface.py" line="1387"/>
-        <source>Toggle the Terminal window</source>
-        <translation>Přepnout do okna s terminálem</translation>
-    </message>
-    <message>
-        <location filename="UI/UserInterface.py" line="1388"/>
-        <source>&lt;b&gt;Toggle the Terminal window&lt;/b&gt;&lt;p&gt;If the Terminal window is hidden then display it. If it is displayed then close it.&lt;/p&gt;</source>
-        <translation>&lt;b&gt;Přepnout do okna s terminálem&lt;/b&gt;&lt;p&gt;Pokud je okno skryto, tak se zobrazí. Je-li zobrazeno, skryje se.&lt;/p&gt;</translation>
-    </message>
-    <message>
-        <location filename="UI/UserInterface.py" line="1396"/>
-        <source>Activate Terminal</source>
-        <translation>Aktivovat terminál</translation>
-    </message>
-    <message>
-        <location filename="UI/UserInterface.py" line="1396"/>
-        <source>Alt+Shift+R</source>
-        <translation></translation>
-    </message>
-    <message>
-        <location filename="UI/UserInterface.py" line="1483"/>
-        <source>Alt+Shift+A</source>
-        <translation></translation>
-    </message>
-    <message>
-        <location filename="UI/UserInterface.py" line="2230"/>
-        <source>Configure...</source>
-        <translation>Konfigurovat...</translation>
-    </message>
-    <message>
-        <location filename="UI/UserInterface.py" line="2427"/>
-        <source>&lt;p&gt;This part of the status bar displays the current editors eol setting.&lt;/p&gt;</source>
-        <translation>&lt;p&gt;Tato část status baru zobrazuje eol nastavení v aktuálním editoru.&lt;/p&gt;</translation>
-    </message>
-    <message>
-        <location filename="UI/UserInterface.py" line="1965"/>
-        <source>Switch between tabs</source>
-        <translation>Přepnout mezi taby</translation>
-    </message>
-    <message>
-        <location filename="UI/UserInterface.py" line="1965"/>
-        <source>Ctrl+1</source>
-        <translation></translation>
-    </message>
-    <message>
-        <location filename="UI/UserInterface.py" line="1828"/>
-        <source>Export Preferences</source>
-        <translation>Exportovat předvolby</translation>
-    </message>
-    <message>
-        <location filename="UI/UserInterface.py" line="1828"/>
-        <source>E&amp;xport Preferences...</source>
-        <translation>E&amp;xportovat předvolby...</translation>
-    </message>
-    <message>
-        <location filename="UI/UserInterface.py" line="1831"/>
-        <source>Export the current configuration</source>
-        <translation>Export aktuální konfigurace</translation>
-    </message>
-    <message>
-        <location filename="UI/UserInterface.py" line="1832"/>
-        <source>&lt;b&gt;Export Preferences&lt;/b&gt;&lt;p&gt;Export the current configuration to a file.&lt;/p&gt;</source>
-        <translation>&lt;b&gt;Export předvoleb&lt;/b&gt;&lt;p&gt;Export aktuální konfigurace do souboru.&lt;/p&gt;</translation>
-    </message>
-    <message>
-        <location filename="UI/UserInterface.py" line="1839"/>
-        <source>Import Preferences</source>
-        <translation>Import předvoleb</translation>
-    </message>
-    <message>
-        <location filename="UI/UserInterface.py" line="1839"/>
-        <source>I&amp;mport Preferences...</source>
-        <translation>I&amp;mport předvoleb...</translation>
-    </message>
-    <message>
-        <location filename="UI/UserInterface.py" line="1842"/>
-        <source>Import a previously exported configuration</source>
-        <translation>Import dříve exportované konfigurace</translation>
-    </message>
-    <message>
-        <location filename="UI/UserInterface.py" line="1844"/>
-        <source>&lt;b&gt;Import Preferences&lt;/b&gt;&lt;p&gt;Import a previously exported configuration.&lt;/p&gt;</source>
-        <translation>&lt;b&gt;Import předvoleb&lt;/b&gt;&lt;p&gt;Import dříve exportované konfigurace.&lt;/p&gt;</translation>
-    </message>
-    <message>
-        <location filename="UI/UserInterface.py" line="1949"/>
-        <source>Show next</source>
-        <translation>Zobrazit další</translation>
-    </message>
-    <message>
-        <location filename="UI/UserInterface.py" line="1957"/>
-        <source>Show previous</source>
-        <translation>Zobrazit předchozí</translation>
-    </message>
-    <message>
-        <location filename="UI/UserInterface.py" line="1516"/>
-        <source>Left Sidebar</source>
-        <translation>Levé menu</translation>
-    </message>
-    <message>
-        <location filename="UI/UserInterface.py" line="1516"/>
-        <source>&amp;Left Sidebar</source>
-        <translation>&amp;Levé menu</translation>
-    </message>
-    <message>
-        <location filename="UI/UserInterface.py" line="1518"/>
-        <source>Toggle the left sidebar window</source>
-        <translation>Přepnout okno levého menu</translation>
-    </message>
-    <message>
-        <location filename="UI/UserInterface.py" line="1519"/>
-        <source>&lt;b&gt;Toggle the left sidebar window&lt;/b&gt;&lt;p&gt;If the left sidebar window is hidden then display it. If it is displayed then close it.&lt;/p&gt;</source>
-        <translation>&lt;b&gt;Přepnout okno levého menu&lt;/b&gt;&lt;p&gt;Je-li okno levého menu skryto, tak se zobrazí. Je-li zobrazeno, skryje se.&lt;/p&gt;</translation>
-    </message>
-    <message>
-        <location filename="UI/UserInterface.py" line="1527"/>
-        <source>Bottom Sidebar</source>
-        <translation>Dolní menu</translation>
-    </message>
-    <message>
-        <location filename="UI/UserInterface.py" line="1527"/>
-        <source>&amp;Bottom Sidebar</source>
-        <translation>&amp;Dolní menu</translation>
-    </message>
-    <message>
-        <location filename="UI/UserInterface.py" line="1530"/>
-        <source>Toggle the bottom sidebar window</source>
-        <translation>Přepnout okno dolního menu</translation>
-    </message>
-    <message>
         <location filename="UI/UserInterface.py" line="1531"/>
+        <source>&amp;Horizontal Toolbox</source>
+        <translation>&amp;Horizontální lista nástrojů</translation>
+    </message>
+    <message>
+        <location filename="UI/UserInterface.py" line="1534"/>
+        <source>Toggle the Horizontal Toolbox window</source>
+        <translation>Přepnout na vodorovnou lištu nástrojů</translation>
+    </message>
+    <message>
+        <location filename="UI/UserInterface.py" line="1535"/>
+        <source>&lt;b&gt;Toggle the Horizontal Toolbox window&lt;/b&gt;&lt;p&gt;If the Horizontal Toolbox window is hidden then display it. If it is displayed then close it.&lt;/p&gt;</source>
+        <translation>&lt;b&gt;Přepnout vodorovnou nástrojovou lištu&lt;/b&gt;&lt;p&gt;Pokud je vodorovná nástrojová lišta skryta, tak se zobrazí. Je-li zobrazena, skryje se.&lt;/p&gt;</translation>
+    </message>
+    <message>
+        <location filename="UI/UserInterface.py" line="2964"/>
+        <source>Restart application</source>
+        <translation>Restartovat aplikaci</translation>
+    </message>
+    <message>
+        <location filename="UI/UserInterface.py" line="2964"/>
+        <source>The application needs to be restarted. Do it now?</source>
+        <translation>Aplikace potřebuje restartovat. Má se provést nyní?</translation>
+    </message>
+    <message>
+        <location filename="UI/UserInterface.py" line="1412"/>
+        <source>Terminal</source>
+        <translation>Terminál</translation>
+    </message>
+    <message>
+        <location filename="UI/UserInterface.py" line="1412"/>
+        <source>Te&amp;rminal</source>
+        <translation>Te&amp;rminál</translation>
+    </message>
+    <message>
+        <location filename="UI/UserInterface.py" line="1414"/>
+        <source>Toggle the Terminal window</source>
+        <translation>Přepnout do okna s terminálem</translation>
+    </message>
+    <message>
+        <location filename="UI/UserInterface.py" line="1415"/>
+        <source>&lt;b&gt;Toggle the Terminal window&lt;/b&gt;&lt;p&gt;If the Terminal window is hidden then display it. If it is displayed then close it.&lt;/p&gt;</source>
+        <translation>&lt;b&gt;Přepnout do okna s terminálem&lt;/b&gt;&lt;p&gt;Pokud je okno skryto, tak se zobrazí. Je-li zobrazeno, skryje se.&lt;/p&gt;</translation>
+    </message>
+    <message>
+        <location filename="UI/UserInterface.py" line="1423"/>
+        <source>Activate Terminal</source>
+        <translation>Aktivovat terminál</translation>
+    </message>
+    <message>
+        <location filename="UI/UserInterface.py" line="1423"/>
+        <source>Alt+Shift+R</source>
+        <translation></translation>
+    </message>
+    <message>
+        <location filename="UI/UserInterface.py" line="1510"/>
+        <source>Alt+Shift+A</source>
+        <translation></translation>
+    </message>
+    <message>
+        <location filename="UI/UserInterface.py" line="2281"/>
+        <source>Configure...</source>
+        <translation>Konfigurovat...</translation>
+    </message>
+    <message>
+        <location filename="UI/UserInterface.py" line="2478"/>
+        <source>&lt;p&gt;This part of the status bar displays the current editors eol setting.&lt;/p&gt;</source>
+        <translation>&lt;p&gt;Tato část status baru zobrazuje eol nastavení v aktuálním editoru.&lt;/p&gt;</translation>
+    </message>
+    <message>
+        <location filename="UI/UserInterface.py" line="2016"/>
+        <source>Switch between tabs</source>
+        <translation>Přepnout mezi taby</translation>
+    </message>
+    <message>
+        <location filename="UI/UserInterface.py" line="2016"/>
+        <source>Ctrl+1</source>
+        <translation></translation>
+    </message>
+    <message>
+        <location filename="UI/UserInterface.py" line="1879"/>
+        <source>Export Preferences</source>
+        <translation>Exportovat předvolby</translation>
+    </message>
+    <message>
+        <location filename="UI/UserInterface.py" line="1879"/>
+        <source>E&amp;xport Preferences...</source>
+        <translation>E&amp;xportovat předvolby...</translation>
+    </message>
+    <message>
+        <location filename="UI/UserInterface.py" line="1882"/>
+        <source>Export the current configuration</source>
+        <translation>Export aktuální konfigurace</translation>
+    </message>
+    <message>
+        <location filename="UI/UserInterface.py" line="1883"/>
+        <source>&lt;b&gt;Export Preferences&lt;/b&gt;&lt;p&gt;Export the current configuration to a file.&lt;/p&gt;</source>
+        <translation>&lt;b&gt;Export předvoleb&lt;/b&gt;&lt;p&gt;Export aktuální konfigurace do souboru.&lt;/p&gt;</translation>
+    </message>
+    <message>
+        <location filename="UI/UserInterface.py" line="1890"/>
+        <source>Import Preferences</source>
+        <translation>Import předvoleb</translation>
+    </message>
+    <message>
+        <location filename="UI/UserInterface.py" line="1890"/>
+        <source>I&amp;mport Preferences...</source>
+        <translation>I&amp;mport předvoleb...</translation>
+    </message>
+    <message>
+        <location filename="UI/UserInterface.py" line="1893"/>
+        <source>Import a previously exported configuration</source>
+        <translation>Import dříve exportované konfigurace</translation>
+    </message>
+    <message>
+        <location filename="UI/UserInterface.py" line="1895"/>
+        <source>&lt;b&gt;Import Preferences&lt;/b&gt;&lt;p&gt;Import a previously exported configuration.&lt;/p&gt;</source>
+        <translation>&lt;b&gt;Import předvoleb&lt;/b&gt;&lt;p&gt;Import dříve exportované konfigurace.&lt;/p&gt;</translation>
+    </message>
+    <message>
+        <location filename="UI/UserInterface.py" line="2000"/>
+        <source>Show next</source>
+        <translation>Zobrazit další</translation>
+    </message>
+    <message>
+        <location filename="UI/UserInterface.py" line="2008"/>
+        <source>Show previous</source>
+        <translation>Zobrazit předchozí</translation>
+    </message>
+    <message>
+        <location filename="UI/UserInterface.py" line="1543"/>
+        <source>Left Sidebar</source>
+        <translation>Levé menu</translation>
+    </message>
+    <message>
+        <location filename="UI/UserInterface.py" line="1543"/>
+        <source>&amp;Left Sidebar</source>
+        <translation>&amp;Levé menu</translation>
+    </message>
+    <message>
+        <location filename="UI/UserInterface.py" line="1545"/>
+        <source>Toggle the left sidebar window</source>
+        <translation>Přepnout okno levého menu</translation>
+    </message>
+    <message>
+        <location filename="UI/UserInterface.py" line="1546"/>
+        <source>&lt;b&gt;Toggle the left sidebar window&lt;/b&gt;&lt;p&gt;If the left sidebar window is hidden then display it. If it is displayed then close it.&lt;/p&gt;</source>
+        <translation>&lt;b&gt;Přepnout okno levého menu&lt;/b&gt;&lt;p&gt;Je-li okno levého menu skryto, tak se zobrazí. Je-li zobrazeno, skryje se.&lt;/p&gt;</translation>
+    </message>
+    <message>
+        <location filename="UI/UserInterface.py" line="1554"/>
+        <source>Bottom Sidebar</source>
+        <translation>Dolní menu</translation>
+    </message>
+    <message>
+        <location filename="UI/UserInterface.py" line="1554"/>
+        <source>&amp;Bottom Sidebar</source>
+        <translation>&amp;Dolní menu</translation>
+    </message>
+    <message>
+        <location filename="UI/UserInterface.py" line="1557"/>
+        <source>Toggle the bottom sidebar window</source>
+        <translation>Přepnout okno dolního menu</translation>
+    </message>
+    <message>
+        <location filename="UI/UserInterface.py" line="1558"/>
         <source>&lt;b&gt;Toggle the bottom sidebar window&lt;/b&gt;&lt;p&gt;If the bottom sidebar window is hidden then display it. If it is displayed then close it.&lt;/p&gt;</source>
         <translation>&lt;b&gt;Přepnout okno dolního menu&lt;/b&gt;&lt;p&gt;Je-li okno dolního menu skryto, tak se zobrazí. Je-li zobrazeno, skryje se.&lt;/p&gt;</translation>
     </message>
     <message>
-        <location filename="UI/UserInterface.py" line="1343"/>
+        <location filename="UI/UserInterface.py" line="1370"/>
         <source>&amp;Debug-Viewer</source>
         <translation>Prohlížeč &amp;debugeru</translation>
     </message>
     <message>
-        <location filename="UI/UserInterface.py" line="1345"/>
+        <location filename="UI/UserInterface.py" line="1372"/>
         <source>Toggle the Debug-Viewer window</source>
         <translation>Přepnout okno debug prohlížeče</translation>
     </message>
     <message>
-        <location filename="UI/UserInterface.py" line="1346"/>
+        <location filename="UI/UserInterface.py" line="1373"/>
         <source>&lt;b&gt;Toggle the Debug-Viewer window&lt;/b&gt;&lt;p&gt;If the Debug-Viewer window is hidden then display it. If it is displayed then close it.&lt;/p&gt;</source>
         <translation>&lt;b&gt;Přepnout okno debug prohlížeče&lt;/b&gt;&lt;p&gt;Je-li okno debug prohlížeče skryto, zobrazí se. Je-li zobrazeno, skryje se.&lt;/p&gt;</translation>
     </message>
     <message>
-        <location filename="UI/UserInterface.py" line="1354"/>
+        <location filename="UI/UserInterface.py" line="1381"/>
         <source>Activate Debug-Viewer</source>
         <translation>Aktivní debug prohlížeč</translation>
     </message>
     <message>
-        <location filename="UI/UserInterface.py" line="1768"/>
+        <location filename="UI/UserInterface.py" line="1819"/>
         <source>SQL Browser</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="UI/UserInterface.py" line="1768"/>
+        <location filename="UI/UserInterface.py" line="1819"/>
         <source>SQL &amp;Browser...</source>
         <translation>SQL &amp;Browser...</translation>
     </message>
     <message>
-        <location filename="UI/UserInterface.py" line="1772"/>
+        <location filename="UI/UserInterface.py" line="1823"/>
         <source>Browse a SQL database</source>
         <translation>Procházet SQL databázi</translation>
     </message>
     <message>
-        <location filename="UI/UserInterface.py" line="1773"/>
+        <location filename="UI/UserInterface.py" line="1824"/>
         <source>&lt;b&gt;SQL Browser&lt;/b&gt;&lt;p&gt;Browse a SQL database.&lt;/p&gt;</source>
         <translation>&lt;b&gt;SQL Browser&lt;/b&gt;&lt;p&gt;Procházet SQL databázi.&lt;/p&gt;</translation>
     </message>
@@ -36241,37 +36418,37 @@
         <translation type="obsolete">&lt;p&gt;Nelze spustit SQL Browser.&lt;br&gt;Ujistěte se, že je dostupný jako &lt;b&gt;%1&lt;/b&gt;.&lt;/p&gt;</translation>
     </message>
     <message>
-        <location filename="UI/UserInterface.py" line="2698"/>
+        <location filename="UI/UserInterface.py" line="2749"/>
         <source>Error log found</source>
         <translation>Nalezen záznam o chybě</translation>
     </message>
     <message>
-        <location filename="UI/UserInterface.py" line="2698"/>
+        <location filename="UI/UserInterface.py" line="2749"/>
         <source>An error log file was found. What should be done with it?</source>
         <translation>Nalezen záznam o chybě. Co by se s tím mělo dělat?</translation>
     </message>
     <message>
-        <location filename="UI/UserInterface.py" line="2709"/>
+        <location filename="UI/UserInterface.py" line="2760"/>
         <source>Send Bug Email</source>
         <translation>Poslat email s chybou</translation>
     </message>
     <message>
-        <location filename="UI/UserInterface.py" line="2712"/>
+        <location filename="UI/UserInterface.py" line="2763"/>
         <source>Ignore and Delete</source>
         <translation>Ignotovat a smazat</translation>
     </message>
     <message>
-        <location filename="UI/UserInterface.py" line="2715"/>
+        <location filename="UI/UserInterface.py" line="2766"/>
         <source>Ignore but Keep</source>
         <translation>Ignorovat ale zachovat</translation>
     </message>
     <message>
-        <location filename="UI/UserInterface.py" line="1792"/>
+        <location filename="UI/UserInterface.py" line="1843"/>
         <source>Web Browser</source>
         <translation>Web prohlížeč</translation>
     </message>
     <message>
-        <location filename="UI/UserInterface.py" line="1792"/>
+        <location filename="UI/UserInterface.py" line="1843"/>
         <source>&amp;Web Browser...</source>
         <translation>&amp;Web prohlížeč...</translation>
     </message>
@@ -36286,12 +36463,12 @@
         <translation type="obsolete">&lt;b&gt;Web prohlížeč&lt;/b&gt;&lt;p&gt;Procházet internet pomocí eric4 web prohlížeče.&lt;/p&gt;</translation>
     </message>
     <message>
-        <location filename="UI/UserInterface.py" line="1804"/>
+        <location filename="UI/UserInterface.py" line="1855"/>
         <source>Icon Editor</source>
         <translation>Editor ikon</translation>
     </message>
     <message>
-        <location filename="UI/UserInterface.py" line="1804"/>
+        <location filename="UI/UserInterface.py" line="1855"/>
         <source>&amp;Icon Editor...</source>
         <translation>Editor &amp;ikon...</translation>
     </message>
@@ -36306,7 +36483,7 @@
         <translation type="obsolete">&lt;b&gt;Editor ikon&lt;/b&gt;&lt;p&gt;Spustí se eric4 editor ikon pro jednoduchou editaci ikon.&lt;/p&gt;</translation>
     </message>
     <message>
-        <location filename="UI/UserInterface.py" line="3916"/>
+        <location filename="UI/UserInterface.py" line="4003"/>
         <source>Qt 3 support</source>
         <translation>Qt 3 podpora</translation>
     </message>
@@ -36326,27 +36503,27 @@
         <translation type="obsolete">Otevřít PyKDE4 dokumentaci</translation>
     </message>
     <message>
-        <location filename="UI/UserInterface.py" line="2103"/>
+        <location filename="UI/UserInterface.py" line="2154"/>
         <source>PySide Documentation</source>
         <translation>PySide dokumentace</translation>
     </message>
     <message>
-        <location filename="UI/UserInterface.py" line="2103"/>
+        <location filename="UI/UserInterface.py" line="2154"/>
         <source>Py&amp;Side Documentation</source>
         <translation>Py&amp;Side dokumentace</translation>
     </message>
     <message>
-        <location filename="UI/UserInterface.py" line="2105"/>
+        <location filename="UI/UserInterface.py" line="2156"/>
         <source>Open PySide Documentation</source>
         <translation>Otevřít PySide dokumentaci</translation>
     </message>
     <message>
-        <location filename="UI/UserInterface.py" line="2106"/>
+        <location filename="UI/UserInterface.py" line="2157"/>
         <source>&lt;b&gt;PySide Documentation&lt;/b&gt;&lt;p&gt;Display the PySide Documentation. Dependant upon your settings, this will either show the help in Eric&apos;s internal help viewer, or execute a web browser or Qt Assistant. &lt;/p&gt;</source>
         <translation>&lt;b&gt;PySide dokumentace&lt;/b&gt;&lt;p&gt;Zobrazit PySide dokumentaci. V závislosti na vašich nastaveních zobrazí interní Eric prohlížeč nápovědy nebo spustí webový prohlížeč nebo Qt Assistant.&lt;/p&gt;</translation>
     </message>
     <message>
-        <location filename="UI/UserInterface.py" line="4483"/>
+        <location filename="UI/UserInterface.py" line="4570"/>
         <source>&lt;p&gt;The PySide documentation starting point has not been configured.&lt;/p&gt;</source>
         <translation>&lt;p&gt;Počátek dokumentace PySide nebyl nastaven.&lt;/p&gt;</translation>
     </message>
@@ -36356,237 +36533,267 @@
         <translation type="obsolete">Používáte poslední verzi eric4</translation>
     </message>
     <message>
-        <location filename="UI/UserInterface.py" line="629"/>
+        <location filename="UI/UserInterface.py" line="633"/>
         <source>&lt;p&gt;The Qt Style Sheet file &lt;b&gt;{0}&lt;/b&gt; could not be read.&lt;br&gt;Reason: {1}&lt;/p&gt;</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="UI/UserInterface.py" line="1224"/>
+        <location filename="UI/UserInterface.py" line="1251"/>
         <source>{0} - Passive Mode</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="UI/UserInterface.py" line="1229"/>
+        <location filename="UI/UserInterface.py" line="1256"/>
         <source>{0} - {1} - Passive Mode</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="UI/UserInterface.py" line="1232"/>
+        <location filename="UI/UserInterface.py" line="1259"/>
         <source>{0} - {1} - {2} - Passive Mode</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="UI/UserInterface.py" line="1562"/>
+        <location filename="UI/UserInterface.py" line="1613"/>
         <source>&lt;b&gt;Helpviewer&lt;/b&gt;&lt;p&gt;Display the eric5 web browser. This window will show HTML help files and help from Qt help collections. It has the capability to navigate to links, set bookmarks, print the displayed help and some more features. You may use it to browse the internet as well&lt;/p&gt;&lt;p&gt;If called with a word selected, this word is search in the Qt help collection.&lt;/p&gt;</source>
         <translation type="unfinished">&lt;b&gt;Prohlížeč nápovědy&lt;/b&gt;&lt;p&gt;Otevře se eric4 web prohlížeč. Toto okno zobrazuje HTML soubory s nápovědou z Qt kolekce. Má schopnosti navigovat přes odkazy, nastavovat záložky, tisknout zobrazenou nápovědu a další možnosti. Můžete jej také použít pro procházení internetem&lt;/p&gt;&lt;p&gt;Je-li otevřen s hledaným slovem, je toto slovo hledáno v Qt nápovědách.&lt;/p&gt; {5 ?}</translation>
     </message>
     <message>
-        <location filename="UI/UserInterface.py" line="1592"/>
+        <location filename="UI/UserInterface.py" line="1643"/>
         <source>&lt;b&gt;Check for Updates...&lt;/b&gt;&lt;p&gt;Checks the internet for updates of eric5.&lt;/p&gt;</source>
         <translation type="unfinished">&lt;b&gt;Zjistit aktualizace&lt;/b&gt;&lt;p&gt;Zkontroluje přes internet jestli existují nějaké aktualizace Eric4.&lt;/p&gt; {5.?}</translation>
     </message>
     <message>
-        <location filename="UI/UserInterface.py" line="1604"/>
+        <location filename="UI/UserInterface.py" line="1655"/>
         <source>&lt;b&gt;Show downloadable versions...&lt;/b&gt;&lt;p&gt;Shows the eric5 versions available for download from the internet.&lt;/p&gt;</source>
         <translation type="unfinished">&lt;b&gt;Zobrazit dostupné verze ke stažení&lt;/b&gt;&lt;p&gt;Zobrazit dostupné verze eric4 pro stažení z internetu.&lt;/p&gt; {5 ?}</translation>
     </message>
     <message>
-        <location filename="UI/UserInterface.py" line="1796"/>
+        <location filename="UI/UserInterface.py" line="1847"/>
         <source>Start the eric5 Web Browser</source>
         <translation type="unfinished">Spustit eric4 web prohlížeč {5 ?}</translation>
     </message>
     <message>
-        <location filename="UI/UserInterface.py" line="1797"/>
+        <location filename="UI/UserInterface.py" line="1848"/>
         <source>&lt;b&gt;Web Browser&lt;/b&gt;&lt;p&gt;Browse the Internet with the eric5 Web Browser.&lt;/p&gt;</source>
         <translation type="unfinished">&lt;b&gt;Web prohlížeč&lt;/b&gt;&lt;p&gt;Procházet internet pomocí eric4 web prohlížeče.&lt;/p&gt; {5 ?}</translation>
     </message>
     <message>
-        <location filename="UI/UserInterface.py" line="1808"/>
+        <location filename="UI/UserInterface.py" line="1859"/>
         <source>Start the eric5 Icon Editor</source>
         <translation type="unfinished">Spustit eric4 editor ikon {5 ?}</translation>
     </message>
     <message>
-        <location filename="UI/UserInterface.py" line="1809"/>
+        <location filename="UI/UserInterface.py" line="1860"/>
         <source>&lt;b&gt;Icon Editor&lt;/b&gt;&lt;p&gt;Starts the eric5 Icon Editor for editing simple icons.&lt;/p&gt;</source>
         <translation type="unfinished">&lt;b&gt;Editor ikon&lt;/b&gt;&lt;p&gt;Spustí se eric4 editor ikon pro jednoduchou editaci ikon.&lt;/p&gt; {5 ?}</translation>
     </message>
     <message>
-        <location filename="UI/UserInterface.py" line="1865"/>
+        <location filename="UI/UserInterface.py" line="1916"/>
         <source>&lt;b&gt;Show external tools&lt;/b&gt;&lt;p&gt;Opens a dialog to show the path and versions of all extenal tools used by eric5.&lt;/p&gt;</source>
         <translation type="unfinished">&lt;b&gt;Zobrazit externí nástroje&lt;/b&gt;&lt;p&gt;Otevře dialog pro zobrazení cesty a verze externích nástrojů používaných Eric4.&lt;/p&gt; {5.?}</translation>
     </message>
     <message>
-        <location filename="UI/UserInterface.py" line="2088"/>
+        <location filename="UI/UserInterface.py" line="2139"/>
         <source>&lt;b&gt;Eric API Documentation&lt;/b&gt;&lt;p&gt;Display the Eric API documentation. The location for the documentation is the Documentation/Source subdirectory of the eric5 installation directory.&lt;/p&gt;</source>
         <translation type="unfinished">&lt;b&gt;Eric API dokumentace&lt;/b&gt;&lt;p&gt;Zobrazit Eric API dokumentaci. Umístění dokumentace je v podadresáři Documentation/Source v instalačním adresáři eric4.&lt;/p&gt; {5 ?}</translation>
     </message>
     <message>
-        <location filename="UI/UserInterface.py" line="2514"/>
+        <location filename="UI/UserInterface.py" line="2565"/>
         <source>External Tools/{0}</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="UI/UserInterface.py" line="3916"/>
+        <location filename="UI/UserInterface.py" line="4003"/>
         <source>Qt v.3 is not supported by eric5.</source>
         <translation type="unfinished">Qt v.3 není podporováno v eric4. {3 ?} {5.?}</translation>
     </message>
     <message>
-        <location filename="UI/UserInterface.py" line="4078"/>
+        <location filename="UI/UserInterface.py" line="4165"/>
         <source>&lt;p&gt;The file &lt;b&gt;{0}&lt;/b&gt; does not exist or is zero length.&lt;/p&gt;</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="UI/UserInterface.py" line="3836"/>
+        <location filename="UI/UserInterface.py" line="3923"/>
         <source>&lt;p&gt;Could not start Qt-Designer.&lt;br&gt;Ensure that it is available as &lt;b&gt;{0}&lt;/b&gt;.&lt;/p&gt;</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="UI/UserInterface.py" line="3893"/>
+        <location filename="UI/UserInterface.py" line="3980"/>
         <source>&lt;p&gt;Could not start Qt-Linguist.&lt;br&gt;Ensure that it is available as &lt;b&gt;{0}&lt;/b&gt;.&lt;/p&gt;</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="UI/UserInterface.py" line="3937"/>
+        <location filename="UI/UserInterface.py" line="4024"/>
         <source>&lt;p&gt;Could not start Qt-Assistant.&lt;br&gt;Ensure that it is available as &lt;b&gt;{0}&lt;/b&gt;.&lt;/p&gt;</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="UI/UserInterface.py" line="3982"/>
+        <location filename="UI/UserInterface.py" line="4069"/>
         <source>&lt;p&gt;Could not start custom viewer.&lt;br&gt;Ensure that it is available as &lt;b&gt;{0}&lt;/b&gt;.&lt;/p&gt;</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="UI/UserInterface.py" line="4041"/>
+        <location filename="UI/UserInterface.py" line="4128"/>
         <source>&lt;p&gt;Could not start UI Previewer.&lt;br&gt;Ensure that it is available as &lt;b&gt;{0}&lt;/b&gt;.&lt;/p&gt;</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="UI/UserInterface.py" line="4086"/>
+        <location filename="UI/UserInterface.py" line="4173"/>
         <source>&lt;p&gt;Could not start Translation Previewer.&lt;br&gt;Ensure that it is available as &lt;b&gt;{0}&lt;/b&gt;.&lt;/p&gt;</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="UI/UserInterface.py" line="4105"/>
+        <location filename="UI/UserInterface.py" line="4192"/>
         <source>&lt;p&gt;Could not start SQL Browser.&lt;br&gt;Ensure that it is available as &lt;b&gt;{0}&lt;/b&gt;.&lt;/p&gt;</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="UI/UserInterface.py" line="4153"/>
+        <location filename="UI/UserInterface.py" line="4240"/>
         <source>No tool entry found for external tool &apos;{0}&apos; in tool group &apos;{1}&apos;.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="UI/UserInterface.py" line="4159"/>
+        <location filename="UI/UserInterface.py" line="4246"/>
         <source>No toolgroup entry &apos;{0}&apos; found.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="UI/UserInterface.py" line="4195"/>
+        <location filename="UI/UserInterface.py" line="4282"/>
         <source>Starting process &apos;{0} {1}&apos;.
 </source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="UI/UserInterface.py" line="4214"/>
+        <location filename="UI/UserInterface.py" line="4301"/>
         <source>&lt;p&gt;Could not start the tool entry &lt;b&gt;{0}&lt;/b&gt;.&lt;br&gt;Ensure that it is available as &lt;b&gt;{1}&lt;/b&gt;.&lt;/p&gt;</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="UI/UserInterface.py" line="4291"/>
+        <location filename="UI/UserInterface.py" line="4378"/>
         <source>Process &apos;{0}&apos; has exited.
 </source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="UI/UserInterface.py" line="4498"/>
+        <location filename="UI/UserInterface.py" line="4585"/>
         <source>&lt;p&gt;The documentation starting point &quot;&lt;b&gt;{0}&lt;/b&gt;&quot; could not be found.&lt;/p&gt;</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="UI/UserInterface.py" line="4692"/>
+        <location filename="UI/UserInterface.py" line="4779"/>
         <source>Keyboard shortcut file (*.e4k);;Compressed keyboard shortcut file (*.e4kz)</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="UI/UserInterface.py" line="4712"/>
+        <location filename="UI/UserInterface.py" line="4799"/>
         <source>&lt;p&gt;The keyboard shortcuts could not be written to file &lt;b&gt;{0}&lt;/b&gt;.&lt;/p&gt;</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="UI/UserInterface.py" line="4721"/>
+        <location filename="UI/UserInterface.py" line="4808"/>
         <source>Keyboard shortcut file (*.e4k *.e4kz)</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="UI/UserInterface.py" line="4845"/>
+        <location filename="UI/UserInterface.py" line="4932"/>
         <source>&lt;p&gt;The tasks file &lt;b&gt;{0}&lt;/b&gt; could not be written.&lt;/p&gt;</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="UI/UserInterface.py" line="4892"/>
+        <location filename="UI/UserInterface.py" line="4979"/>
         <source>&lt;p&gt;The tasks file &lt;b&gt;{0}&lt;/b&gt; could not be read.&lt;/p&gt;</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="UI/UserInterface.py" line="4902"/>
+        <location filename="UI/UserInterface.py" line="4989"/>
         <source>&lt;p&gt;The tasks file &lt;b&gt;{0}&lt;/b&gt; has an unsupported format.&lt;/p&gt;</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="UI/UserInterface.py" line="4920"/>
+        <location filename="UI/UserInterface.py" line="5007"/>
         <source>&lt;p&gt;The session file &lt;b&gt;{0}&lt;/b&gt; could not be written.&lt;/p&gt;</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="UI/UserInterface.py" line="4971"/>
+        <location filename="UI/UserInterface.py" line="5058"/>
         <source>&lt;p&gt;The session file &lt;b&gt;{0}&lt;/b&gt; could not be read.&lt;/p&gt;</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="UI/UserInterface.py" line="4981"/>
+        <location filename="UI/UserInterface.py" line="5068"/>
         <source>&lt;p&gt;The session file &lt;b&gt;{0}&lt;/b&gt; has an unsupported format.&lt;/p&gt;</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="UI/UserInterface.py" line="5099"/>
+        <location filename="UI/UserInterface.py" line="5186"/>
         <source>&lt;p&gt;&lt;b&gt;{0}&lt;/b&gt; is not a file.&lt;/p&gt;</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="UI/UserInterface.py" line="5279"/>
+        <location filename="UI/UserInterface.py" line="5366"/>
         <source>Trying host {0}</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="UI/UserInterface.py" line="5385"/>
+        <location filename="UI/UserInterface.py" line="5472"/>
         <source>The update to &lt;b&gt;{0}&lt;/b&gt; of eric5 is available at &lt;b&gt;{1}&lt;/b&gt;. Would you like to get it?</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="UI/UserInterface.py" line="5397"/>
+        <location filename="UI/UserInterface.py" line="5484"/>
         <source>Eric5 is up to date</source>
         <translation type="unfinished">Eric4 je aktuální {5 ?}</translation>
     </message>
     <message>
-        <location filename="UI/UserInterface.py" line="5397"/>
+        <location filename="UI/UserInterface.py" line="5484"/>
         <source>You are using the latest version of eric5</source>
         <translation type="unfinished">Používáte poslední verzi eric5</translation>
     </message>
     <message>
-        <location filename="UI/UserInterface.py" line="5446"/>
+        <location filename="UI/UserInterface.py" line="5533"/>
         <source>&lt;b&gt;Connect to proxy &apos;{0}&apos; using:&lt;/b&gt;</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="UI/UserInterface.py" line="5468"/>
+        <location filename="UI/UserInterface.py" line="5555"/>
         <source>&lt;p&gt;SSL Errors:&lt;/p&gt;&lt;p&gt;{0}&lt;/p&gt;&lt;p&gt;Do you want to ignore these errors?&lt;/p&gt;</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="UI/UserInterface.py" line="5494"/>
+        <location filename="UI/UserInterface.py" line="5581"/>
         <source>eric5 has not been configured yet. The configuration dialog will be started.</source>
         <translation type="unfinished">eric4 nebyl ještě nakonfigurován. Bude spuštěn konfigurační dialog. {5 ?}</translation>
     </message>
+    <message>
+        <location filename="UI/UserInterface.py" line="1566"/>
+        <source>Cooperation</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="UI/UserInterface.py" line="1566"/>
+        <source>&amp;Cooperation</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="UI/UserInterface.py" line="1568"/>
+        <source>Toggle the Cooperation window</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="UI/UserInterface.py" line="1570"/>
+        <source>&lt;b&gt;Toggle the Cooperation window&lt;/b&gt;&lt;p&gt;If the Cooperation window is hidden then display it. If it is displayed then close it.&lt;/p&gt;</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="UI/UserInterface.py" line="1579"/>
+        <source>Activate Cooperation-Viewer</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="UI/UserInterface.py" line="1579"/>
+        <source>Alt+Shift+O</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>UserPropertiesDialog</name>
@@ -39937,146 +40144,161 @@
 <context>
     <name>ViewProfileDialog</name>
     <message>
-        <location filename="Preferences/ViewProfileDialog.ui" line="13"/>
+        <location filename="Preferences/ViewProfileDialog.ui" line="14"/>
         <source>Configure View Profiles</source>
         <translation>Konfigurace profilů pohledů</translation>
     </message>
     <message>
-        <location filename="Preferences/ViewProfileDialog.ui" line="125"/>
+        <location filename="Preferences/ViewProfileDialog.ui" line="136"/>
         <source>&amp;Debug Profile</source>
         <translation>&amp;Debugovací profil</translation>
     </message>
     <message>
-        <location filename="Preferences/ViewProfileDialog.ui" line="148"/>
+        <location filename="Preferences/ViewProfileDialog.ui" line="159"/>
         <source>File-Browser</source>
         <translation>Soubor-Browser</translation>
     </message>
     <message>
-        <location filename="Preferences/ViewProfileDialog.ui" line="165"/>
+        <location filename="Preferences/ViewProfileDialog.ui" line="193"/>
         <source>Shell</source>
         <translation>Shell</translation>
     </message>
     <message>
-        <location filename="Preferences/ViewProfileDialog.ui" line="185"/>
+        <location filename="Preferences/ViewProfileDialog.ui" line="166"/>
         <source>Log-Viewer</source>
         <translation>Prohlížeč logů</translation>
     </message>
     <message>
-        <location filename="Preferences/ViewProfileDialog.ui" line="195"/>
+        <location filename="Preferences/ViewProfileDialog.ui" line="203"/>
         <source>Task-Viewer</source>
         <translation>Prohlížeč úloh</translation>
     </message>
     <message>
-        <location filename="Preferences/ViewProfileDialog.ui" line="205"/>
+        <location filename="Preferences/ViewProfileDialog.ui" line="213"/>
         <source>Templates-Viewer</source>
         <translation>Prohlížeč šablon</translation>
     </message>
     <message>
-        <location filename="Preferences/ViewProfileDialog.ui" line="32"/>
+        <location filename="Preferences/ViewProfileDialog.ui" line="33"/>
         <source>&amp;Edit Profile</source>
         <translation>&amp;Editační profil</translation>
     </message>
     <message>
-        <location filename="Preferences/ViewProfileDialog.ui" line="22"/>
+        <location filename="Preferences/ViewProfileDialog.ui" line="23"/>
         <source>Select the windows, that should be visible, when the different profiles are active.</source>
         <translation>Výběr oken, které se mají zobrazit ve vybraném profilu.</translation>
     </message>
     <message>
-        <location filename="Preferences/ViewProfileDialog.ui" line="131"/>
+        <location filename="Preferences/ViewProfileDialog.ui" line="176"/>
         <source>Multiproject-Viewer</source>
         <translation>Prohlížeč multiprojektu</translation>
     </message>
     <message>
-        <location filename="Preferences/ViewProfileDialog.ui" line="138"/>
+        <location filename="Preferences/ViewProfileDialog.ui" line="183"/>
         <source>Project-Viewer</source>
         <translation>Prohlížeč projektu</translation>
     </message>
     <message>
-        <location filename="Preferences/ViewProfileDialog.ui" line="155"/>
+        <location filename="Preferences/ViewProfileDialog.ui" line="149"/>
         <source>Debug-Viewer</source>
         <translation>Prohlížeč debugeru</translation>
     </message>
     <message>
-        <location filename="Preferences/ViewProfileDialog.ui" line="175"/>
+        <location filename="Preferences/ViewProfileDialog.ui" line="220"/>
         <source>Terminal</source>
         <translation>Terminál</translation>
     </message>
+    <message>
+        <location filename="Preferences/ViewProfileDialog.ui" line="142"/>
+        <source>Cooperation</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>ViewProfileSidebarsDialog</name>
     <message>
-        <location filename="Preferences/ViewProfileSidebarsDialog.ui" line="13"/>
+        <location filename="Preferences/ViewProfileSidebarsDialog.ui" line="14"/>
         <source>Configure View Profiles</source>
         <translation>Konfigurace profilů pohledů</translation>
     </message>
     <message>
-        <location filename="Preferences/ViewProfileSidebarsDialog.ui" line="22"/>
+        <location filename="Preferences/ViewProfileSidebarsDialog.ui" line="23"/>
         <source>Select the windows, that should be visible, when the different profiles are active.</source>
         <translation>Výběr oken, které se mají zobrazit, když jsou aktivní jiné profily.</translation>
     </message>
     <message>
-        <location filename="Preferences/ViewProfileSidebarsDialog.ui" line="32"/>
+        <location filename="Preferences/ViewProfileSidebarsDialog.ui" line="33"/>
         <source>&amp;Edit Profile</source>
         <translation>&amp;Editovat profil</translation>
     </message>
     <message>
-        <location filename="Preferences/ViewProfileSidebarsDialog.ui" line="74"/>
+        <location filename="Preferences/ViewProfileSidebarsDialog.ui" line="85"/>
         <source>Left Sidebar</source>
         <translation>Levé menu</translation>
     </message>
     <message>
-        <location filename="Preferences/ViewProfileSidebarsDialog.ui" line="81"/>
+        <location filename="Preferences/ViewProfileSidebarsDialog.ui" line="92"/>
         <source>Bottom Sidebar</source>
         <translation>Dolní menu</translation>
     </message>
     <message>
-        <location filename="Preferences/ViewProfileSidebarsDialog.ui" line="91"/>
+        <location filename="Preferences/ViewProfileSidebarsDialog.ui" line="109"/>
         <source>Debug-Viewer</source>
         <translation>Prohlížeč debugeru</translation>
     </message>
     <message>
-        <location filename="Preferences/ViewProfileSidebarsDialog.ui" line="68"/>
+        <location filename="Preferences/ViewProfileSidebarsDialog.ui" line="79"/>
         <source>&amp;Debug Profile</source>
         <translation>&amp;Debugovací profil</translation>
     </message>
+    <message>
+        <location filename="Preferences/ViewProfileSidebarsDialog.ui" line="102"/>
+        <source>Cooperation</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>ViewProfileToolboxesDialog</name>
     <message>
-        <location filename="Preferences/ViewProfileToolboxesDialog.ui" line="13"/>
+        <location filename="Preferences/ViewProfileToolboxesDialog.ui" line="14"/>
         <source>Configure View Profiles</source>
         <translation>Konfigurace profilů pohledů</translation>
     </message>
     <message>
-        <location filename="Preferences/ViewProfileToolboxesDialog.ui" line="22"/>
+        <location filename="Preferences/ViewProfileToolboxesDialog.ui" line="23"/>
         <source>Select the windows, that should be visible, when the different profiles are active.</source>
         <translation>Vybrat okna, která se mají zobrazit, když jsou aktivní jiné profily.</translation>
     </message>
     <message>
-        <location filename="Preferences/ViewProfileToolboxesDialog.ui" line="32"/>
+        <location filename="Preferences/ViewProfileToolboxesDialog.ui" line="33"/>
         <source>&amp;Edit Profile</source>
         <translation>&amp;Editovat profil</translation>
     </message>
     <message>
-        <location filename="Preferences/ViewProfileToolboxesDialog.ui" line="74"/>
+        <location filename="Preferences/ViewProfileToolboxesDialog.ui" line="85"/>
         <source>Vertical Toolbox</source>
         <translation>Svislá lišta nástrojů</translation>
     </message>
     <message>
-        <location filename="Preferences/ViewProfileToolboxesDialog.ui" line="81"/>
+        <location filename="Preferences/ViewProfileToolboxesDialog.ui" line="92"/>
         <source>Horizontal Toolbox</source>
         <translation>Vodorovná lišta nástrojů</translation>
     </message>
     <message>
-        <location filename="Preferences/ViewProfileToolboxesDialog.ui" line="91"/>
+        <location filename="Preferences/ViewProfileToolboxesDialog.ui" line="109"/>
         <source>Debug-Viewer</source>
         <translation>Prohlížeč debugeru</translation>
     </message>
     <message>
-        <location filename="Preferences/ViewProfileToolboxesDialog.ui" line="68"/>
+        <location filename="Preferences/ViewProfileToolboxesDialog.ui" line="79"/>
         <source>&amp;Debug Profile</source>
         <translation>&amp;Debugovací profil</translation>
     </message>
+    <message>
+        <location filename="Preferences/ViewProfileToolboxesDialog.ui" line="102"/>
+        <source>Cooperation</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>ViewmanagerPage</name>
Binary file i18n/eric5_de.qm has changed
--- a/i18n/eric5_de.ts	Sat Mar 20 13:14:56 2010 +0000
+++ b/i18n/eric5_de.ts	Sun Mar 21 19:34:15 2010 +0000
@@ -1807,6 +1807,107 @@
     </message>
 </context>
 <context>
+    <name>ChatWidget</name>
+    <message>
+        <location filename="Cooperation/ChatWidget.ui" line="48"/>
+        <source>Chat</source>
+        <translation>Chat</translation>
+    </message>
+    <message>
+        <location filename="Cooperation/ChatWidget.ui" line="26"/>
+        <source>Users</source>
+        <translation>Nutzer</translation>
+    </message>
+    <message>
+        <location filename="Cooperation/ChatWidget.ui" line="67"/>
+        <source>Press to send the text above</source>
+        <translation>Drücken, um den obigen Text zu senden</translation>
+    </message>
+    <message>
+        <location filename="Cooperation/ChatWidget.ui" line="70"/>
+        <source>Send</source>
+        <translation>Senden</translation>
+    </message>
+    <message>
+        <location filename="Cooperation/ChatWidget.ui" line="80"/>
+        <source>Connection</source>
+        <translation>Verbindung</translation>
+    </message>
+    <message>
+        <location filename="Cooperation/ChatWidget.ui" line="86"/>
+        <source>Host:</source>
+        <translation>Rechner:</translation>
+    </message>
+    <message>
+        <location filename="Cooperation/ChatWidget.ui" line="151"/>
+        <source>Port:</source>
+        <translation>Port:</translation>
+    </message>
+    <message>
+        <location filename="Cooperation/ChatWidget.ui" line="135"/>
+        <source>Shows the connection status</source>
+        <translation>Zeigt den Verbindungsstatus</translation>
+    </message>
+    <message>
+        <location filename="Cooperation/ChatWidget.ui" line="145"/>
+        <source>Server</source>
+        <translation>Server</translation>
+    </message>
+    <message>
+        <location filename="Cooperation/ChatWidget.ui" line="190"/>
+        <source>Shows the status of the server</source>
+        <translation>Zeigt den Status des Servers</translation>
+    </message>
+    <message>
+        <location filename="Cooperation/ChatWidget.py" line="172"/>
+        <source>Start Server</source>
+        <translation>Server starten</translation>
+    </message>
+    <message>
+        <location filename="Cooperation/ChatWidget.py" line="67"/>
+        <source>! Unknown command: {0}
+</source>
+        <translation>! Unbekannter Befehl: {0}
+</translation>
+    </message>
+    <message>
+        <location filename="Cooperation/ChatWidget.py" line="88"/>
+        <source>* {0} has joined.
+</source>
+        <translation>* {0} ist beigetreten.
+</translation>
+    </message>
+    <message>
+        <location filename="Cooperation/ChatWidget.py" line="117"/>
+        <source>* {0} has left.
+</source>
+        <translation>* {0} hat die Sitzung verlassen.
+</translation>
+    </message>
+    <message>
+        <location filename="Cooperation/ChatWidget.py" line="180"/>
+        <source>Stop Server</source>
+        <translation>Server anhalten</translation>
+    </message>
+    <message>
+        <location filename="Cooperation/ChatWidget.py" line="185"/>
+        <source>! Server Error: {0}
+</source>
+        <translation>! Serverfehler: {0}
+</translation>
+    </message>
+    <message>
+        <location filename="Cooperation/ChatWidget.py" line="198"/>
+        <source>Disconnect</source>
+        <translation>Unterbrechen</translation>
+    </message>
+    <message>
+        <location filename="Cooperation/ChatWidget.py" line="206"/>
+        <source>Connect</source>
+        <translation>Verbinden</translation>
+    </message>
+</context>
+<context>
     <name>CodeMetricsDialog</name>
     <message>
         <location filename="DataViews/CodeMetricsDialog.py" line="157"/>
@@ -2330,252 +2431,270 @@
         <translation>Applikation</translation>
     </message>
     <message>
-        <location filename="Preferences/ConfigurationDialog.py" line="97"/>
+        <location filename="Preferences/ConfigurationDialog.py" line="100"/>
         <source>CORBA</source>
         <translation>CORBA</translation>
     </message>
     <message>
-        <location filename="Preferences/ConfigurationDialog.py" line="100"/>
-        <source>Email</source>
-        <translation>Email</translation>
-    </message>
-    <message>
         <location filename="Preferences/ConfigurationDialog.py" line="103"/>
-        <source>Graphics</source>
-        <translation>Grafiken</translation>
+        <source>Email</source>
+        <translation>Email</translation>
     </message>
     <message>
         <location filename="Preferences/ConfigurationDialog.py" line="106"/>
+        <source>Graphics</source>
+        <translation>Grafiken</translation>
+    </message>
+    <message>
+        <location filename="Preferences/ConfigurationDialog.py" line="109"/>
         <source>Icons</source>
         <translation>Symbole</translation>
     </message>
     <message>
-        <location filename="Preferences/ConfigurationDialog.py" line="112"/>
-        <source>Plugin Manager</source>
-        <translation>Plugin Manager</translation>
-    </message>
-    <message>
         <location filename="Preferences/ConfigurationDialog.py" line="115"/>
+        <source>Plugin Manager</source>
+        <translation>Plugin Manager</translation>
+    </message>
+    <message>
+        <location filename="Preferences/ConfigurationDialog.py" line="118"/>
         <source>Printer</source>
         <translation>Drucker</translation>
     </message>
     <message>
-        <location filename="Preferences/ConfigurationDialog.py" line="272"/>
+        <location filename="Preferences/ConfigurationDialog.py" line="275"/>
         <source>Python</source>
         <translation>Python</translation>
     </message>
     <message>
-        <location filename="Preferences/ConfigurationDialog.py" line="124"/>
-        <source>Qt</source>
-        <translation>Qt</translation>
-    </message>
-    <message>
         <location filename="Preferences/ConfigurationDialog.py" line="127"/>
-        <source>Shell</source>
-        <translation>Shell</translation>
+        <source>Qt</source>
+        <translation>Qt</translation>
     </message>
     <message>
         <location filename="Preferences/ConfigurationDialog.py" line="130"/>
-        <source>Tasks</source>
-        <translation>Aufgaben</translation>
+        <source>Shell</source>
+        <translation>Shell</translation>
     </message>
     <message>
         <location filename="Preferences/ConfigurationDialog.py" line="133"/>
+        <source>Tasks</source>
+        <translation>Aufgaben</translation>
+    </message>
+    <message>
+        <location filename="Preferences/ConfigurationDialog.py" line="136"/>
         <source>Templates</source>
         <translation>Vorlagen</translation>
     </message>
     <message>
-        <location filename="Preferences/ConfigurationDialog.py" line="139"/>
+        <location filename="Preferences/ConfigurationDialog.py" line="142"/>
         <source>Version Control Systems</source>
         <translation>Versionskontrollsysteme</translation>
     </message>
     <message>
-        <location filename="Preferences/ConfigurationDialog.py" line="143"/>
+        <location filename="Preferences/ConfigurationDialog.py" line="146"/>
         <source>Debugger</source>
         <translation>Debugger</translation>
     </message>
     <message>
-        <location filename="Preferences/ConfigurationDialog.py" line="155"/>
+        <location filename="Preferences/ConfigurationDialog.py" line="158"/>
         <source>Ruby</source>
         <translation>Ruby</translation>
     </message>
     <message>
-        <location filename="Preferences/ConfigurationDialog.py" line="159"/>
-        <source>Editor</source>
-        <translation>Editor</translation>
-    </message>
-    <message>
         <location filename="Preferences/ConfigurationDialog.py" line="162"/>
-        <source>APIs</source>
-        <translation>APIs</translation>
+        <source>Editor</source>
+        <translation>Editor</translation>
     </message>
     <message>
         <location filename="Preferences/ConfigurationDialog.py" line="165"/>
+        <source>APIs</source>
+        <translation>APIs</translation>
+    </message>
+    <message>
+        <location filename="Preferences/ConfigurationDialog.py" line="168"/>
         <source>Autocompletion</source>
         <translation>Autom. Vervollständigung</translation>
     </message>
     <message>
-        <location filename="Preferences/ConfigurationDialog.py" line="172"/>
+        <location filename="Preferences/ConfigurationDialog.py" line="175"/>
         <source>Calltips</source>
         <translation>Calltips</translation>
     </message>
     <message>
-        <location filename="Preferences/ConfigurationDialog.py" line="178"/>
+        <location filename="Preferences/ConfigurationDialog.py" line="181"/>
         <source>General</source>
         <translation>Allgemein</translation>
     </message>
     <message>
-        <location filename="Preferences/ConfigurationDialog.py" line="193"/>
-        <source>Typing</source>
-        <translation>Eingabe</translation>
-    </message>
-    <message>
         <location filename="Preferences/ConfigurationDialog.py" line="196"/>
+        <source>Typing</source>
+        <translation>Eingabe</translation>
+    </message>
+    <message>
+        <location filename="Preferences/ConfigurationDialog.py" line="199"/>
         <source>Exporters</source>
         <translation>Exporter</translation>
     </message>
     <message>
-        <location filename="Preferences/ConfigurationDialog.py" line="200"/>
-        <source>Highlighters</source>
-        <translation>Syntax-Hervorhebung</translation>
-    </message>
-    <message>
         <location filename="Preferences/ConfigurationDialog.py" line="203"/>
+        <source>Highlighters</source>
+        <translation>Syntax-Hervorhebung</translation>
+    </message>
+    <message>
+        <location filename="Preferences/ConfigurationDialog.py" line="206"/>
         <source>Filetype Associations</source>
         <translation>Dateitypzuordnungen</translation>
     </message>
     <message>
-        <location filename="Preferences/ConfigurationDialog.py" line="207"/>
+        <location filename="Preferences/ConfigurationDialog.py" line="210"/>
         <source>Styles</source>
         <translation>Stile</translation>
     </message>
     <message>
-        <location filename="Preferences/ConfigurationDialog.py" line="276"/>
+        <location filename="Preferences/ConfigurationDialog.py" line="279"/>
         <source>Help</source>
         <translation>Hilfe</translation>
     </message>
     <message>
-        <location filename="Preferences/ConfigurationDialog.py" line="282"/>
+        <location filename="Preferences/ConfigurationDialog.py" line="285"/>
         <source>Help Documentation</source>
         <translation>Hilfe Dokumentation</translation>
     </message>
     <message>
-        <location filename="Preferences/ConfigurationDialog.py" line="286"/>
+        <location filename="Preferences/ConfigurationDialog.py" line="289"/>
         <source>Help Viewers</source>
         <translation>Hilfeanzeiger</translation>
     </message>
     <message>
-        <location filename="Preferences/ConfigurationDialog.py" line="241"/>
-        <source>Project</source>
-        <translation>Projekt</translation>
-    </message>
-    <message>
-        <location filename="Preferences/ConfigurationDialog.py" line="238"/>
-        <source>Project Viewer</source>
-        <translation>Projektanzeige</translation>
-    </message>
-    <message>
         <location filename="Preferences/ConfigurationDialog.py" line="244"/>
+        <source>Project</source>
+        <translation>Projekt</translation>
+    </message>
+    <message>
+        <location filename="Preferences/ConfigurationDialog.py" line="241"/>
+        <source>Project Viewer</source>
+        <translation>Projektanzeige</translation>
+    </message>
+    <message>
+        <location filename="Preferences/ConfigurationDialog.py" line="247"/>
         <source>Multiproject</source>
         <translation>Mehrfachprojekt</translation>
     </message>
     <message>
-        <location filename="Preferences/ConfigurationDialog.py" line="251"/>
-        <source>Interface</source>
-        <translation>Oberfläche</translation>
-    </message>
-    <message>
         <location filename="Preferences/ConfigurationDialog.py" line="254"/>
+        <source>Interface</source>
+        <translation>Oberfläche</translation>
+    </message>
+    <message>
+        <location filename="Preferences/ConfigurationDialog.py" line="257"/>
         <source>Viewmanager</source>
         <translation>Ansichtenmanager</translation>
     </message>
     <message>
-        <location filename="Preferences/ConfigurationDialog.py" line="421"/>
+        <location filename="Preferences/ConfigurationDialog.py" line="424"/>
         <source>Configuration Page Error</source>
         <translation>Konfigurationsseitenfehler</translation>
     </message>
     <message>
-        <location filename="Preferences/ConfigurationDialog.py" line="421"/>
+        <location filename="Preferences/ConfigurationDialog.py" line="424"/>
         <source>&lt;p&gt;The configuration page &lt;b&gt;{0}&lt;/b&gt; could not be loaded.&lt;/p&gt;</source>
         <translation>&lt;p&gt;Die Konfigurationsseite &lt;b&gt;{0}&lt;/b&gt; konnte nicht geladen werden.&lt;/p&gt;</translation>
     </message>
     <message>
-        <location filename="Preferences/ConfigurationDialog.py" line="181"/>
-        <source>Filehandling</source>
-        <translation>Dateibehandlung</translation>
-    </message>
-    <message>
         <location filename="Preferences/ConfigurationDialog.py" line="184"/>
+        <source>Filehandling</source>
+        <translation>Dateibehandlung</translation>
+    </message>
+    <message>
+        <location filename="Preferences/ConfigurationDialog.py" line="187"/>
         <source>Searching</source>
         <translation>Suchen</translation>
     </message>
     <message>
-        <location filename="Preferences/ConfigurationDialog.py" line="279"/>
+        <location filename="Preferences/ConfigurationDialog.py" line="282"/>
         <source>Appearance</source>
         <translation>Erscheinung</translation>
     </message>
     <message>
-        <location filename="Preferences/ConfigurationDialog.py" line="175"/>
+        <location filename="Preferences/ConfigurationDialog.py" line="178"/>
         <source>QScintilla</source>
         <translation>QScintilla</translation>
     </message>
     <message>
-        <location filename="Preferences/ConfigurationDialog.py" line="190"/>
+        <location filename="Preferences/ConfigurationDialog.py" line="193"/>
         <source>Style</source>
         <translation>Stil</translation>
     </message>
     <message>
-        <location filename="Preferences/ConfigurationDialog.py" line="214"/>
+        <location filename="Preferences/ConfigurationDialog.py" line="217"/>
         <source>Properties</source>
         <translation>Einstellungen</translation>
     </message>
     <message>
-        <location filename="Preferences/ConfigurationDialog.py" line="382"/>
+        <location filename="Preferences/ConfigurationDialog.py" line="385"/>
         <source>Preferences</source>
         <translation>Optionen</translation>
     </message>
     <message>
-        <location filename="Preferences/ConfigurationDialog.py" line="387"/>
+        <location filename="Preferences/ConfigurationDialog.py" line="390"/>
         <source>Please select an entry of the list 
 to display the configuration page.</source>
         <translation>Wähle einen Listeneintrag aus,
 um die Konfigurationsseite anzuzeigen.</translation>
     </message>
     <message>
-        <location filename="Preferences/ConfigurationDialog.py" line="136"/>
+        <location filename="Preferences/ConfigurationDialog.py" line="139"/>
         <source>Terminal</source>
         <translation>Terminal</translation>
     </message>
     <message>
-        <location filename="Preferences/ConfigurationDialog.py" line="269"/>
+        <location filename="Preferences/ConfigurationDialog.py" line="272"/>
         <source>Network</source>
         <translation>Netzwerk</translation>
     </message>
     <message>
-        <location filename="Preferences/ConfigurationDialog.py" line="187"/>
+        <location filename="Preferences/ConfigurationDialog.py" line="190"/>
         <source>Spell checking</source>
         <translation>Rechtschreibprüfung</translation>
     </message>
     <message>
-        <location filename="Preferences/ConfigurationDialog.py" line="152"/>
+        <location filename="Preferences/ConfigurationDialog.py" line="155"/>
         <source>Python3</source>
         <translation>Python3</translation>
     </message>
     <message>
-        <location filename="Preferences/ConfigurationDialog.py" line="289"/>
+        <location filename="Preferences/ConfigurationDialog.py" line="292"/>
         <source>Eric Web Browser</source>
         <translation>Eric Web-Browser</translation>
     </message>
     <message>
-        <location filename="Preferences/ConfigurationDialog.py" line="118"/>
+        <location filename="Preferences/ConfigurationDialog.py" line="121"/>
         <source>Py3Flakes</source>
         <translation>Py3Flakes</translation>
     </message>
     <message>
-        <location filename="Preferences/ConfigurationDialog.py" line="211"/>
+        <location filename="Preferences/ConfigurationDialog.py" line="214"/>
         <source>Keywords</source>
         <translation>Schlüsselwörter</translation>
     </message>
+    <message>
+        <location filename="Preferences/ConfigurationDialog.py" line="97"/>
+        <source>Cooperation</source>
+        <translation>Zusammenarbeit</translation>
+    </message>
+</context>
+<context>
+    <name>Connection</name>
+    <message>
+        <location filename="Cooperation/Connection.py" line="63"/>
+        <source>undefined</source>
+        <translation>unbestimmt</translation>
+    </message>
+    <message>
+        <location filename="Cooperation/Connection.py" line="64"/>
+        <source>unknown</source>
+        <translation>unbekannt</translation>
+    </message>
 </context>
 <context>
     <name>CookieDetailsDialog</name>
@@ -2911,6 +3030,69 @@
     </message>
 </context>
 <context>
+    <name>CooperationClient</name>
+    <message>
+        <location filename="Cooperation/CooperationClient.py" line="63"/>
+        <source>unknown</source>
+        <translation>unbekannt</translation>
+    </message>
+    <message>
+        <location filename="Cooperation/CooperationClient.py" line="252"/>
+        <source>Illegal address: {0}:{1}
+</source>
+        <translation>Ungültige Adresse: {0}:{1}
+</translation>
+    </message>
+</context>
+<context>
+    <name>CooperationPage</name>
+    <message>
+        <location filename="Preferences/ConfigurationPages/CooperationPage.ui" line="20"/>
+        <source>&lt;b&gt;Configure cooperation settings&lt;/b&gt;</source>
+        <translation>&lt;b&gt;Zusammenarbeitseinstellungen&lt;/b&gt;</translation>
+    </message>
+    <message>
+        <location filename="Preferences/ConfigurationPages/CooperationPage.ui" line="42"/>
+        <source>Select to start the server automatically</source>
+        <translation>Auswählen, um den Server automatisch zu starten</translation>
+    </message>
+    <message>
+        <location filename="Preferences/ConfigurationPages/CooperationPage.ui" line="45"/>
+        <source>Start server automatically</source>
+        <translation>Server automatisch starten</translation>
+    </message>
+    <message>
+        <location filename="Preferences/ConfigurationPages/CooperationPage.ui" line="52"/>
+        <source>Server Port:</source>
+        <translation>Server Port:</translation>
+    </message>
+    <message>
+        <location filename="Preferences/ConfigurationPages/CooperationPage.ui" line="59"/>
+        <source>Enter the port number to listen on</source>
+        <translation>Gib die Portnummer ein, an der der Server lauscht</translation>
+    </message>
+    <message>
+        <location filename="Preferences/ConfigurationPages/CooperationPage.ui" line="91"/>
+        <source>Select to incrementally try other ports for the server</source>
+        <translation>Auswählen, um weitere Ports zu versuchen</translation>
+    </message>
+    <message>
+        <location filename="Preferences/ConfigurationPages/CooperationPage.ui" line="94"/>
+        <source>Try other ports for server</source>
+        <translation>Weitere Serverports versuchen</translation>
+    </message>
+    <message>
+        <location filename="Preferences/ConfigurationPages/CooperationPage.ui" line="104"/>
+        <source>No. ports to try:</source>
+        <translation># Ports zu versuchen:</translation>
+    </message>
+    <message>
+        <location filename="Preferences/ConfigurationPages/CooperationPage.ui" line="114"/>
+        <source>Enter the maximum number of additional ports to try</source>
+        <translation>Gib die maximale Anzahl an Ports ein, die versucht werden sollen</translation>
+    </message>
+</context>
+<context>
     <name>CorbaPage</name>
     <message>
         <location filename="Preferences/ConfigurationPages/CorbaPage.ui" line="36"/>
@@ -18356,12 +18538,12 @@
 <context>
     <name>Preferences</name>
     <message>
-        <location filename="Preferences/__init__.py" line="816"/>
+        <location filename="Preferences/__init__.py" line="825"/>
         <source>Export Preferences</source>
         <translation>Konfiguration exportieren</translation>
     </message>
     <message>
-        <location filename="Preferences/__init__.py" line="835"/>
+        <location filename="Preferences/__init__.py" line="844"/>
         <source>Import Preferences</source>
         <translation>Konfiguration importieren</translation>
     </message>
@@ -32138,1821 +32320,1851 @@
 <context>
     <name>UserInterface</name>
     <message>
-        <location filename="UI/UserInterface.py" line="1539"/>
+        <location filename="UI/UserInterface.py" line="1590"/>
         <source>What&apos;s This?</source>
         <translation>Was ist das?</translation>
     </message>
     <message>
-        <location filename="UI/UserInterface.py" line="1544"/>
+        <location filename="UI/UserInterface.py" line="1595"/>
         <source>Context sensitive help</source>
         <translation>Kontextsensitive Hilfe</translation>
     </message>
     <message>
-        <location filename="UI/UserInterface.py" line="1545"/>
+        <location filename="UI/UserInterface.py" line="1596"/>
         <source>&lt;b&gt;Display context sensitive help&lt;/b&gt;&lt;p&gt;In What&apos;s This? mode, the mouse cursor shows an arrow with a question mark, and you can click on the interface elements to get a short description of what they do and how to use them. In dialogs, this feature can be accessed using the context help button in the titlebar.&lt;/p&gt;</source>
         <translation>&lt;b&gt;Zeige kontextsensitive Hilfe an&lt;b&gt;&lt;/p&gt;Im &quot;Was ist das?&quot; Modus (der Mauszeiger stellt einen Pfeil mit Fragezeichen dar) wird auf einen Mausklick eine kurze Hilfebeschreibung zu dem ausgewählten MMI-Element angezeigt. In Dialogen kann diese Funktionalität durch den entsprechenden Knopf im Fensterkopf erreicht werden.&lt;/p&gt;</translation>
     </message>
     <message>
-        <location filename="UI/UserInterface.py" line="1556"/>
+        <location filename="UI/UserInterface.py" line="1607"/>
         <source>Helpviewer</source>
         <translation>Hilfe</translation>
     </message>
     <message>
-        <location filename="UI/UserInterface.py" line="1556"/>
+        <location filename="UI/UserInterface.py" line="1607"/>
         <source>&amp;Helpviewer...</source>
         <translation>&amp;Hilfe...</translation>
     </message>
     <message>
-        <location filename="UI/UserInterface.py" line="1561"/>
+        <location filename="UI/UserInterface.py" line="1612"/>
         <source>Open the helpviewer window</source>
         <translation>Öffnet das Hilfe-Fenster</translation>
     </message>
     <message>
-        <location filename="UI/UserInterface.py" line="2302"/>
+        <location filename="UI/UserInterface.py" line="2353"/>
         <source>Unittest</source>
         <translation>Modultests</translation>
     </message>
     <message>
-        <location filename="UI/UserInterface.py" line="1635"/>
+        <location filename="UI/UserInterface.py" line="1686"/>
         <source>&amp;Unittest...</source>
         <translation>&amp;Modultests...</translation>
     </message>
     <message>
-        <location filename="UI/UserInterface.py" line="1639"/>
+        <location filename="UI/UserInterface.py" line="1690"/>
         <source>Start unittest dialog</source>
         <translation>Starte den Modultest Dialog</translation>
     </message>
     <message>
-        <location filename="UI/UserInterface.py" line="2201"/>
+        <location filename="UI/UserInterface.py" line="2252"/>
         <source>&amp;Window</source>
         <translation>&amp;Fenster</translation>
     </message>
     <message>
-        <location filename="UI/UserInterface.py" line="2170"/>
+        <location filename="UI/UserInterface.py" line="2221"/>
         <source>&amp;Tools</source>
         <translation>&amp;Werkzeuge</translation>
     </message>
     <message>
-        <location filename="UI/UserInterface.py" line="2235"/>
+        <location filename="UI/UserInterface.py" line="2286"/>
         <source>&amp;Help</source>
         <translation>&amp;Hilfe</translation>
     </message>
     <message>
-        <location filename="UI/UserInterface.py" line="1252"/>
+        <location filename="UI/UserInterface.py" line="1279"/>
         <source>Quit</source>
         <translation>Beenden</translation>
     </message>
     <message>
-        <location filename="UI/UserInterface.py" line="1816"/>
+        <location filename="UI/UserInterface.py" line="1867"/>
         <source>Preferences</source>
         <translation>Optionen</translation>
     </message>
     <message>
-        <location filename="UI/UserInterface.py" line="1816"/>
+        <location filename="UI/UserInterface.py" line="1867"/>
         <source>&amp;Preferences...</source>
         <translation>&amp;Optionen...</translation>
     </message>
     <message>
-        <location filename="UI/UserInterface.py" line="1819"/>
+        <location filename="UI/UserInterface.py" line="1870"/>
         <source>Set the prefered configuration</source>
         <translation>Konfiguriert die Einstellungen</translation>
     </message>
     <message>
-        <location filename="UI/UserInterface.py" line="1820"/>
+        <location filename="UI/UserInterface.py" line="1871"/>
         <source>&lt;b&gt;Preferences&lt;/b&gt;&lt;p&gt;Set the configuration items of the application with your prefered values.&lt;/p&gt;</source>
         <translation>&lt;b&gt;Optionen&lt;/b&gt;&lt;p&gt;Konfiguriert die einstellbaren Parameter der Applikation nach ihren Wünschen.&lt;/p&gt;</translation>
     </message>
     <message>
-        <location filename="UI/UserInterface.py" line="1257"/>
-        <source>Quit the IDE</source>
-        <translation>Beenden der Entwicklungsumgebung</translation>
-    </message>
-    <message>
-        <location filename="UI/UserInterface.py" line="2301"/>
-        <source>Tools</source>
-        <translation>Werkzeuge</translation>
-    </message>
-    <message>
-        <location filename="UI/UserInterface.py" line="3970"/>
-        <source>Help</source>
-        <translation>Hilfe</translation>
-    </message>
-    <message>
-        <location filename="UI/UserInterface.py" line="2208"/>
-        <source>&amp;Toolbars</source>
-        <translation>&amp;Werkzeugleisten</translation>
-    </message>
-    <message>
-        <location filename="UI/UserInterface.py" line="4078"/>
-        <source>Problem</source>
-        <translation>Problem</translation>
-    </message>
-    <message>
-        <location filename="UI/UserInterface.py" line="1252"/>
-        <source>&amp;Quit</source>
-        <translation>B&amp;eenden</translation>
-    </message>
-    <message>
-        <location filename="UI/UserInterface.py" line="1258"/>
-        <source>&lt;b&gt;Quit the IDE&lt;/b&gt;&lt;p&gt;This quits the IDE. Any unsaved changes may be saved first. Any Python program being debugged will be stopped and the preferences will be written to disc.&lt;/p&gt;</source>
-        <translation>&lt;b&gt;Die Entwicklungsumgebung beenden&lt;/b&gt;&lt;p&gt;Dies beendet die Entwicklungsumgebung. Ungesicherte Änderungen können zuvor gesichert werden. Ein Python Programm, das gerade debugged wird, wird beendet und sämtliche Einstellungen werden gespeichert.&lt;/p&gt;</translation>
-    </message>
-    <message>
-        <location filename="UI/UserInterface.py" line="1539"/>
-        <source>&amp;What&apos;s This?</source>
-        <translation>&amp;Was ist das?</translation>
-    </message>
-    <message>
-        <location filename="UI/UserInterface.py" line="4214"/>
-        <source>Process Generation Error</source>
-        <translation>Fehler beim Prozessstart</translation>
-    </message>
-    <message>
-        <location filename="UI/UserInterface.py" line="1224"/>
-        <source>{0} - Passive Mode</source>
-        <translation>{0} - Passiver Modus</translation>
-    </message>
-    <message>
-        <location filename="UI/UserInterface.py" line="1229"/>
-        <source>{0} - {1} - Passive Mode</source>
-        <translation>{0} - {1} - Passiver Modus</translation>
-    </message>
-    <message>
-        <location filename="UI/UserInterface.py" line="1428"/>
-        <source>Log-Viewer</source>
-        <translation>Ausgabefenster</translation>
-    </message>
-    <message>
-        <location filename="UI/UserInterface.py" line="2066"/>
-        <source>&amp;Python Documentation</source>
-        <translation>&amp;Python Dokumentation</translation>
-    </message>
-    <message>
-        <location filename="UI/UserInterface.py" line="2068"/>
-        <source>Open Python Documentation</source>
-        <translation>Öffne die Python Dokumentation</translation>
-    </message>
-    <message>
-        <location filename="UI/UserInterface.py" line="2066"/>
-        <source>Python Documentation</source>
-        <translation>Python Dokumentation</translation>
-    </message>
-    <message>
-        <location filename="UI/UserInterface.py" line="2303"/>
-        <source>Settings</source>
-        <translation>Einstellungen</translation>
-    </message>
-    <message>
-        <location filename="UI/UserInterface.py" line="1428"/>
-        <source>&amp;Log-Viewer</source>
-        <translation>&amp;Ausgabefenster</translation>
-    </message>
-    <message>
-        <location filename="UI/UserInterface.py" line="1430"/>
-        <source>Toggle the Log-Viewer window</source>
-        <translation>Schalte das Ausgabefenster um</translation>
-    </message>
-    <message>
-        <location filename="UI/UserInterface.py" line="1431"/>
-        <source>&lt;b&gt;Toggle the Log-Viewer window&lt;/b&gt;&lt;p&gt;If the Log-Viewer window is hidden then display it. If it is displayed then close it.&lt;/p&gt;</source>
-        <translation>&lt;b&gt;Schalte das Ausgabefenster um&lt;/b&gt;&lt;p&gt;Falls das Ausgabefenster nicht sichtbar ist, wird es dargestellt. Ist es sichtbar, so wird es versteckt.&lt;/p&gt;</translation>
-    </message>
-    <message>
-        <location filename="UI/UserInterface.py" line="1579"/>
-        <source>Show Versions</source>
-        <translation>Zeige Versionen</translation>
-    </message>
-    <message>
-        <location filename="UI/UserInterface.py" line="1579"/>
-        <source>Show &amp;Versions</source>
-        <translation>Zeige &amp;Versionen</translation>
-    </message>
-    <message>
-        <location filename="UI/UserInterface.py" line="1581"/>
-        <source>Display version information</source>
-        <translation>Zeigt Versionsinformationen</translation>
-    </message>
-    <message>
-        <location filename="UI/UserInterface.py" line="1582"/>
-        <source>&lt;b&gt;Show Versions&lt;/b&gt;&lt;p&gt;Display version information.&lt;/p&gt;</source>
-        <translation>&lt;b&gt;Zeige Versionen&lt;/b&gt;&lt;p&gt;Zeigt Versionsinformationen an.&lt;/p&gt;</translation>
-    </message>
-    <message>
-        <location filename="UI/UserInterface.py" line="1901"/>
-        <source>Keyboard Shortcuts</source>
-        <translation>Tastaturkurzbefehle</translation>
-    </message>
-    <message>
-        <location filename="UI/UserInterface.py" line="1901"/>
-        <source>Keyboard &amp;Shortcuts...</source>
-        <translation>&amp;Tastaturkurzbefehle...</translation>
-    </message>
-    <message>
-        <location filename="UI/UserInterface.py" line="1904"/>
-        <source>Set the keyboard shortcuts</source>
-        <translation>Setze die Tastaturkurzbefehle</translation>
-    </message>
-    <message>
-        <location filename="UI/UserInterface.py" line="1905"/>
-        <source>&lt;b&gt;Keyboard Shortcuts&lt;/b&gt;&lt;p&gt;Set the keyboard shortcuts of the application with your prefered values.&lt;/p&gt;</source>
-        <translation>&lt;b&gt;Tastaturkurzbefehle&lt;/b&gt;&lt;p&gt;Setze die Tastaturkurzbefehle der Applikation mit den bevorzugten Werten.&lt;/p&gt;</translation>
-    </message>
-    <message>
-        <location filename="UI/UserInterface.py" line="2156"/>
-        <source>E&amp;xtras</source>
-        <translation>E&amp;xtras</translation>
-    </message>
-    <message>
-        <location filename="UI/UserInterface.py" line="2645"/>
-        <source>Report Bug</source>
-        <translation>Fehler berichten</translation>
-    </message>
-    <message>
-        <location filename="UI/UserInterface.py" line="1613"/>
-        <source>Report &amp;Bug...</source>
-        <translation>&amp;Fehler berichten...</translation>
-    </message>
-    <message>
-        <location filename="UI/UserInterface.py" line="1615"/>
-        <source>Report a bug</source>
-        <translation>Einen Fehler berichten</translation>
-    </message>
-    <message>
-        <location filename="UI/UserInterface.py" line="1616"/>
-        <source>&lt;b&gt;Report Bug...&lt;/b&gt;&lt;p&gt;Opens a dialog to report a bug.&lt;/p&gt;</source>
-        <translation>&lt;b&gt;Fehler berichten...&lt;/b&gt;&lt;p&gt;Öffnet einen Dialog zum Senden eines Fehlerberichtes.&lt;/p&gt;</translation>
-    </message>
-    <message>
-        <location filename="UI/UserInterface.py" line="4712"/>
-        <source>Export Keyboard Shortcuts</source>
-        <translation>Tastaturkurzbefehle exportieren</translation>
-    </message>
-    <message>
-        <location filename="UI/UserInterface.py" line="1913"/>
-        <source>&amp;Export Keyboard Shortcuts...</source>
-        <translation>Tastaturkurzbefehle &amp;exportieren...</translation>
-    </message>
-    <message>
-        <location filename="UI/UserInterface.py" line="1917"/>
-        <source>Export the keyboard shortcuts</source>
-        <translation>Exportiert die Tastaturkurzbefehle</translation>
-    </message>
-    <message>
-        <location filename="UI/UserInterface.py" line="1918"/>
-        <source>&lt;b&gt;Export Keyboard Shortcuts&lt;/b&gt;&lt;p&gt;Export the keyboard shortcuts of the application.&lt;/p&gt;</source>
-        <translation>&lt;b&gt;Tastaturkurzbefehle exportieren&lt;/b&gt;&lt;p&gt;Exportiert die Tastaturkurzbefehle der Applikation.&lt;/p&gt;</translation>
-    </message>
-    <message>
-        <location filename="UI/UserInterface.py" line="4721"/>
-        <source>Import Keyboard Shortcuts</source>
-        <translation>Tastaturkurzbefehle importieren</translation>
-    </message>
-    <message>
-        <location filename="UI/UserInterface.py" line="1926"/>
-        <source>&amp;Import Keyboard Shortcuts...</source>
-        <translation>Tastaturkurzbefehle &amp;importieren...</translation>
-    </message>
-    <message>
-        <location filename="UI/UserInterface.py" line="1930"/>
-        <source>Import the keyboard shortcuts</source>
-        <translation>Importiert die Tastaturkurzbefehle</translation>
-    </message>
-    <message>
-        <location filename="UI/UserInterface.py" line="1931"/>
-        <source>&lt;b&gt;Import Keyboard Shortcuts&lt;/b&gt;&lt;p&gt;Import the keyboard shortcuts of the application.&lt;/p&gt;</source>
-        <translation>&lt;b&gt;Tastaturkurzbefehle importieren&lt;/b&gt;&lt;p&gt;Importiert die Tastaturkurzbefehle der Applikation.&lt;/p&gt;</translation>
-    </message>
-    <message>
-        <location filename="UI/UserInterface.py" line="232"/>
-        <source>Generating Main User Interface...</source>
-        <translation>Erzeuge das Hauptfenster...</translation>
-    </message>
-    <message>
-        <location filename="UI/UserInterface.py" line="258"/>
-        <source>Setting up connections...</source>
-        <translation>Erstelle Verbindungen...</translation>
-    </message>
-    <message>
-        <location filename="UI/UserInterface.py" line="532"/>
-        <source>Initializing Actions...</source>
-        <translation>Initialisiere Aktionen...</translation>
-    </message>
-    <message>
-        <location filename="UI/UserInterface.py" line="534"/>
-        <source>Initializing Menus...</source>
-        <translation>Initialisiere Menüs...</translation>
-    </message>
-    <message>
-        <location filename="UI/UserInterface.py" line="536"/>
-        <source>Initializing Toolbars...</source>
-        <translation>Initialisiere Werkzeugleisten...</translation>
-    </message>
-    <message>
-        <location filename="UI/UserInterface.py" line="538"/>
-        <source>Initializing Statusbar...</source>
-        <translation>Initialisiere Statuszeile...</translation>
-    </message>
-    <message>
-        <location filename="UI/UserInterface.py" line="504"/>
-        <source>Initializing Tools...</source>
-        <translation>Initialisiere Werkzeuge...</translation>
-    </message>
-    <message>
-        <location filename="UI/UserInterface.py" line="1640"/>
-        <source>&lt;b&gt;Unittest&lt;/b&gt;&lt;p&gt;Perform unit tests. The dialog gives you the ability to select and run a unittest suite.&lt;/p&gt;</source>
-        <translation>&lt;b&gt;Modultests&lt;/b&gt;&lt;p&gt;Führe Modultests durch. Der Dialog bietet die Möglichkeit eine Zusammenstellung von Modultests auszuwählen und auszuführen.&lt;/p&gt;</translation>
-    </message>
-    <message>
-        <location filename="UI/UserInterface.py" line="1648"/>
-        <source>Unittest Restart</source>
-        <translation>Modultest neu starten</translation>
-    </message>
-    <message>
-        <location filename="UI/UserInterface.py" line="1652"/>
-        <source>Restart last unittest</source>
-        <translation>Modultest neu starten</translation>
-    </message>
-    <message>
-        <location filename="UI/UserInterface.py" line="1653"/>
-        <source>&lt;b&gt;Restart Unittest&lt;/b&gt;&lt;p&gt;Restart the unittest performed last.&lt;/p&gt;</source>
-        <translation>&lt;b&gt;Modultest neu starten&lt;/b&gt;&lt;p&gt;Den letzten durchgeführten Modultest neu starten.&lt;/p&gt;</translation>
-    </message>
-    <message>
-        <location filename="UI/UserInterface.py" line="1661"/>
-        <source>Unittest Script</source>
-        <translation>Modultest (Skript)</translation>
-    </message>
-    <message>
-        <location filename="UI/UserInterface.py" line="1665"/>
-        <source>Run unittest with current script</source>
-        <translation>Modultest für aktuelles Skript ausführen</translation>
-    </message>
-    <message>
-        <location filename="UI/UserInterface.py" line="1666"/>
-        <source>&lt;b&gt;Unittest Script&lt;/b&gt;&lt;p&gt;Run unittest with current script.&lt;/p&gt;</source>
-        <translation>&lt;b&gt;Modultest (Skript)&lt;/b&gt;&lt;p&gt;Modultest für aktuelles Skript ausführen.&lt;/p&gt;</translation>
-    </message>
-    <message>
-        <location filename="UI/UserInterface.py" line="3754"/>
-        <source>Unittest Project</source>
-        <translation>Modultest (Projekt)</translation>
-    </message>
-    <message>
-        <location filename="UI/UserInterface.py" line="1678"/>
-        <source>Run unittest with current project</source>
-        <translation>Modultest für aktuellesProjekt ausführen</translation>
-    </message>
-    <message>
-        <location filename="UI/UserInterface.py" line="1679"/>
-        <source>&lt;b&gt;Unittest Project&lt;/b&gt;&lt;p&gt;Run unittest with current project.&lt;/p&gt;</source>
-        <translation>&lt;b&gt;Modultest (Projekt)&lt;/b&gt;&lt;p&gt;Modultest für aktuelles Projekt ausführen.&lt;/p&gt;</translation>
-    </message>
-    <message>
-        <location filename="UI/UserInterface.py" line="2141"/>
-        <source>&amp;Unittest</source>
-        <translation>&amp;Modultests</translation>
-    </message>
-    <message>
-        <location filename="UI/UserInterface.py" line="3754"/>
-        <source>There is no main script defined for the current project. Aborting</source>
-        <translation>Für das aktuelle Projekt ist kein Hauptskript festgelegt. Abbruch</translation>
-    </message>
-    <message>
-        <location filename="UI/UserInterface.py" line="1648"/>
-        <source>&amp;Restart Unittest...</source>
-        <translation>Modultest &amp;neu starten...</translation>
-    </message>
-    <message>
-        <location filename="UI/UserInterface.py" line="1661"/>
-        <source>Unittest &amp;Script...</source>
-        <translation>Modultest (&amp;Skript)...</translation>
-    </message>
-    <message>
-        <location filename="UI/UserInterface.py" line="1674"/>
-        <source>Unittest &amp;Project...</source>
-        <translation>Modultest (&amp;Projekt)...</translation>
-    </message>
-    <message>
-        <location filename="UI/UserInterface.py" line="1744"/>
-        <source>Compare Files</source>
-        <translation>Dateien vergleichen</translation>
-    </message>
-    <message>
-        <location filename="UI/UserInterface.py" line="1744"/>
-        <source>&amp;Compare Files...</source>
-        <translation>Dateien &amp;vergleichen...</translation>
-    </message>
-    <message>
-        <location filename="UI/UserInterface.py" line="1759"/>
-        <source>Compare two files</source>
-        <translation>Zwei Dateien vergleichen</translation>
-    </message>
-    <message>
-        <location filename="UI/UserInterface.py" line="1748"/>
-        <source>&lt;b&gt;Compare Files&lt;/b&gt;&lt;p&gt;Open a dialog to compare two files.&lt;/p&gt;</source>
-        <translation>&lt;b&gt;Dateien vergleichen&lt;/b&gt;&lt;p&gt;Öffnet einen Dialog zum Vergleich zweier Dateien.&lt;/p&gt;</translation>
-    </message>
-    <message>
-        <location filename="UI/UserInterface.py" line="1755"/>
-        <source>Compare Files side by side</source>
-        <translation>Dateien Seite an Seite vergleichen</translation>
-    </message>
-    <message>
-        <location filename="UI/UserInterface.py" line="1755"/>
-        <source>Compare Files &amp;side by side...</source>
-        <translation>Dateien &amp;Seite an Seite vergleichen...</translation>
-    </message>
-    <message>
-        <location filename="UI/UserInterface.py" line="1760"/>
-        <source>&lt;b&gt;Compare Files side by side&lt;/b&gt;&lt;p&gt;Open a dialog to compare two files and show the result side by side.&lt;/p&gt;</source>
-        <translation>&lt;b&gt;Dateien Seite an Seite vergleichen&lt;/b&gt;&lt;p&gt;Öffnet einen Dialog zum Vergleich zweier Dateien und zur Anzeige des Ergebnisse Seite an Seite.&lt;/p&gt;</translation>
-    </message>
-    <message>
-        <location filename="UI/UserInterface.py" line="5099"/>
-        <source>Drop