← Back to team overview

openlp-core team mailing list archive

[Merge] lp:~trb143/openlp/bugfixes into lp:openlp

 

Tim Bentley has proposed merging lp:~trb143/openlp/bugfixes into lp:openlp.

Requested reviews:
    openlp.org Core (openlp-core)

Plugin List screen
Start Presentation dialog - Settings work.
Remotes plugin now can set it's own port if wanted
-- 
https://code.launchpad.net/~trb143/openlp/bugfixes/+merge/10184
Your team openlp.org Core is subscribed to branch lp:openlp.
=== modified file 'openlp/core/lib/pluginmanager.py'
--- openlp/core/lib/pluginmanager.py	2009-08-10 20:10:20 +0000
+++ openlp/core/lib/pluginmanager.py	2009-08-13 20:02:38 +0000
@@ -86,18 +86,22 @@
                         __import__(modulename, globals(), locals(), [])
                     except ImportError, e:
                         log.error(u'Failed to import module %s on path %s for reason %s', modulename, path, e.args[0])
-        self.plugin_classes = Plugin.__subclasses__()
+        plugin_classes = Plugin.__subclasses__()
         self.plugins = []
+        self.plugin_list=[]
         plugin_objects = []
-        for p in self.plugin_classes:
+        for p in plugin_classes:
             try:
                 plugin = p(self.plugin_helpers)
                 log.debug(u'loaded plugin %s with helpers', unicode(p))
                 log.debug(u'Plugin: %s', unicode(p))
+                pList = {u'name': plugin.name, u'version':plugin.version, u'status': u'Inactive'}
                 if plugin.check_pre_conditions():
                     log.debug(u'Appending %s ', unicode(p))
                     plugin_objects.append(plugin)
                     eventmanager.register(plugin)
+                    pList[u'status'] = u'Active'
+                self.plugin_list.append(pList)
             except TypeError:
                 log.error(u'loaded plugin %s has no helpers', unicode(p))
         self.plugins = sorted(plugin_objects, self.order_by_weight)

=== modified file 'openlp/core/ui/__init__.py'
--- openlp/core/ui/__init__.py	2009-07-06 16:34:13 +0000
+++ openlp/core/ui/__init__.py	2009-08-13 20:02:38 +0000
@@ -27,6 +27,7 @@
 from themestab import ThemesTab
 from about import AboutForm
 from alertform import AlertForm
+from plugindialoglistform import PluginForm
 from settingsform import SettingsForm
 from servicemanager import ServiceManager
 from thememanager import ThemeManager

=== modified file 'openlp/core/ui/mainwindow.py'
--- openlp/core/ui/mainwindow.py	2009-08-10 20:10:20 +0000
+++ openlp/core/ui/mainwindow.py	2009-08-14 19:12:14 +0000
@@ -23,7 +23,8 @@
 from PyQt4 import QtCore, QtGui
 
 from openlp.core.ui import AboutForm, SettingsForm, AlertForm, \
-    ServiceManager, ThemeManager, MainDisplay, SlideController
+    ServiceManager, ThemeManager, MainDisplay, SlideController,  \
+    PluginForm
 from openlp.core.lib import translate, Plugin, MediaManagerItem, \
     SettingsTab, EventManager, RenderManager, PluginConfig, \
     SettingsManager, PluginManager, EventType
@@ -203,6 +204,12 @@
             QtGui.QIcon.Normal, QtGui.QIcon.Off)
         self.ToolsAlertItem.setIcon(AlertIcon)
         self.ToolsAlertItem.setObjectName(u'ToolsAlertItem')
