diff --git a/openlp/core/lib/__init__.py b/openlp/core/lib/__init__.py index 8cb3a46e7..8a4580f08 100644 --- a/openlp/core/lib/__init__.py +++ b/openlp/core/lib/__init__.py @@ -28,6 +28,9 @@ from serviceitem import ServiceItem from eventreceiver import Receiver from serviceitem import ServiceItem from toolbar import OpenLPToolbar +from songxmlhandler import SongXMLBuilder +from songxmlhandler import SongXMLParser __all__ = ['PluginConfig', 'Plugin', 'PluginUtils', 'SettingsTab', 'MediaManagerItem', 'Event', - 'XmlRootClass', 'ServiceItem', 'Receiver', 'OpenLPToolbar'] + 'XmlRootClass', 'ServiceItem', 'Receiver', 'OpenLPToolbar', 'SongXMLBuilder', + 'SongXMLParser'] diff --git a/openlp/core/lib/pluginconfig.py b/openlp/core/lib/pluginconfig.py index f9afb24db..8c1968db8 100644 --- a/openlp/core/lib/pluginconfig.py +++ b/openlp/core/lib/pluginconfig.py @@ -135,4 +135,4 @@ class PluginConfig(object): name = 'last directory %d' % num else: name = 'last directory' - self.config.set_config(name, directory) + self.set_config(name, directory) diff --git a/openlp/plugins/bibles/lib/bibleOSISimpl.py b/openlp/plugins/bibles/lib/bibleOSISimpl.py index db9ae8213..29a0801ae 100644 --- a/openlp/plugins/bibles/lib/bibleOSISimpl.py +++ b/openlp/plugins/bibles/lib/bibleOSISimpl.py @@ -53,74 +53,34 @@ class BibleOSISImpl(): verseText = "", pos) ref = file[pos+15:epos-1] # Book Reference - #lets find the bible text + + #lets find the bible text only pos = epos + 1 # find start of text epos = file.find("", pos) # end of text text = file[pos : epos] #print pos, e, f[pos:e] # Found Basic Text + #remove tags of extra information - - pos = text.find(" -1: - epos = text.find("", pos) - if epos == -1: # TODO - #print "Y", pos, epos - pos = -1 - else: - text = text[:pos] + text[epos + 8: ] - pos = text.find("', text) + text = self.remove_block('', text) + text = self.remove_block('', text) - pos = text.find(" -1: - epos = text.find("", pos) - if epos == -1: # TODO - #print "Y", pos, epos - pos = -1 - else: - text = text[:pos] + text[epos + 13: ] - pos = text.find(" -1: - epos = text.find("", pos) - if epos == -1: # TODO - #print "Y", pos, epos - pos = -1 - else: - text = text[:pos] + text[epos + 7: ] - pos = text.find(" -1: - epos = text.find("/>", pos) - text = text[:pos] + text[epos + 2: ] - pos = text.find(" -1: - epos = text.find("/>", pos) - text = text[:pos] + text[epos + 2: ] - pos = text.find(" -1: - epos = text.find("/>", pos) - text = text[:pos] + text[epos + 2: ] - pos = text.find(" -1: - epos = text.find("/>", pos) - text = text[:pos] + text[epos + 2: ] - pos = text.find("") while pos > -1: epos = text.find("", pos) @@ -156,10 +116,37 @@ class BibleOSISImpl(): count = 0 self.bibledb.add_verse(book.id, p[1], p[2], text) count += 1 - if count % 3 == 0: #Every x verses repaint the screen + if count % 3 == 0: #Every 3 verses repaint the screen Receiver().send_message("openlpprocessevents") count = 0 - + + def remove_block(self, start_tag, end_tag, text): + """ + removes a block of text between two tags + Some not wanted text + """ + pos = text.find(start_tag) + while pos > -1: + epos = text.find(end_tag, pos) + if epos == -1: # TODO + #print "Y", pos, epos + pos = -1 + else: + text = text[:pos] + text[epos + len(end_tag): ] + pos = text.find(start_tag) + return text + + def remove_tag(self, start_tag, text): + """ + removes a single tag + + """ + pos = text.find(start_tag) + while pos > -1: + epos = text.find('/>', pos) + text = text[:pos] + text[epos + 2: ] + pos = text.find(start_tag) + return text diff --git a/openlp/plugins/custom/customplugin.py b/openlp/plugins/custom/customplugin.py index b2ae40213..7be1d3bce 100644 --- a/openlp/plugins/custom/customplugin.py +++ b/openlp/plugins/custom/customplugin.py @@ -22,11 +22,11 @@ import logging from PyQt4 import QtCore, QtGui from openlp.core.resources import * -from openlp.core.lib import Plugin, PluginUtils, MediaManagerItem +from openlp.core.lib import Plugin, MediaManagerItem from forms import EditCustomForm from openlp.plugins.custom.lib import CustomManager, CustomTab, CustomMediaItem -class CustomPlugin(Plugin, PluginUtils): +class CustomPlugin(Plugin): global log log=logging.getLogger("CustomPlugin") diff --git a/openlp/plugins/custom/lib/__init__.py b/openlp/plugins/custom/lib/__init__.py index 62be8eefa..3d919f5a3 100644 --- a/openlp/plugins/custom/lib/__init__.py +++ b/openlp/plugins/custom/lib/__init__.py @@ -20,7 +20,7 @@ Place, Suite 330, Boston, MA 02111-1307 USA from manager import CustomManager from customtab import CustomTab -from custommediaitem import CustomMediaItem +from mediaitem import CustomMediaItem __all__ = ['CustomManager', 'CustomTab', 'CustomMediaItem'] diff --git a/openlp/plugins/custom/lib/custommediaitem.py b/openlp/plugins/custom/lib/custommediaitem.py deleted file mode 100644 index ced56709b..000000000 --- a/openlp/plugins/custom/lib/custommediaitem.py +++ /dev/null @@ -1,194 +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 import translate -from openlp.core.lib import MediaManagerItem -from openlp.core.resources import * - -from openlp.plugins.custom.lib import CustomTab - -class CustomMediaItem(MediaManagerItem): - """ - This is the custom media manager item for Custom Slides. - """ - global log - log=logging.getLogger("CustomMediaItem") - log.info("Custom Media Item loaded") - - def __init__(self, parent, icon, title): - MediaManagerItem.__init__(self, parent, icon, title) - - - def setupUi(self): - # Add a toolbar - self.addToolbar() - # Create buttons for the toolbar - ## New Custom Button ## - self.addToolbarButton('New Custom', 'Add a new Custom Item', - ':/custom/custom_new.png', self.onCustomNewClick, 'CustomNewItem') - ## Edit Custom Button ## - self.addToolbarButton('Edit Custom', 'Edit the selected Custom Item', - ':/custom/custom_edit.png', self.onCustomEditClick, 'CustomEditItem') - ## Delete Custom Button ## - self.addToolbarButton('Delete Custom', 'Delete the selected Custom Item', - ':/custom/custom_delete.png', self.onCustomDeleteClick, 'CustomDeleteItem') - ## Separator Line ## - self.addToolbarSeparator() - ## Preview Custom Button ## - self.addToolbarButton('Preview Custom', 'Preview the selected Custom', - ':/system/system_preview.png', self.onCustomPreviewClick, 'CustomPreviewItem') - ## Live Custom Button ## - self.addToolbarButton('Go Live', 'Send the selected Custom live', - ':/system/system_live.png', self.onCustomLiveClick, 'CustomLiveItem') - ## Add Custom Button ## - self.addToolbarButton('Add Custom To Service', - 'Add the selected Custom(s) to the service', ':/system/system_add.png', - self.onCustomAddClick, 'CustomAddItem') - ## Add the Customlist widget ## - # Create the tab 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('CustomWidget') - self.SearchLayout = QtGui.QGridLayout(self.CustomWidget) - self.SearchLayout.setObjectName('SearchLayout') - - self.SearchTextLabel = QtGui.QLabel(self.CustomWidget) - self.SearchTextLabel.setObjectName('SearchTextLabel') - self.SearchTextLabel.setText('Search Text:') - self.SearchLayout.addWidget(self.SearchTextLabel, 2, 0, 1, 1) - self.SearchTextEdit = QtGui.QLineEdit(self.CustomWidget) - self.SearchTextEdit.setObjectName('SearchTextEdit') - self.SearchLayout.addWidget(self.SearchTextEdit, 2, 1, 1, 2) - self.ClearTextButton = QtGui.QPushButton(self.CustomWidget) - self.ClearTextButton.setObjectName('ClearTextButton') - self.ClearTextButton.setText('Clear') - self.SearchLayout.addWidget(self.ClearTextButton, 3, 1, 1, 1) - self.SearchTextButton = QtGui.QPushButton(self.CustomWidget) - self.SearchTextButton.setObjectName('SearchTextButton') - self.SearchTextButton.setText('Search') - self.SearchLayout.addWidget(self.SearchTextButton, 3, 2, 1, 1) - # Add the Custom widget to the page layout - self.PageLayout.addWidget(self.CustomWidget) - self.CustomListView = QtGui.QTableWidget() - self.CustomListView.setColumnCount(2) - self.CustomListView.setColumnHidden(0, True) - self.CustomListView.setColumnWidth(1, 240) - self.CustomListView.setShowGrid(False) - self.CustomListView.setSortingEnabled(False) - self.CustomListView.setAlternatingRowColors(True) - self.CustomListView.setSelectionBehavior(QtGui.QAbstractItemView.SelectRows) - - self.CustomListView.horizontalHeader().setVisible(False) - self.CustomListView.verticalHeader().setVisible(False) - self.CustomListView.setGeometry(QtCore.QRect(10, 100, 256, 591)) - self.CustomListView.setObjectName('listView') - self.PageLayout.addWidget(self.CustomListView) - - # Signals - QtCore.QObject.connect(self.SearchTextButton, - QtCore.SIGNAL("pressed()"), self.onSearchTextButtonClick) - QtCore.QObject.connect(self.ClearTextButton, - QtCore.SIGNAL("pressed()"), self.onClearTextButtonClick) - QtCore.QObject.connect(self.SearchTextEdit, - QtCore.SIGNAL("textChanged(const QString&)"), self.onSearchTextEditChanged) - QtCore.QObject.connect(self.CustomListView, - QtCore.SIGNAL("itemPressed(QTableWidgetItem * item)"), self.onCustomSelected) - -# #define and add the context menu - self.CustomListView.setContextMenuPolicy(QtCore.Qt.ActionsContextMenu) -# - self.CustomListView.addAction(self.contextMenuAction( - self.CustomListView, ':/system/system_preview.png', - "&Preview Custom", self.onCustomPreviewClick)) - self.CustomListView.addAction(self.contextMenuAction( - self.CustomListView, ':/system/system_live.png', - "&Show Live", self.onCustomLiveClick)) - self.CustomListView.addAction(self.contextMenuAction( - self.CustomListView, ':/system/system_add.png', - "&Add to Service", self.onCustomEditClick)) - - def onClearTextButtonClick(self): - """ - Clear the search text. - """ - self.SearchTextEdit.clear() - - def onSearchTextEditChanged(self, text): - if len(text) > 3: # only search if > 3 characters - 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 onCustomSelected(self, item): - print item - - def onCustomNewClick(self): - self.parent.edit_custom_form.exec_() - - def onCustomEditClick(self): - current_row = self.CustomListView.currentRow() - id = int(self.CustomListView.item(current_row, 0).text()) - self.edit_Custom_form.loadCustom(id) - self.edit_Custom_form.exec_() - - def onCustomDeleteClick(self): - pass - - def onCustomPreviewClick(self): - pass - - def onCustomLiveClick(self): - pass - - def onCustomAddClick(self): - pass - - def _display_results(self, searchresults): - log.debug("_search results") - self.CustomListView.clear() # clear the results - self.CustomListView.setHorizontalHeaderLabels(QtCore.QStringList(['', u'Custom Name'])) - self.CustomListView.horizontalHeader().setVisible(False) - self.CustomListView.verticalHeader().setVisible(False) - self.CustomListView.setRowCount(0) - #log.debug("Records returned from search %s", len(searchresults)) - for Custom in searchresults: - for author in Custom.authors: - c = self.CustomListView.rowCount() - self.CustomListView.setRowCount(c + 1) - Custom_index = QtGui.QTableWidgetItem(str(Custom.id)) - self.CustomListView.setItem(c , 0, Custom_index) - Custom_detail = QtGui.QTableWidgetItem(u'%s (%s)' % (str(Custom.title), str(author.display_name))) - self.CustomListView.setItem(c , 1, Custom_detail) - #twi = QtGui.QTableWidgetItem() - #self.CustomListView.setItem(c , 2, twi) - self.CustomListView.setRowHeight(c, 20) - diff --git a/openlp/plugins/images/lib/mediaitem.py b/openlp/plugins/images/lib/mediaitem.py index 6dd8c4338..709576332 100644 --- a/openlp/plugins/images/lib/mediaitem.py +++ b/openlp/plugins/images/lib/mediaitem.py @@ -113,7 +113,7 @@ class ImageMediaItem(MediaManagerItem): log.info("New image(s)", str(files)) if len(files) > 0: self.loadImageList(files) - dir, filename = os.path.split(files[0]) + dir, filename = os.path.split(str(files[0])) self.parent.config.set_last_dir(dir) self.parent.config.set_list('images', self.ImageListData.getFileList()) diff --git a/openlp/plugins/videos/lib/__init__.py b/openlp/plugins/videos/lib/__init__.py index 24ec7d925..d646d937e 100644 --- a/openlp/plugins/videos/lib/__init__.py +++ b/openlp/plugins/videos/lib/__init__.py @@ -19,5 +19,6 @@ Place, Suite 330, Boston, MA 02111-1307 USA """ from videotab import VideoTab +from mediaitem import VideoMediaItem -__all__ = ['VideoTab'] +__all__ = ['VideoTab', 'VideoMediaItem'] diff --git a/openlp/plugins/videos/videoplugin.py b/openlp/plugins/videos/videoplugin.py index 53f184494..38a10d98b 100644 --- a/openlp/plugins/videos/videoplugin.py +++ b/openlp/plugins/videos/videoplugin.py @@ -21,10 +21,10 @@ import os from PyQt4 import QtCore, QtGui from openlp.core.resources import * -from openlp.core.lib import Plugin, PluginUtils, MediaManagerItem, SettingsTab -from openlp.plugins.videos.lib import VideoTab +from openlp.core.lib import Plugin, MediaManagerItem, SettingsTab +from openlp.plugins.videos.lib import VideoTab, VideoMediaItem -class VideoPlugin(Plugin, PluginUtils): +class VideoPlugin(Plugin): def __init__(self): # Call the parent constructor @@ -41,83 +41,6 @@ class VideoPlugin(Plugin, PluginUtils): def get_media_manager_item(self): # Create the MediaManagerItem object - self.MediaManagerItem = MediaManagerItem(self, self.icon, 'Videos') - # Add a toolbar - self.MediaManagerItem.addToolbar() - # Create buttons for the toolbar - ## New Song Button ## - self.MediaManagerItem.addToolbarButton('New Video', 'Load videos into openlp.org', - ':/videos/video_load.png', self.onVideoNewClick, 'VideoNewItem') - ## Delete Song Button ## - self.MediaManagerItem.addToolbarButton('Delete Video', 'Delete the selected video', - ':/videos/video_delete.png', self.onVideoDeleteClick, 'VideoDeleteItem') - ## Separator Line ## - self.MediaManagerItem.addToolbarSeparator() - ## Preview Song Button ## - self.MediaManagerItem.addToolbarButton('Preview Video', 'Preview the selected video', - ':/system/system_preview.png', self.onVideoPreviewClick, 'VideoPreviewItem') - ## Live Song Button ## - self.MediaManagerItem.addToolbarButton('Go Live', 'Send the selected video live', - ':/system/system_live.png', self.onVideoLiveClick, 'VideoLiveItem') - ## Add Song Button ## - self.MediaManagerItem.addToolbarButton('Add Video To Service', - 'Add the selected video(s) to the service', ':/system/system_add.png', - self.onVideoAddClick, 'VideoAddItem') - ## Add the videolist widget ## - self.VideoListView = QtGui.QTableWidget() - self.VideoListView.setColumnCount(2) - self.VideoListView.setColumnHidden(0, True) - self.VideoListView.setColumnWidth(1, 275) - self.VideoListView.setShowGrid(False) - self.VideoListView.setSortingEnabled(False) - self.VideoListView.setAlternatingRowColors(True) - self.VideoListView.verticalHeader().setVisible(False) - self.VideoListView.horizontalHeader().setVisible(False) - self.VideoListView.setAlternatingRowColors(True) - self.VideoListView.setGeometry(QtCore.QRect(10, 100, 256, 591)) - self.VideoListView.setObjectName("VideoListView") - self.MediaManagerItem.PageLayout.addWidget(self.VideoListView) - - #define and add the context menu - self.VideoListView.setContextMenuPolicy(QtCore.Qt.ActionsContextMenu) - - self.VideoListView.addAction(self.add_to_context_menu(self.VideoListView, ':/system/system_preview.png', "&Preview Video", self.onVideoPreviewClick)) - self.VideoListView.addAction(self.add_to_context_menu(self.VideoListView, ':/system/system_live.png', "&Show Live", self.onVideoLiveClick)) - self.VideoListView.addAction(self.add_to_context_menu(self.VideoListView, ':/system/system_add.png', "&Add to Service", self.onVideoAddClick)) - return self.MediaManagerItem - - def initialise(self): - list = self._load_display_list() - self._load_video_list(list) - - def onVideoNewClick(self): - files = QtGui.QFileDialog.getOpenFileNames(None, "Select Image(s)", self._get_last_dir(), "Images (*.avi *.mpeg)") - if len(files) > 0: - self._load_video_list(files) - self._save_last_directory(files[0]) - self._save_display_list(self.VideoListView) - - def _load_video_list(self, list): - for f in list: - file_path , file_name = os.path.split(str(f)) - count = self.VideoListView.rowCount() - self.VideoListView.setRowCount(count+1) - row_item = QtGui.QTableWidgetItem(str(f)) - self.VideoListView.setItem(count , 0, row_item) - row_item = QtGui.QTableWidgetItem(str(file_name)) - self.VideoListView.setItem(count , 1, row_item) - self.VideoListView.setRowHeight(count, 20) - - def onVideoDeleteClick(self): - cr = self.VideoListView.currentRow() - self.VideoListView.removeRow(int(cr)) - self._save_display_list(self.VideoListView) - - def onVideoPreviewClick(self): - pass - - def onVideoLiveClick(self): - pass - - def onVideoAddClick(self): - pass + self.media_item = VideoMediaItem(self, self.icon, 'Videos') + return self.media_item +