From dbec7d75b30da2dda9e7d491661f70b4faec627f Mon Sep 17 00:00:00 2001 From: Raoul Snyman Date: Sun, 30 Nov 2008 18:36:13 +0000 Subject: [PATCH] WE HAVE OUR FIRST INTEGRATING PLUGIN!! bzr-revno: 144 --- .eric4project/openlp.org 2.0.e4q | 2 +- .eric4project/openlp.org 2.0.e4t | 2 +- openlp.org 2.0.e4p | 6 +- openlp/core/mediamanageritem.py | 12 ++-- openlp/core/plugin.py | 5 +- openlp/core/pluginmanager.py | 6 +- openlp/core/ui/__init__.py | 9 ++- openlp/core/ui/mainwindow.py | 14 ++--- openlp/plugins/biblemanager/bibleManager.py | 70 +++++++++++---------- openlp/plugins/biblemanager/bibleplugin.py | 8 +-- openlp/plugins/songs/songsplugin.py | 12 ++-- 11 files changed, 78 insertions(+), 68 deletions(-) diff --git a/.eric4project/openlp.org 2.0.e4q b/.eric4project/openlp.org 2.0.e4q index 00dc839b0..a0246aad2 100644 --- a/.eric4project/openlp.org 2.0.e4q +++ b/.eric4project/openlp.org 2.0.e4q @@ -1,7 +1,7 @@ - + \ No newline at end of file diff --git a/.eric4project/openlp.org 2.0.e4t b/.eric4project/openlp.org 2.0.e4t index b013a216f..20592d27d 100644 --- a/.eric4project/openlp.org 2.0.e4t +++ b/.eric4project/openlp.org 2.0.e4t @@ -1,7 +1,7 @@ - + TODO: what is the tags for bridge, pre-chorus? diff --git a/openlp.org 2.0.e4p b/openlp.org 2.0.e4p index c72c4f9fb..0eef3eb47 100644 --- a/openlp.org 2.0.e4p +++ b/openlp.org 2.0.e4p @@ -1,7 +1,7 @@ - + Python @@ -73,7 +73,9 @@ openlp/plugins/biblemanager/bibleCSVImpl.py openlp/plugins/biblemanager/bibleCommon.py openlp/plugins/biblemanager/bibleManager.py - resources/__init__.py + openlp/plugins/biblemanager/forms/__init__.py + openlp/plugins/biblemanager/forms/bibleimportdialog.py + openlp/plugins/biblemanager/forms/bibleimportform.py
resources/forms/bibleimport.ui
diff --git a/openlp/core/mediamanageritem.py b/openlp/core/mediamanageritem.py index 667097858..13c3de540 100644 --- a/openlp/core/mediamanageritem.py +++ b/openlp/core/mediamanageritem.py @@ -66,15 +66,19 @@ class MediaManagerItem(QtGui.QWidget): """ if self.Toolbar is None: self.addToolbar() - self.ToolbarLayout.addWidget(item) + if item.__class__.__name__ == 'QSpacerItem': + self.ToolbarLayout.addSpacerItem(item) + else: + self.ToolbarLayout.addWidget(item) def addToolbarButton(self, title, tooltip, icon, slot=None, objectname=None): """ A method to help developers easily add a button to the toolbar. """ ToolbarButton = QtGui.QToolButton(self.Toolbar) - ToolbarButton.setText(QtCore.QObject.trUtf8(title)) - ToolbarButton.setToolTip(QtCore.QObject.trUtf8(tooltip)) + ToolbarButton.setText(QtCore.QObject.trUtf8(ToolbarButton, title)) + ToolbarButton.setToolTip(QtCore.QObject.trUtf8(ToolbarButton, tooltip)) + self.addToolbarItem(ToolbarButton) if type(icon) is QtGui.QIcon: ButtonIcon = icon elif type(icon) is types.StringType: @@ -88,11 +92,11 @@ class MediaManagerItem(QtGui.QWidget): ToolbarButton.setIcon(ButtonIcon) ToolbarButton.setIconSize(QtCore.QSize(20, 20)) ToolbarButton.setAutoRaise(True) + ToolbarButton.setMinimumSize(QtCore.QSize(20, 20)) if objectname is not None: ToolbarButton.setObjectName(objectname) if slot is not None: QtCore.QObject.connect(ToolbarButton, QtCore.SIGNAL("clicked()"), slot) - self.addToolbarItem(ToolbarButton) def addToolbarLine(self): ToolbarLine = QtGui.QFrame(self.Toolbar) diff --git a/openlp/core/plugin.py b/openlp/core/plugin.py index 29a671411..9bf57c18a 100644 --- a/openlp/core/plugin.py +++ b/openlp/core/plugin.py @@ -69,7 +69,7 @@ class Plugin(object): else: self.Name = 'Plugin' if version is not None: - self.__version__ = version + self.Version = version self.MediaManagerItem = None self.SettingsTab = None self.ImportMenuItem = None @@ -113,3 +113,6 @@ class Plugin(object): Handle the event contained in the event object. """ pass + + def getName(self): + return self.Name diff --git a/openlp/core/pluginmanager.py b/openlp/core/pluginmanager.py index 8d16fe073..010424e53 100644 --- a/openlp/core/pluginmanager.py +++ b/openlp/core/pluginmanager.py @@ -72,14 +72,16 @@ class PluginManager(object): self.plugins = Plugin.__subclasses__() self.plugin_by_name = {} for p in self.plugins: - self.plugin_by_name[p.Name] = p; + plugin = p() + self.plugin_by_name[plugin.Name] = plugin; def hook_media_manager(self, MediaToolBox): """ Loop through all the plugins. If a plugin has a valid media manager item, add it to the media manager. """ - for plugin in self.plugins: + for pname in self.plugin_by_name: + plugin = self.plugin_by_name[pname] if plugin.MediaManagerItem is not None: log.debug('Inserting media manager item from %s' % plugin.Name) MediaToolBox.addItem(plugin.MediaManagerItem, plugin.Icon, plugin.Name) diff --git a/openlp/core/ui/__init__.py b/openlp/core/ui/__init__.py index c1e16b985..34d10026c 100644 --- a/openlp/core/ui/__init__.py +++ b/openlp/core/ui/__init__.py @@ -18,7 +18,10 @@ this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA """ -from openlp.core.ui.mainwindow import MainWindow -from openlp.core.ui.splashscreen import SplashScreen +from splashscreen import SplashScreen +from about import AboutForm +from alertform import AlertForm +from settings import SettingsDialog +from mainwindow import MainWindow -__all__ = ['MainWindow', 'SplashScreen'] +__all__ = ['SplashScreen', 'AboutForm', 'AlertForm', 'SettingsDialog', 'MainWindow'] diff --git a/openlp/core/ui/mainwindow.py b/openlp/core/ui/mainwindow.py index 4450fd822..185c4177b 100644 --- a/openlp/core/ui/mainwindow.py +++ b/openlp/core/ui/mainwindow.py @@ -22,25 +22,18 @@ from time import sleep from PyQt4 import QtCore, QtGui from openlp.core.resources import * -from openlp.core.ui.about import AboutForm -from openlp.core.ui.alertform import AlertForm -from openlp.core.ui.settings import SettingsDialog +from openlp.core.ui import AboutForm, AlertForm, SettingsDialog from openlp.core import Plugin, PluginManager, MediaManagerItem, SettingsTab class MainWindow(object): def __init__(self): self.main_window = QtGui.QMainWindow() - self.setupUi() self.about_form = AboutForm() self.alert_form = AlertForm() - #self.edit_song_form = EditSongForm() - #self.openlpexportform = OpenLPExportForm() - #self.openlpimportform = OpenLPImportForm() - #self.opensongexportform = OpenSongExportForm() - #self.opensongimportform = OpenSongImportForm() self.settings_form = SettingsDialog() self.plugin_manager = PluginManager('/home/raoul/Projects/openlp-2/openlp/plugins') + self.setupUi() def setupUi(self): self.main_window.setObjectName("main_window") @@ -149,6 +142,7 @@ class MainWindow(object): self.MediaManagerDock.setWindowIcon(icon) self.MediaManagerDock.setFloating(False) self.MediaManagerDock.setObjectName("MediaManagerDock") + self.MediaManagerDock.setMinimumWidth(250) self.MediaManagerContents = QtGui.QWidget() sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Expanding) sizePolicy.setHorizontalStretch(0) @@ -164,6 +158,8 @@ class MainWindow(object): self.MediaToolBox.setObjectName("MediaToolBox") # This is where we will eventually get the Plugin Manager to pull in # the media manager items. + self.plugin_manager.hook_media_manager(self.MediaToolBox) + # End adding media manager items. self.MediaManagerLayout.addWidget(self.MediaToolBox) self.MediaManagerDock.setWidget(self.MediaManagerContents) self.main_window.addDockWidget(QtCore.Qt.DockWidgetArea(1), self.MediaManagerDock) diff --git a/openlp/plugins/biblemanager/bibleManager.py b/openlp/plugins/biblemanager/bibleManager.py index b2047887c..ed6ef9768 100644 --- a/openlp/plugins/biblemanager/bibleManager.py +++ b/openlp/plugins/biblemanager/bibleManager.py @@ -1,3 +1,5 @@ +# -*- coding: utf-8 -*- +# vim: autoindent shiftwidth=4 expandtab textwidth=80 tabstop=4 softtabstop=4 """ OpenLP - Open Source Lyrics Projection Copyright (c) 2008 Raoul Snyman @@ -35,7 +37,7 @@ logging.basicConfig(level=logging.DEBUG, filemode='w') class BibleManager(): - global log + global log log=logging.getLogger("BibleMgr") log.info("Bible manager loaded") def __init__(self): @@ -45,7 +47,7 @@ class BibleManager(): Throws Exception if no Bibles are found. Init confirms the bible exists and stores the database path. - """ + """ log.debug( "Bible Initialising") self.bibleDBCache = {} # dict of bible database classes self.bibleHTTPCache = {} # dict of bible http readers @@ -63,23 +65,23 @@ class BibleManager(): self.bibleHTTPCache[b] = nhttp proxy = self.bibleDBCache[b].getMeta("proxy") # look to see if lazy load bible exists and get create getter. nhttp.setProxy(proxy) # tell The Server where to get the verses from. - # + # - log.debug( "Bible Initialised") + log.debug( "Bible Initialised") def processDialog(self, dialogobject): self.dialogobject = dialogobject - + def registerHTTPBible(self, biblename, biblesource, proxyurl=None, proxyid=None, proxypass=None): """ - Return a list of bibles from a given URL. + Return a list of bibles from a given URL. The selected Bible can then be registered and LazyLoaded into a database """ - log.debug( "registerHTTPBible %s,%s,%s,%s,%s", biblename, biblesource, proxyurl, proxyid, proxypass) + log.debug( "registerHTTPBible %s,%s,%s,%s,%s", biblename, biblesource, proxyurl, proxyid, proxypass) if self._isNewBible(biblename): nbible = BibleDBImpl(biblename) # Create new Bible nbible.createTables() # Create Database - self.bibleDBCache[biblename] = nbible + self.bibleDBCache[biblename] = nbible nhttp = BibleHTTPImpl() nhttp.setBibleSource(biblesource) @@ -87,59 +89,59 @@ class BibleManager(): nbible.saveMeta("WEB", biblesource) # register a lazy loading interest if proxyurl != None: nbible.saveMeta("proxy", proxyurl) # store the proxy URL - nhttp.setProxy(proxyurl) + nhttp.setProxy(proxyurl) if proxyid != None: - nbible.saveMeta("proxyid", proxyid) # store the proxy userid + nbible.saveMeta("proxyid", proxyid) # store the proxy userid if proxypass != None: nbible.saveMeta("proxypass", proxypass) # store the proxy password - - + + def registerCVSFileBible(self, biblename, booksfile, versefile): """ Method to load a bible from a set of files into a database. - If the database exists it is deleted and the database is reloaded + If the database exists it is deleted and the database is reloaded from scratch. """ if self._isNewBible(biblename): nbible = BibleDBImpl(biblename) # Create new Bible nbible.createTables() # Create Database - self.bibleDBCache[biblename] = nbible # cache the database for use later + self.bibleDBCache[biblename] = nbible # cache the database for use later bcsv = BibleCSVImpl(nbible) # create the loader and pass in the database bcsv.loadData(booksfile, versefile) - + def registerOSISFileBible(self, biblename, osisfile): """ Method to load a bible from a osis xml file extracted from Sword bible viewer. - If the database exists it is deleted and the database is reloaded + If the database exists it is deleted and the database is reloaded from scratch. """ if self._isNewBible(biblename): nbible = BibleDBImpl(biblename) # Create new Bible nbible.createTables() # Create Database - self.bibleDBCache[biblename] = nbible # cache the database for use later + self.bibleDBCache[biblename] = nbible # cache the database for use later bcsv = BibleOSISImpl(nbible) # create the loader and pass in the database - bcsv.loadData(osisfile, self.dialogobject) + bcsv.loadData(osisfile, self.dialogobject) + - def loadBible(self,biblename): """ - Downloads all the books of the bible + Downloads all the books of the bible and loads it into the database - """ + """ log.debug( "loadBible %s", biblename) - bookabbrev = "" + bookabbrev = "" for bookname in self.listOfBooks: - cptrs = self.booksChapters[ self.booksOfBible[bookname]] + cptrs = self.booksChapters[ self.booksOfBible[bookname]] log.debug( "book and chapter %s %s", bookname , self.booksChapters[ self.booksOfBible[bookname]] ) for chptr in range(1 , int(cptrs)): # loop through all the chapters in book c = self.bibleDBCache[biblename].getBibleChapter(bookname, chptr) # check to see if book/chapter exists log.debug( "got chapter %s", c) if not c: - bookid = self.booksOfBible[bookname] # convert to id ie Genesis --> 1 Revelation --> 73 + bookid = self.booksOfBible[bookname] # convert to id ie Genesis --> 1 Revelation --> 73 log.debug( "missing %s,%s", bookname, chptr) self._loadBook(biblename,bookid, bookname, bookabbrev) self._loadChapter(biblename,bookid, bookname, chptr) - + def getBibles(self): """ Returns a list of Books of the bible @@ -152,9 +154,9 @@ class BibleManager(): def getBibleBooks(self,bible): """ Returns a list of the books of the bible from the database - """ + """ return self.bibleDBCache[bible].getBibleBooks() - + def getBookChapterCount(self,bible, book): """ Returns the number of Chapters for a given book @@ -189,8 +191,8 @@ class BibleManager(): #log.debug( self.bibleDBCache) #log.debug( self.bibleHTTPCache) log.debug( "getVerseText %s,%s,%s,%s,%s", bible,bookname, chapter, sverse, everse) -# bookid = self.booksOfBible[bookname] # convert to id ie Genesis --> 1 Revelation --> 73 -# # SORT OUT BOOKNAME BOOK ID. +# bookid = self.booksOfBible[bookname] # convert to id ie Genesis --> 1 Revelation --> 73 +# # SORT OUT BOOKNAME BOOK ID. # # NAME COMES IN TO ID AND BACK TO NAME ? # c = self.bibleDBCache[bible].getBibleChapter(bookname, chapter) # check to see if book/chapter exists # bookabbrev = "" @@ -204,28 +206,28 @@ class BibleManager(): #log.debug( text) #self.bibleDBCache[bible].dumpBible() return text - + def _loadBook(self, bible, bookid, bookname, bookabbrev): log.debug( "loadbook %s,%s,%s,%s", bible, bookid, bookname, bookabbrev) cl = self.bibleDBCache[bible].getBibleBook(bookname) log.debug( "get bible book %s" , cl) if not cl : self.bibleDBCache[bible].createBook(bookid, bookname, bookabbrev) - + def _loadChapter(self, bible, bookid, bookname, chapter): - log.debug( "loadChapter %s,%s,%s,%s", bible, bookid,bookname, chapter) + log.debug( "loadChapter %s,%s,%s,%s", bible, bookid,bookname, chapter) try : chaptlist = self.bibleHTTPCache[bible].getBibleChapter(bible, bookid,bookname, chapter) self.bibleDBCache[bible].createChapter(bookname, chapter, chaptlist) except : log.error("Errow thrown %s", sys.exc_info()[1]) - + def _isNewBible(self, name): """ Check cache to see if new bible """ for b , o in self.bibleDBCache.iteritems(): log.debug( b ) - if b == name : + if b == name : return False return True diff --git a/openlp/plugins/biblemanager/bibleplugin.py b/openlp/plugins/biblemanager/bibleplugin.py index 9519eddaf..6e7171963 100644 --- a/openlp/plugins/biblemanager/bibleplugin.py +++ b/openlp/plugins/biblemanager/bibleplugin.py @@ -1,5 +1,5 @@ # -*- coding: utf-8 -*- -# vim: autoindent shiftwidth=4 expandtab textwidth=80 +# vim: autoindent shiftwidth=4 expandtab textwidth=80 tabstop=4 softtabstop=4 """ OpenLP - Open Source Lyrics Projection Copyright (c) 2008 Raoul Snyman @@ -22,8 +22,8 @@ from PyQt4 import QtCore, QtGui from openlp.core.resources import * from openlp.core import Plugin -from openlp.plugins.biblemanager.biblemanager import BibleManager -from openlp.plugins.biblemanager.bibleimportform import BibleImportForm +from biblemanager import BibleManager +from bibleimportform import BibleImportForm class BiblePlugin(Plugin): def __init__(self): @@ -78,5 +78,3 @@ class BiblePlugin(Plugin): def onBibleAddClick(self): pass - -s diff --git a/openlp/plugins/songs/songsplugin.py b/openlp/plugins/songs/songsplugin.py index 9cb9538c8..5c6866cf2 100644 --- a/openlp/plugins/songs/songsplugin.py +++ b/openlp/plugins/songs/songsplugin.py @@ -25,7 +25,7 @@ from openlp.core import Plugin, MediaManagerItem class SongsPlugin(Plugin): def __init__(self): # Call the parent constructor - Plugin.__init__(self, 'Song', '1.9.0') + Plugin.__init__(self, 'Songs', '1.9.0') # Create the plugin icon self.Icon = QtGui.QIcon() self.Icon.addPixmap(QtGui.QPixmap(':/media/media_song.png'), @@ -61,11 +61,11 @@ class SongsPlugin(Plugin): QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Minimum) self.MediaManagerItem.addToolbarItem(self.SongSpacerItem) # Add the songlist widget - self.SongList = QtGui.QTableWidget(self.MediaManagerItem) - self.SongList.setObjectName("SongList") - self.SongList.setColumnCount(0) - self.SongList.setRowCount(0) - self.MediaManagerItem.PageLayout.addWidget(self.SongList) + #self.SongList = QtGui.QTableWidget(self.MediaManagerItem) + #self.SongList.setObjectName("SongList") + #self.SongList.setColumnCount(0) + #self.SongList.setRowCount(0) + #self.MediaManagerItem.PageLayout.addWidget(self.SongList) def onSongNewClick(self): pass