+        self.PluginItem = QtGui.QAction(MainWindow)
+        PluginIcon = QtGui.QIcon()
+        PluginIcon.addPixmap(QtGui.QPixmap(u':/tools/tools_alert.png'),
+            QtGui.QIcon.Normal, QtGui.QIcon.Off)
+        self.PluginItem.setIcon(AlertIcon)
+        self.PluginItem.setObjectName(u'PluginItem')
         self.HelpDocumentationItem = QtGui.QAction(MainWindow)
         ContentsIcon = QtGui.QIcon()
         ContentsIcon.addPixmap(QtGui.QPixmap(u':/system/system_help_contents.png'),
@@ -264,6 +271,7 @@
         self.OptionsMenu.addSeparator()
         self.OptionsMenu.addAction(self.OptionsSettingsItem)
         self.ToolsMenu.addAction(self.ToolsAlertItem)
+        self.ToolsMenu.addAction(self.PluginItem)
         self.ToolsMenu.addSeparator()
         self.ToolsMenu.addAction(self.ToolsAddToolItem)
         self.HelpMenu.addAction(self.HelpDocumentationItem)
@@ -362,6 +370,10 @@
         self.ToolsAlertItem.setStatusTip(
             translate(u'mainWindow', u'Show an alert message'))
         self.ToolsAlertItem.setShortcut(translate(u'mainWindow', u'F7'))
+        self.PluginItem.setText(translate(u'mainWindow', u'&Plugin'))
+        self.PluginItem.setStatusTip(
+            translate(u'mainWindow', u'List the Plugins'))
+        self.PluginItem.setShortcut(translate(u'mainWindow', u'Alt+F7'))
         self.HelpDocumentationItem.setText(
             translate(u'mainWindow', u'&User Guide'))
         self.HelpAboutItem.setText(translate(u'mainWindow', u'&About'))
@@ -408,6 +420,7 @@
         self.mainDisplay = MainDisplay(self, screens)
         self.generalConfig = PluginConfig(u'General')
         self.alertForm = AlertForm(self)
+        self.pluginForm = PluginForm(self)
         self.aboutForm = AboutForm()
         self.settingsForm = SettingsForm(self.screenList, self)
         # Set up the path with plugins
@@ -441,6 +454,8 @@
             QtCore.SIGNAL(u'triggered()'), self.onHelpAboutItemClicked)
         QtCore.QObject.connect(self.ToolsAlertItem,
             QtCore.SIGNAL(u'triggered()'), self.onToolsAlertItemClicked)
+        QtCore.QObject.connect(self.PluginItem,
+            QtCore.SIGNAL(u'triggered()'), self.onPluginItemClicked)
         QtCore.QObject.connect(self.OptionsSettingsItem,
             QtCore.SIGNAL(u'triggered()'), self.onOptionsSettingsItemClicked)
         #warning cyclic dependency
@@ -514,6 +529,13 @@
         """
         self.alertForm.exec_()
 
+    def onPluginItemClicked(self):
+        """
+        Show the Plugin form
+        """
+        self.pluginForm.load()
+        self.pluginForm.exec_()
+
     def onOptionsSettingsItemClicked(self):
         """
         Show the Settings dialog

=== added file 'openlp/core/ui/plugindialoglistform.py'
--- openlp/core/ui/plugindialoglistform.py	1970-01-01 00:00:00 +0000
+++ openlp/core/ui/plugindialoglistform.py	2009-08-14 16:26:22 +0000
@@ -0,0 +1,76 @@
+# -*- coding: utf-8 -*-
+
+# Form implementation generated from reading ui file 'plugindialoglistform.ui'
+#
+# Created: Thu Aug 13 05:52:06 2009
+#      by: PyQt4 UI code generator 4.5.4
+#
+# WARNING! All changes made in this file will be lost!
+
+import logging
+from PyQt4 import QtCore, QtGui
+from openlp.core.lib import translate
+
+class PluginForm(QtGui.QDialog):
+    global log
+    log = logging.getLogger(u'PluginForm')
+
+    def __init__(self, parent=None):
+        QtGui.QDialog.__init__(self, None)
+        self.parent = parent
+        self.setupUi(self)
+        log.debug(u'Defined')
+
+    def setupUi(self, PluginForm):
+        PluginForm.setObjectName(u'PluginForm')
+        PluginForm.resize(400, 393)
+        self.PluginViewList = QtGui.QTableWidget(PluginForm)
+        self.PluginViewList.setGeometry(QtCore.QRect(20, 10, 371, 331))
+        self.PluginViewList.setObjectName(u'PluginViewList')
+        self.PluginViewList.setShowGrid(False)
+        self.PluginViewList.setGridStyle(QtCore.Qt.SolidLine)
+        self.PluginViewList.setSortingEnabled(False)
+        self.PluginViewList.setColumnCount(3)
+        item = QtGui.QTableWidgetItem()
+        self.PluginViewList.setHorizontalHeaderItem(0, item)
+        item = QtGui.QTableWidgetItem()
+        self.PluginViewList.setHorizontalHeaderItem(1, item)
+        item = QtGui.QTableWidgetItem()
+        self.PluginViewList.setHorizontalHeaderItem(2, item)
+        self.PluginViewList.horizontalHeader().setVisible(True)
+        self.PluginViewList.verticalHeader().setVisible(False)
+        self.ButtonBox = QtGui.QDialogButtonBox(PluginForm)
+        self.ButtonBox.setGeometry(QtCore.QRect(220, 350, 170, 25))
+        self.ButtonBox.setStandardButtons(QtGui.QDialogButtonBox.Ok)
+        self.ButtonBox.setObjectName(u'ButtonBox')
+
+        self.retranslateUi(PluginForm)
+        QtCore.QObject.connect(self.ButtonBox, QtCore.SIGNAL(u'accepted()'), PluginForm.close)
+        QtCore.QMetaObject.connectSlotsByName(PluginForm)
+
+    def retranslateUi(self, PluginForm):
+        PluginForm.setWindowTitle(translate(u'PluginForm', u'Plugin list'))
+        self.PluginViewList.horizontalHeaderItem(0).setText(translate(u'PluginForm', u'Name'))
+        self.PluginViewList.horizontalHeaderItem(1).setText(translate(u'PluginForm', u'Version'))
+        self.PluginViewList.horizontalHeaderItem(2).setText(translate(u'PluginForm', u'Status'))
+
+    def load(self):
+        """
+        Load the plugin details into the screen
+        """
+        for plugin in self.parent.plugin_manager.plugin_list:
+            row = self.PluginViewList.rowCount()
+            self.PluginViewList.setRowCount(row + 1)
+            item1 = QtGui.QTableWidgetItem(plugin[u'name'])
+            item1.setTextAlignment(QtCore.Qt.AlignVCenter)
+            item2 = QtGui.QTableWidgetItem(plugin[u'version'])
+            item2.setTextAlignment(QtCore.Qt.AlignVCenter)
+            item3 = QtGui.QTableWidgetItem(translate(u'PluginForm', plugin[u'status']))
+            item3.setTextAlignment(QtCore.Qt.AlignVCenter)
+            self.PluginViewList.setItem(row, 0, item1)
+            self.PluginViewList.setItem(row, 1, item2)
+            self.PluginViewList.setItem(row, 2, item3)
+            self.PluginViewList.setRowHeight(row, 15)
+
+
+

=== modified file 'openlp/plugins/presentations/lib/__init__.py'
--- openlp/plugins/presentations/lib/__init__.py	2009-08-11 19:21:52 +0000
+++ openlp/plugins/presentations/lib/__init__.py	2009-08-14 17:41:29 +0000
@@ -19,6 +19,6 @@
 """
 from mediaitem import PresentationMediaItem
 from presentationtab import PresentationTab
-from impressslidecontroller import impressToolbar
+from impresscontroller import impressController
 
-__all__ = ['PresentationMediaItem', 'PresentationTab', 'impressToolbar']
+__all__ = ['PresentationMediaItem', 'PresentationTab', 'impressController']

=== modified file 'openlp/plugins/presentations/lib/presentationtab.py'
--- openlp/plugins/presentations/lib/presentationtab.py	2009-06-16 18:21:24 +0000
+++ openlp/plugins/presentations/lib/presentationtab.py	2009-08-14 19:12:14 +0000
@@ -20,14 +20,14 @@
 
 from PyQt4 import Qt, QtCore, QtGui
 
-from openlp.core.lib import SettingsTab, translate
+from openlp.core.lib import SettingsTab, translate,  str_to_bool
 
 class PresentationTab(SettingsTab):
     """
     PresentationsTab is the Presentations settings tab in the settings dialog.
     """
     def __init__(self):
-        SettingsTab.__init__(self, translate(u'PresentationTab', u'Presentation'), u'Presentation')
+        SettingsTab.__init__(self, translate(u'PresentationTab', u'Presentation'), u'Presentations')
 
     def setupUi(self):
         self.setObjectName(u'PresentationTab')
@@ -41,7 +41,6 @@
         self.PresentationLeftLayout.setObjectName(u'PresentationLeftLayout')
         self.PresentationLeftLayout.setSpacing(8)
         self.PresentationLeftLayout.setMargin(0)
-
         self.VerseDisplayGroupBox = QtGui.QGroupBox(self)
         self.VerseDisplayGroupBox.setObjectName(u'VerseDisplayGroupBox')
         self.VerseDisplayLayout = QtGui.QGridLayout(self.VerseDisplayGroupBox)
@@ -53,36 +52,25 @@
         self.VerseTypeLayout.setSpacing(8)
         self.VerseTypeLayout.setMargin(0)
         self.VerseTypeLayout.setObjectName(u'VerseTypeLayout')
-
         self.PowerpointCheckBox = QtGui.QCheckBox(self.VerseDisplayGroupBox)
+        self.PowerpointCheckBox.setTristate(False)
         self.PowerpointCheckBox.setObjectName(u'PowerpointCheckBox')
         self.VerseDisplayLayout.addWidget(self.PowerpointCheckBox, 0, 0, 1, 1)
-
-        self.PowerpointPath = QtGui.QLineEdit(self.VerseDisplayGroupBox)
-        self.PowerpointPath.setObjectName(u'PowerpointPath')
-        self.VerseDisplayLayout.addWidget(self.PowerpointPath, 1, 0, 1, 1)
-
         self.ImpressCheckBox = QtGui.QCheckBox(self.VerseDisplayGroupBox)
+        self.ImpressCheckBox.setTristate(False)
         self.ImpressCheckBox.setObjectName(u'ImpressCheckBox')
         self.VerseDisplayLayout.addWidget(self.ImpressCheckBox, 2, 0, 1, 1)
-
-        self.ImpressPath = QtGui.QLineEdit(self.VerseDisplayGroupBox)
-        self.ImpressPath.setObjectName(u'ImpressPath')
-        self.VerseDisplayLayout.addWidget(self.ImpressPath, 3, 0, 1, 1)
-
         self.PresentationThemeWidget = QtGui.QWidget(self.VerseDisplayGroupBox)
         self.PresentationThemeWidget.setObjectName(u'PresentationThemeWidget')
         self.PresentationThemeLayout = QtGui.QHBoxLayout(self.PresentationThemeWidget)
         self.PresentationThemeLayout.setSpacing(8)
         self.PresentationThemeLayout.setMargin(0)
         self.PresentationThemeLayout.setObjectName(u'PresentationThemeLayout')
-
         self.PresentationLeftLayout.addWidget(self.VerseDisplayGroupBox)
         self.PresentationLeftSpacer = QtGui.QSpacerItem(40, 20,
             QtGui.QSizePolicy.Minimum, QtGui.QSizePolicy.Expanding)
         self.PresentationLeftLayout.addItem(self.PresentationLeftSpacer)
         self.PresentationLayout.addWidget(self.PresentationLeftWidget)
-
         self.PresentationRightWidget = QtGui.QWidget(self)
         self.PresentationRightWidget.setObjectName(u'PresentationRightWidget')
         self.PresentationRightLayout = QtGui.QVBoxLayout(self.PresentationRightWidget)
@@ -94,42 +82,15 @@
         self.PresentationRightLayout.addItem(self.PresentationRightSpacer)
         self.PresentationLayout.addWidget(self.PresentationRightWidget)
 
-        # Signals and slots
-        #QtCore.QObject.connect(self.NewChaptersCheckBox,
-           # QtCore.SIGNAL(u'stateChanged(int)'), self.onNewChaptersCheckBoxChanged)
-
     def retranslateUi(self):
         self.PowerpointCheckBox.setText(translate(u'PresentationTab', 'Powerpoint available:'))
         self.ImpressCheckBox.setText(translate(u'PresentationTab', 'Impress available:'))
-        self.PowerpointPath.setText(u'powerpoint.exe ')
-        self.ImpressPath.setText(u'openoffice.org -nologo -show ')
-
-    def onNewChaptersCheckBoxChanged(self):
-        check_state = self.NewChaptersCheckBox.checkState()
-        self.show_new_chapters = False
-        if check_state == 2: # we have a set value convert to True/False
-            self.show_new_chapters = True
-
 
     def load(self):
-        pass
-#        self.paragraph_style = (self.config.get_config(u'paragraph style', u'True'))
-#        self.show_new_chapters = (self.config.get_config(u'display new chapter', u"False'))
-#        self.display_style = int(self.config.get_config(u'display brackets', u'0'))
-#        self.Presentation_theme = int(self.config.get_config(u'Presentation theme', u'0'))
-#        self.Presentation_search = (self.config.get_config(u'search as type', u'True'))
-#        if self.paragraph_style:
-#            self.ParagraphRadioButton.setChecked(True)
-#        else:
-#            self.VerseRadioButton.setChecked(True)
-#        self.NewChaptersCheckBox.setChecked(self.show_new_chapters)
-#        self.DisplayStyleComboBox.setCurrentIndex(self.display_style)
-#        self.PresentationSearchCheckBox.setChecked(self.Presentation_search)
+        self.PowerpointCheckBox.setChecked(int(self.config.get_config(u'Powerpoint', 0)))
+        self.ImpressCheckBox.setChecked(int(self.config.get_config(u'Impress', 0)))
 
     def save(self):
-        pass
-#        self.config.set_config(u'paragraph style', unicode(self.paragraph_style))
-#        self.config.set_config(u'display new chapter', unicode(self.show_new_chapters))
-#        self.config.set_config(u'display brackets', unicode(self.display_style))
-#        self.config.set_config(u'search as type', unicode(self.Presentation_search))
-#        self.config.set_config(u'Presentation theme', unicode(self.Presentation_theme))
\ No newline at end of file
+        self.config.set_config(u'Powerpoint', unicode(self.PowerpointCheckBox.checkState()))
+        self.config.set_config(u'Impress', unicode(self.ImpressCheckBox.checkState()))
+        print self.PowerpointCheckBox.checkState(), unicode(self.PowerpointCheckBox.checkState())

=== modified file 'openlp/plugins/presentations/presentationplugin.py'
--- openlp/plugins/presentations/presentationplugin.py	2009-08-11 19:21:52 +0000
+++ openlp/plugins/presentations/presentationplugin.py	2009-08-14 19:12:14 +0000
@@ -24,7 +24,7 @@
 from PyQt4 import QtCore, QtGui
 
 from openlp.core.lib import Plugin,  MediaManagerItem
-from openlp.plugins.presentations.lib import PresentationMediaItem, PresentationTab,  impressToolbar
+from openlp.plugins.presentations.lib import PresentationMediaItem, PresentationTab,  impressController
 
 class PresentationPlugin(Plugin):
 
@@ -66,17 +66,17 @@
         If Not do not install the plugin.
         """
         log.debug('check_pre_conditions')
-        impress = True
-        try:
-            #Check to see if we have uno installed
-            import uno
-            #openoffice = impressToolbar()
-            self.registerControllers(u'Impress', None)
-        except:
-            pass
+
+        if int(self.config.get_config(u'Powerpoint', 0)) == 2:
+            try:
+                #Check to see if we have uno installed
+                import uno
+                #openoffice = impressController()
+                self.registerControllers(u'Impress', None)
+            except:
+                pass
         #If we have no controllers disable plugin
         if len(self.controllers) > 0:
             return True
         else:
             return False
-#        return self.openoffice.checkOoPid()

=== modified file 'openlp/plugins/remotes/lib/__init__.py'
--- openlp/plugins/remotes/lib/__init__.py	2009-08-10 18:20:46 +0000
+++ openlp/plugins/remotes/lib/__init__.py	2009-08-14 17:41:29 +0000
@@ -18,4 +18,4 @@
 Place, Suite 330, Boston, MA 02111-1307 USA
 """
 
-from mediaitem import RemoteMediaItem
+from remotetab import RemoteTab

=== removed file 'openlp/plugins/remotes/lib/mediaitem.py'
--- openlp/plugins/remotes/lib/mediaitem.py	2009-08-10 18:20:46 +0000
+++ openlp/plugins/remotes/lib/mediaitem.py	1970-01-01 00:00:00 +0000
@@ -1,215 +0,0 @@
-# -*- coding: utf-8 -*-
-# vim: autoindent shiftwidth=4 expandtab textwidth=80 tabstop=4 softtabstop=4
-"""
-OpenLP - Open Source Lyrics Projection
-Copyright (c) 2008 Raoul Snyman
-Portions copyright (c) 2008-2009 Martin Thompson, Tim Bentley
-
-This program is free software; you can redistribute it and/or modify it under
-the terms of the GNU General Public License as published by the Free Software
-Foundation; version 2 of the License.
-
-This program is distributed in the hope that it will be useful, but WITHOUT ANY
-WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A
-PARTICULAR PURPOSE. See the GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License along with
-this program; if not, write to the Free Software Foundation, Inc., 59 Temple
-Place, Suite 330, Boston, MA 02111-1307 USA
-"""
-import logging
-
-from PyQt4 import QtCore, QtGui
-
-from openlp.core.lib import MediaManagerItem,  SongXMLParser,  ServiceItem,  translate,  BaseListWithDnD
-
-class RemoteListView(BaseListWithDnD):
-    def __init__(self, parent=None):
-        self.PluginName = u'Remote'
-        BaseListWithDnD.__init__(self, parent)
-
-class RemoteMediaItem(MediaManagerItem):
-    """
-    This is the custom media manager item for Custom Slides.
-    """
-    global log
-    log=logging.getLogger(u'RemoteMediaItem')
-    log.info(u'Remote Media Item loaded')
-
-    def __init__(self, parent, icon, title):
-        MediaManagerItem.__init__(self, parent, icon, title)
-        self.parent = parent
-        self.TranslationContext = u'RemotesPlugin'
-        self.PluginTextShort = u'Remotes'
-        self.ConfigSection = u'Remotes'
-        self.ListViewWithDnD_class = RemoteListView
-        MediaManagerItem.__init__(self, parent, icon, title)
-
-    def initialise(self):
-        pass
-
-    def setupUi(self):
-        # Add a toolbar
-        self.addToolbar()
-#        # Create buttons for the toolbar
-#        ## New Custom Button ##
-#        self.addToolbarButton(
-#            translate(u'CustomMediaItem',u'New Custom Item'),
-#            translate(u'CustomMediaItem',u'Add a new Custom Item'),
-#            u':/custom/custom_new.png', self.onCustomNewClick, u'CustomNewItem')
-#        ## Edit Custom Button ##
-#        self.addToolbarButton(
-#            translate(u'CustomMediaItem',u'Edit Custom Item'),
-#            translate(u'CustomMediaItem',u'Edit the selected Custom Item'),
-#            u':/custom/custom_edit.png', self.onCustomEditClick, u'CustomEditItem')
-#        ## Delete Custom Button ##
-#        self.addToolbarButton(
-#            translate(u'CustomMediaItem',u'Delete Custom Item'),
-#            translate(u'CustomMediaItem',u'Delete the selected Custom Item'),
-#            u':/custom/custom_delete.png', self.onCustomDeleteClick, u'CustomDeleteItem')
-#        ## Separator Line ##
-#        self.addToolbarSeparator()
-#        ## Preview Custom Button ##
-#        self.addToolbarButton(
-#            translate(u'CustomMediaItem',u'Preview Custom Item'),
-#            translate(u'CustomMediaItem',u'Preview the selected Custom Item'),
-#            u':/system/system_preview.png', self.onCustomPreviewClick, u'CustomPreviewItem')
-#        ## Live Custom Button ##
-#        self.addToolbarButton(
-#            translate(u'CustomMediaItem',u'Go Live'),
-#            translate(u'CustomMediaItem', u'Send the selected Custom live'),
-#            u':/system/system_live.png', self.onCustomLiveClick, u'CustomLiveItem')
-#        ## Add Custom Button ##
-#        self.addToolbarButton(
-#            translate(u'CustomMediaItem',u'Add Custom To Service'),
-#            translate(u'CustomMediaItem',u'Add the selected Custom(s) to the service'),
-#            u':/system/system_add.png', self.onCustomAddClick, u'CustomAddItem')
-#        # Add the Customlist widget
-#        self.CustomWidget = QtGui.QWidget(self)
-#        sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Minimum)
-#        sizePolicy.setHorizontalStretch(0)
-#        sizePolicy.setVerticalStretch(0)
-#        sizePolicy.setHeightForWidth(self.CustomWidget.sizePolicy().hasHeightForWidth())
-#        self.CustomWidget.setSizePolicy(sizePolicy)
-#        self.CustomWidget.setObjectName(u'CustomWidget')
-#        # Add the Custom widget to the page layout
-#        self.PageLayout.addWidget(self.CustomWidget)
-#        self.CustomListView = CustomList()
-#        self.CustomListView.setAlternatingRowColors(True)
-#        self.CustomListData = TextListData()
-#        self.CustomListView.setModel(self.CustomListData)
-#        self.CustomListView.setDragEnabled(True)
-#        self.PageLayout.addWidget(self.CustomListView)
-#        # Signals
-#        QtCore.QObject.connect(self.CustomListView,
-#            QtCore.SIGNAL(u'doubleClicked(QModelIndex)'), self.onCustomPreviewClick)
-#        #define and add the context menu
-#        self.CustomListView.setContextMenuPolicy(QtCore.Qt.ActionsContextMenu)
-#        self.CustomListView.addAction(self.contextMenuAction(self.CustomListView,
-#            ':/custom/custom_edit.png', translate(u'CustomMediaItem', u'&Edit Custom'),
-#            self.onCustomEditClick))
-#        self.CustomListView.addAction(self.contextMenuSeparator(self.CustomListView))
-#        self.CustomListView.addAction(self.contextMenuAction(
-#            self.CustomListView, ':/system/system_preview.png',
-#            translate(u'CustomMediaItem',u'&Preview Custom'), self.onCustomPreviewClick))
-#        self.CustomListView.addAction(self.contextMenuAction(
-#            self.CustomListView, ':/system/system_live.png',
-#            translate(u'CustomMediaItem',u'&Show Live'), self.onCustomLiveClick))
-#        self.CustomListView.addAction(self.contextMenuAction(
-#            self.CustomListView, ':/system/system_add.png',
-#            translate(u'CustomMediaItem',u'&Add to Service'), self.onCustomAddClick))
-
-#    def retranslateUi(self):
-#        self.ClearTextButton.setText(translate(u'CustomMediaItem', u'Clear'))
-#        self.SearchTextButton.setText(translate(u'CustomMediaItem', u'Search'))
-
-#    def initialise(self):
-#        self.loadCustomList(self.parent.custommanager.get_all_slides())
-#
-#    def loadCustomList(self, list):
-#        self.CustomListData.resetStore()
-#        for CustomSlide in list:
-#            self.CustomListData.addRow(CustomSlide.id,CustomSlide.title)
-#
-#    def onClearTextButtonClick(self):
-#        """
-#        Clear the search text.
-#        """
-#        self.SearchTextEdit.clear()
-#
-#    def onSearchTextEditChanged(self, text):
-#        # only search if > 3 characters
-#        if len(text) > 3:
-#            self.onSearchTextButtonClick()
-#
-#    def onSearchTextButtonClick(self):
-#        search_keywords = str(self.SearchTextEdit.displayText())
-#        search_results  = []
-#        search_type = self.SearchTypeComboBox.currentText()
-#        search_results = self.Custommanager.search_Custom_lyrics(search_keywords)
-#        self._display_results(search_results)
-#
-#    def onCustomNewClick(self):
-#        self.parent.edit_custom_form.loadCustom(0)
-#        self.parent.edit_custom_form.exec_()
-#        self.initialise()
-#
-#    def onCustomEditClick(self):
-#        indexes = self.CustomListView.selectedIndexes()
-#        for index in indexes:
-#            self.parent.edit_custom_form.loadCustom(self.CustomListData.getId(index))
-#            self.parent.edit_custom_form.exec_()
-#        self.initialise()
-#
-#    def onCustomDeleteClick(self):
-#        indexes = self.CustomListView.selectedIndexes()
-#        for index in indexes:
-#            id = self.CustomListData.getId(index)
-#            self.parent.custommanager.delete_custom(id)
-#            self.CustomListData.deleteRow(index)
-#
-#    def onCustomPreviewClick(self):
-#        log.debug(u'Custom Preview Requested')
-#        service_item = ServiceItem(self.parent)
-#        service_item.addIcon(u':/media/media_song.png')
-#        self.generateSlideData(service_item)
-#        self.parent.preview_controller.addServiceItem(service_item)
-#
-#    def onCustomLiveClick(self):
-#        log.debug(u'Custom Live Requested')
-#        service_item = ServiceItem(self.parent)
-#        service_item.addIcon(u':/media/media_song.png')
-#        self.generateSlideData(service_item)
-#        self.parent.live_controller.addServiceItem(service_item)
-#
-#    def onCustomAddClick(self):
-#        log.debug(u'Custom Add Requested')
-#        service_item = ServiceItem(self.parent)
-#        service_item.addIcon(u':/media/media_song.png')
-#        self.generateSlideData(service_item)
-#        self.parent.service_manager.addServiceItem(service_item)
-#
-#    def generateSlideData(self, service_item):
-#        raw_slides =[]
-#        raw_footer = []
-#        slide = None
-#        theme = None
-#        indexes = self.CustomListView.selectedIndexes()
-#        for index in indexes:
-#            id = self.CustomListData.getId(index)
-#            customSlide = self.parent.custommanager.get_custom(id)
-#            title = customSlide.title
-#            credit = customSlide.credits
-#            theme = customSlide.theme_name
-#            if len(theme) is not 0 :
-#                service_item.theme = theme
-#            songXML=SongXMLParser(customSlide.text)
-#            verseList = songXML.get_verses()
-#            for verse in verseList:
-#                raw_slides.append(verse[1])
-#            raw_footer.append(title + u' '+ credit)
-#        if theme is not None:
-#            service_item.title = title
-#            for slide in raw_slides:
-#                service_item.add_from_text(slide[:30], slide)
-#            service_item.raw_footer = raw_footer

=== modified file 'openlp/plugins/remotes/remoteplugin.py'
--- openlp/plugins/remotes/remoteplugin.py	2009-08-12 16:29:00 +0000
+++ openlp/plugins/remotes/remoteplugin.py	2009-08-14 17:41:29 +0000
@@ -23,6 +23,7 @@
 from PyQt4 import QtNetwork, QtGui, QtCore
 
 from openlp.core.lib import Plugin, Event,  EventType
+from openlp.plugins.remotes.lib import RemoteTab
 
 class RemotesPlugin(Plugin):
 
@@ -35,10 +36,16 @@
         Plugin.__init__(self, u'Remotes', u'1.9.0', plugin_helpers)
         self.weight = -1
         self.server = QtNetwork.QUdpSocket()
-        self.server.bind(4316)
+        self.server.bind(int(self.config.get_config(u'remote port', 4316)))
         QtCore.QObject.connect(self.server,
             QtCore.SIGNAL(u'readyRead()'), self.readData)
 
+    def get_settings_tab(self):
+        """
+        Create the settings Tab
+        """
+        return RemoteTab()
+
     def readData(self):
         log.info(u'Remoted data has arrived')
         while self.server.hasPendingDatagrams():

=== added file 'resources/forms/plugindialoglistform.ui'
--- resources/forms/plugindialoglistform.ui	1970-01-01 00:00:00 +0000
+++ resources/forms/plugindialoglistform.ui	2009-08-13 20:02:38 +0000
@@ -0,0 +1,108 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ui version="4.0">
+ <class>PluginViewDialog</class>
+ <widget class="QWidget" name="PluginViewDialog">
+  <property name="geometry">
+   <rect>
+    <x>0</x>
+    <y>0</y>
+    <width>400</width>
+    <height>393</height>
+   </rect>
+  </property>
+  <property name="windowTitle">
+   <string>Plugin list</string>
+  </property>
+  <widget class="QTableWidget" name="PluginViewList">
+   <property name="geometry">
+    <rect>
+     <x>20</x>
+     <y>10</y>
+     <width>371</width>
+     <height>331</height>
+    </rect>
+   </property>
+   <property name="showGrid">
+    <bool>false</bool>
+   </property>
+   <property name="gridStyle">
+    <enum>Qt::SolidLine</enum>
+   </property>
+   <property name="rowCount">
+    <number>1</number>
+   </property>
+   <attribute name="horizontalHeaderVisible">
+    <bool>true</bool>
+   </attribute>
+   <attribute name="horizontalHeaderShowSortIndicator" stdset="0">
+    <bool>true</bool>
+   </attribute>
+   <attribute name="verticalHeaderVisible">
+    <bool>false</bool>
+   </attribute>
+   <row/>
+   <column>
+    <property name="text">
+     <string>Name</string>
+    </property>
+   </column>
+   <column>
+    <property name="text">
+     <string>Version</string>
+    </property>
+   </column>
+   <column>
+    <property name="text">
+     <string>Status</string>
+    </property>
+   </column>
+   <item row="0" column="0">
+    <property name="text">
+     <string>qqq</string>
+    </property>
+   </item>
+   <item row="0" column="1">
+    <property name="text">
+     <string>aaa</string>
+    </property>
+   </item>
+   <item row="0" column="2">
+    <property name="text">
+     <string>ccc</string>
+    </property>
+   </item>
+  </widget>
+  <widget class="QDialogButtonBox" name="ButtonBox">
+   <property name="geometry">
+    <rect>
+     <x>220</x>
+     <y>350</y>
+     <width>170</width>
+     <height>25</height>
+    </rect>
+   </property>
+   <property name="standardButtons">
+    <set>QDialogButtonBox::Ok</set>
+   </property>
+  </widget>
+ </widget>
+ <resources/>
+ <connections>
+  <connection>
+   <sender>ButtonBox</sender>
+   <signal>accepted()</signal>
+   <receiver>PluginViewDialog</receiver>
+   <slot>close()</slot>
+   <hints>
+    <hint type="sourcelabel">
+     <x>370</x>
+     <y>364</y>
+    </hint>
+    <hint type="destinationlabel">
+     <x>460</x>
+     <y>367</y>
+    </hint>
+   </hints>
+  </connection>
+ </connections>
+</ui>


Follow ups