forked from openlp/openlp
Revamp Presentations Plugin adding directory search and save. Persist the Presntations
Update the Plugin helper Tidy up bibles and Songs a bit more. bzr-revno: 257
This commit is contained in:
parent
5123bcdfbb
commit
ae7e7d47de
@ -82,3 +82,10 @@ class MediaManagerItem(QtGui.QWidget):
|
|||||||
A very simple method to add a separator to the toolbar.
|
A very simple method to add a separator to the toolbar.
|
||||||
"""
|
"""
|
||||||
self.Toolbar.addSeparator()
|
self.Toolbar.addSeparator()
|
||||||
|
|
||||||
|
def getInputFile(self, dialogname, dialoglocation, dialogfilter):
|
||||||
|
return QtGui.QFileDialog.getOpenFileName(self, dialogname,dialoglocation, dialogfilter)
|
||||||
|
|
||||||
|
def getInputFiles(self, dialogname, dialoglocation, dialogfilter):
|
||||||
|
return QtGui.QFileDialog.getOpenFileNames(self, dialogname,dialoglocation, dialogfilter)
|
||||||
|
|
||||||
|
@ -17,18 +17,15 @@ 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
|
this program; if not, write to the Free Software Foundation, Inc., 59 Temple
|
||||||
Place, Suite 330, Boston, MA 02111-1307 USA
|
Place, Suite 330, Boston, MA 02111-1307 USA
|
||||||
"""
|
"""
|
||||||
|
import os
|
||||||
import types
|
import types
|
||||||
from PyQt4 import QtCore, QtGui
|
from PyQt4 import QtCore, QtGui
|
||||||
|
|
||||||
class PluginUtils(object):
|
class PluginUtils(object):
|
||||||
def __init__(self):
|
"""
|
||||||
"""
|
Extension class for plugin helpers so the Plugin class is just a simple interface
|
||||||
IClass for plugin helpers so the Plugin class is just a simple interface
|
"""
|
||||||
"""
|
def add_to_context_separator(self, base):
|
||||||
pass
|
|
||||||
|
|
||||||
def add_separator(self, base):
|
|
||||||
action = QtGui.QAction("", base)
|
action = QtGui.QAction("", base)
|
||||||
action.setSeparator(True)
|
action.setSeparator(True)
|
||||||
return action
|
return action
|
||||||
@ -52,3 +49,40 @@ class PluginUtils(object):
|
|||||||
action .setIcon(ButtonIcon)
|
action .setIcon(ButtonIcon)
|
||||||
QtCore.QObject.connect(action, QtCore.SIGNAL("triggered()"), slot)
|
QtCore.QObject.connect(action, QtCore.SIGNAL("triggered()"), slot)
|
||||||
return action
|
return action
|
||||||
|
|
||||||
|
def _load_display_list(self):
|
||||||
|
"""
|
||||||
|
Load a display list from the config files
|
||||||
|
"""
|
||||||
|
listcount = self.config.get_config("List Count")
|
||||||
|
list = []
|
||||||
|
if listcount != None:
|
||||||
|
for i in range(0 , int(listcount)):
|
||||||
|
x = self.config.get_config("List Item "+str(i))
|
||||||
|
list.append(x)
|
||||||
|
return list
|
||||||
|
|
||||||
|
def _save_display_list(self, displaylist):
|
||||||
|
"""
|
||||||
|
Save display list from the config files
|
||||||
|
"""
|
||||||
|
c = displaylist.rowCount()
|
||||||
|
self.config.set_config("List Count", str(c))
|
||||||
|
for i in range (0, int(c)):
|
||||||
|
self.config.set_config("List Item "+str(i), str(displaylist.item(i, 0).text()))
|
||||||
|
|
||||||
|
def _get_last_dir(self):
|
||||||
|
"""
|
||||||
|
Read the last directory used for plugin
|
||||||
|
"""
|
||||||
|
lastdir = self.config.get_config("Last Dir")
|
||||||
|
if lastdir==None:
|
||||||
|
lastdir = ""
|
||||||
|
return lastdir
|
||||||
|
|
||||||
|
def _save_last_directory(self, list):
|
||||||
|
"""
|
||||||
|
Save the last directory used for plugin
|
||||||
|
"""
|
||||||
|
path , nm = os.path.split(str(list))
|
||||||
|
self.config.set_config("Last Dir", path)
|
||||||
|
@ -19,17 +19,12 @@ import os, os.path
|
|||||||
import sys
|
import sys
|
||||||
import urllib2
|
import urllib2
|
||||||
|
|
||||||
mypath=os.path.split(os.path.abspath(__file__))[0]
|
#mypath=os.path.split(os.path.abspath(__file__))[0]
|
||||||
sys.path.insert(0,(os.path.join(mypath, '..', '..', '..')))
|
#sys.path.insert(0,(os.path.join(mypath, '..', '..', '..')))
|
||||||
from openlp.plugins.bibles.lib.bibleDBimpl import BibleDBImpl
|
from openlp.plugins.bibles.lib.bibleDBimpl import BibleDBImpl
|
||||||
from openlp.plugins.bibles.lib.biblecommon import BibleCommon
|
from openlp.plugins.bibles.lib.biblecommon import BibleCommon
|
||||||
|
|
||||||
import logging
|
import logging
|
||||||
logging.basicConfig(level=logging.DEBUG,
|
|
||||||
format='%(asctime)s %(name)-12s %(levelname)-8s %(message)s',
|
|
||||||
datefmt='%m-%d %H:%M',
|
|
||||||
filename='plugins.log',
|
|
||||||
filemode='w')
|
|
||||||
|
|
||||||
class BibleCSVImpl(BibleCommon):
|
class BibleCSVImpl(BibleCommon):
|
||||||
global log
|
global log
|
||||||
|
@ -20,16 +20,11 @@ import os, os.path
|
|||||||
import sys
|
import sys
|
||||||
import urllib2
|
import urllib2
|
||||||
|
|
||||||
mypath=os.path.split(os.path.abspath(__file__))[0]
|
#mypath=os.path.split(os.path.abspath(__file__))[0]
|
||||||
sys.path.insert(0,(os.path.join(mypath, '..', '..', '..')))
|
#sys.path.insert(0,(os.path.join(mypath, '..', '..', '..')))
|
||||||
from openlp.plugins.bibles.lib.biblecommon import BibleCommon
|
from openlp.plugins.bibles.lib.biblecommon import BibleCommon
|
||||||
|
|
||||||
import logging
|
import logging
|
||||||
logging.basicConfig(level=logging.DEBUG,
|
|
||||||
format='%(asctime)s %(name)-12s %(levelname)-8s %(message)s',
|
|
||||||
datefmt='%m-%d %H:%M',
|
|
||||||
filename='plugins.log',
|
|
||||||
filemode='w')
|
|
||||||
|
|
||||||
class BGExtract(BibleCommon):
|
class BGExtract(BibleCommon):
|
||||||
global log
|
global log
|
||||||
|
@ -19,16 +19,11 @@ import os, os.path
|
|||||||
import sys
|
import sys
|
||||||
import urllib2
|
import urllib2
|
||||||
|
|
||||||
mypath=os.path.split(os.path.abspath(__file__))[0]
|
#mypath=os.path.split(os.path.abspath(__file__))[0]
|
||||||
sys.path.insert(0,(os.path.join(mypath, '..', '..', '..')))
|
#sys.path.insert(0,(os.path.join(mypath, '..', '..', '..')))
|
||||||
from openlp.plugins.bibles.lib.bibleDBimpl import BibleDBImpl
|
from openlp.plugins.bibles.lib.bibleDBimpl import BibleDBImpl
|
||||||
|
|
||||||
import logging
|
import logging
|
||||||
logging.basicConfig(level=logging.DEBUG,
|
|
||||||
format='%(asctime)s %(name)-12s %(levelname)-8s %(message)s',
|
|
||||||
datefmt='%m-%d %H:%M',
|
|
||||||
filename='plugins.log',
|
|
||||||
filemode='w')
|
|
||||||
|
|
||||||
class BibleOSISImpl():
|
class BibleOSISImpl():
|
||||||
global log
|
global log
|
||||||
|
@ -58,12 +58,13 @@ class BibleManager():
|
|||||||
self.bibleDBCache[bname] = BibleDBImpl(self.biblePath, bname, self.bibleSuffix)
|
self.bibleDBCache[bname] = BibleDBImpl(self.biblePath, bname, self.bibleSuffix)
|
||||||
biblesource = self.bibleDBCache[bname].get_meta("WEB") # look to see if lazy load bible exists and get create getter.
|
biblesource = self.bibleDBCache[bname].get_meta("WEB") # look to see if lazy load bible exists and get create getter.
|
||||||
if biblesource:
|
if biblesource:
|
||||||
print biblesource
|
|
||||||
nhttp = BibleHTTPImpl()
|
nhttp = BibleHTTPImpl()
|
||||||
nhttp.setBibleSource(biblesource) # tell The Server where to get the verses from.
|
nhttp.setBibleSource(biblesource) # tell The Server where to get the verses from.
|
||||||
self.bibleHTTPCache[bname] = nhttp
|
self.bibleHTTPCache[bname] = nhttp
|
||||||
proxy = self.bibleDBCache[bname].get_meta("proxy") # look to see if lazy load bible exists and get create getter.
|
proxy = self.bibleDBCache[bname].get_meta("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.
|
nhttp.setProxy(proxy) # tell The Server where to get the verses from.
|
||||||
|
else:
|
||||||
|
self.bibleHTTPCache[bname] = None # makes the Full / partial code easier.
|
||||||
#
|
#
|
||||||
|
|
||||||
log.debug( "Bible Initialised")
|
log.debug( "Bible Initialised")
|
||||||
@ -145,12 +146,16 @@ class BibleManager():
|
|||||||
def get_bibles(self, mode="full"):
|
def get_bibles(self, mode="full"):
|
||||||
"""
|
"""
|
||||||
Returns a list of Books of the bible
|
Returns a list of Books of the bible
|
||||||
|
Mode "Full" - Returns all the bibles for the Queck seearch
|
||||||
|
Mode "Partial" - Returns CSV and OSIS bbles for the Advanced Search
|
||||||
"""
|
"""
|
||||||
r=[]
|
r=[]
|
||||||
for b , o in self.bibleDBCache.iteritems():
|
for b , o in self.bibleDBCache.iteritems():
|
||||||
if mode != "full":
|
if mode == "full":
|
||||||
print self.bibleHTTPCache[b]
|
r.append(b)
|
||||||
r.append(b)
|
else:
|
||||||
|
if self.bibleHTTPCache[b] == None: # we do not have an http bible
|
||||||
|
r.append(b)
|
||||||
return r
|
return r
|
||||||
|
|
||||||
def get_bible_books(self,bible):
|
def get_bible_books(self,bible):
|
||||||
|
@ -18,12 +18,14 @@ this program; if not, write to the Free Software Foundation, Inc., 59 Temple
|
|||||||
Place, Suite 330, Boston, MA 02111-1307 USA
|
Place, Suite 330, Boston, MA 02111-1307 USA
|
||||||
"""
|
"""
|
||||||
|
|
||||||
|
import os
|
||||||
|
|
||||||
from PyQt4 import QtCore, QtGui
|
from PyQt4 import QtCore, QtGui
|
||||||
|
|
||||||
from openlp.core.resources import *
|
from openlp.core.resources import *
|
||||||
from openlp.core.lib import Plugin, MediaManagerItem
|
from openlp.core.lib import Plugin, PluginUtils, MediaManagerItem
|
||||||
|
|
||||||
class PresentationPlugin(Plugin):
|
class PresentationPlugin(Plugin, PluginUtils):
|
||||||
def __init__(self):
|
def __init__(self):
|
||||||
# Call the parent constructor
|
# Call the parent constructor
|
||||||
Plugin.__init__(self, 'Presentations', '1.9.0')
|
Plugin.__init__(self, 'Presentations', '1.9.0')
|
||||||
@ -48,36 +50,66 @@ class PresentationPlugin(Plugin):
|
|||||||
':/presentations/presentation_delete.png', self.onPresentationDeleteClick, 'PresentationDeleteItem')
|
':/presentations/presentation_delete.png', self.onPresentationDeleteClick, 'PresentationDeleteItem')
|
||||||
## Separator Line ##
|
## Separator Line ##
|
||||||
self.MediaManagerItem.addToolbarSeparator()
|
self.MediaManagerItem.addToolbarSeparator()
|
||||||
## Preview Song Button ##
|
## Preview Presentation Button ##
|
||||||
self.MediaManagerItem.addToolbarButton('Preview Song', 'Preview the selected presentation',
|
self.MediaManagerItem.addToolbarButton('Preview Presentation', 'Preview the selected presentation',
|
||||||
':/system/system_preview.png', self.onPresentationPreviewClick, 'PresentationPreviewItem')
|
':/system/system_preview.png', self.onPresentationPreviewClick, 'PresentationPreviewItem')
|
||||||
## Live Song Button ##
|
## Live Presentation Button ##
|
||||||
self.MediaManagerItem.addToolbarButton('Go Live', 'Send the selected presentation live',
|
self.MediaManagerItem.addToolbarButton('Go Live', 'Send the selected presentation live',
|
||||||
':/system/system_live.png', self.onPresentationLiveClick, 'PresentationLiveItem')
|
':/system/system_live.png', self.onPresentationLiveClick, 'PresentationLiveItem')
|
||||||
## Add Song Button ##
|
## Add Presentation Button ##
|
||||||
self.MediaManagerItem.addToolbarButton('Add Presentation To Service',
|
self.MediaManagerItem.addToolbarButton('Add Presentation To Service',
|
||||||
'Add the selected presentation(s) to the service', ':/system/system_add.png',
|
'Add the selected presentation(s) to the service', ':/system/system_add.png',
|
||||||
self.onPresentationAddClick, 'PresentationAddItem')
|
self.onPresentationAddClick, 'PresentationAddItem')
|
||||||
## Add the songlist widget ##
|
## Add the Presentation widget ##
|
||||||
|
self.PresentationListView = QtGui.QTableWidget()
|
||||||
|
self.PresentationListView.setColumnCount(2)
|
||||||
|
self.PresentationListView.setColumnHidden(0, True)
|
||||||
|
self.PresentationListView.setColumnWidth(1, 275)
|
||||||
|
self.PresentationListView.setShowGrid(False)
|
||||||
|
self.PresentationListView.setSortingEnabled(False)
|
||||||
|
self.PresentationListView.setAlternatingRowColors(True)
|
||||||
|
self.PresentationListView.setHorizontalHeaderLabels(QtCore.QStringList(["","Name"]))
|
||||||
|
|
||||||
self.listView = QtGui.QListWidget()
|
self.PresentationListView.setGeometry(QtCore.QRect(10, 100, 256, 591))
|
||||||
self.listView.setGeometry(QtCore.QRect(10, 100, 256, 591))
|
self.PresentationListView.setObjectName("PresentationListView")
|
||||||
self.listView.setObjectName("listView")
|
self.PresentationListView.setAlternatingRowColors(True)
|
||||||
self.MediaManagerItem.PageLayout.addWidget(self.listView)
|
self.MediaManagerItem.PageLayout.addWidget(self.PresentationListView)
|
||||||
|
|
||||||
|
#define and add the context menu
|
||||||
|
self.PresentationListView.setContextMenuPolicy(QtCore.Qt.ActionsContextMenu)
|
||||||
|
|
||||||
|
self.PresentationListView.addAction(self.add_to_context_menu(self.PresentationListView, ':/system/system_preview.png', "&Preview Presentation", self.onPresentationPreviewClick))
|
||||||
|
self.PresentationListView.addAction(self.add_to_context_menu(self.PresentationListView, ':/system/system_live.png', "&Show Live", self.onPresentationLiveClick))
|
||||||
|
self.PresentationListView.addAction(self.pluginutils.add_to_context_menu(self.PresentationListView, ':/system/system_add.png', "&Add to Service", self.onPresentationAddClick))
|
||||||
|
|
||||||
return self.MediaManagerItem
|
return self.MediaManagerItem
|
||||||
|
|
||||||
def initialise(self):
|
def initialise(self):
|
||||||
self.onPresentationLoadClick()
|
list = self._load_display_list()
|
||||||
|
self._load_presentation_list(list)
|
||||||
|
|
||||||
def onPresentationLoadClick(self):
|
def onPresentationLoadClick(self):
|
||||||
files = self.config.get_files(u'ppt,pps,odi')
|
files = self.MediaManagerItem.getInputFiles("Select Presentation(s)", self._get_last_dir(), "Images (*.ppt *.pps *.odi)")
|
||||||
self.listView.clear()
|
if len(files) > 0:
|
||||||
for f in files:
|
self._load_presentation_list(files)
|
||||||
self.listView.addItem(f)
|
self._save_last_directory(files[0])
|
||||||
|
self._save_display_list(self.PresentationListView)
|
||||||
|
|
||||||
|
def _load_presentation_list(self, list):
|
||||||
|
for f in list:
|
||||||
|
fl , nm = os.path.split(str(f))
|
||||||
|
c = self.PresentationListView.rowCount()
|
||||||
|
self.PresentationListView.setRowCount(c+1)
|
||||||
|
twi = QtGui.QTableWidgetItem(str(f))
|
||||||
|
self.PresentationListView.setItem(c , 0, twi)
|
||||||
|
twi = QtGui.QTableWidgetItem(str(nm))
|
||||||
|
self.PresentationListView.setItem(c , 1, twi)
|
||||||
|
self.PresentationListView.setRowHeight(c, 20)
|
||||||
|
|
||||||
def onPresentationDeleteClick(self):
|
def onPresentationDeleteClick(self):
|
||||||
pass
|
cr = self.PresentationListView.currentRow()
|
||||||
|
self.PresentationListView.removeRow(int(cr))
|
||||||
|
self._save_display_list(self.PresentationListView)
|
||||||
|
|
||||||
def onPresentationPreviewClick(self):
|
def onPresentationPreviewClick(self):
|
||||||
pass
|
pass
|
||||||
|
@ -21,12 +21,12 @@ Place, Suite 330, Boston, MA 02111-1307 USA
|
|||||||
from PyQt4 import QtCore, QtGui
|
from PyQt4 import QtCore, QtGui
|
||||||
|
|
||||||
from openlp.core.resources import *
|
from openlp.core.resources import *
|
||||||
from openlp.core.lib import Plugin, MediaManagerItem
|
from openlp.core.lib import Plugin,PluginUtils, MediaManagerItem
|
||||||
from forms import EditSongForm, OpenLPImportForm, OpenSongImportForm, \
|
from forms import EditSongForm, OpenLPImportForm, OpenSongImportForm, \
|
||||||
OpenLPExportForm, OpenSongExportForm
|
OpenLPExportForm, OpenSongExportForm
|
||||||
from openlp.plugins.songs.lib import SongManager
|
from openlp.plugins.songs.lib import SongManager
|
||||||
|
|
||||||
class SongsPlugin(Plugin):
|
class SongsPlugin(Plugin, PluginUtils):
|
||||||
def __init__(self):
|
def __init__(self):
|
||||||
# Call the parent constructor
|
# Call the parent constructor
|
||||||
Plugin.__init__(self, 'Songs', '1.9.0')
|
Plugin.__init__(self, 'Songs', '1.9.0')
|
||||||
@ -108,7 +108,9 @@ class SongsPlugin(Plugin):
|
|||||||
self.MediaManagerItem.PageLayout.addWidget(self.SongWidget)
|
self.MediaManagerItem.PageLayout.addWidget(self.SongWidget)
|
||||||
self.SongListView = QtGui.QTableWidget()
|
self.SongListView = QtGui.QTableWidget()
|
||||||
self.SongListView.setColumnCount(3)
|
self.SongListView.setColumnCount(3)
|
||||||
self.SongListView.setColumnHidden(0, True)
|
self.SongListView.setColumnHidden(0, True)
|
||||||
|
self.SongListView.setColumnWidth(1, 200)
|
||||||
|
self.SongListView.setColumnWidth(2, 80)
|
||||||
self.SongListView.setShowGrid(False)
|
self.SongListView.setShowGrid(False)
|
||||||
self.SongListView.setSortingEnabled(False)
|
self.SongListView.setSortingEnabled(False)
|
||||||
self.SongListView.setAlternatingRowColors(True)
|
self.SongListView.setAlternatingRowColors(True)
|
||||||
@ -127,11 +129,11 @@ class SongsPlugin(Plugin):
|
|||||||
#define and add the context menu
|
#define and add the context menu
|
||||||
self.SongListView.setContextMenuPolicy(QtCore.Qt.ActionsContextMenu)
|
self.SongListView.setContextMenuPolicy(QtCore.Qt.ActionsContextMenu)
|
||||||
|
|
||||||
self.SongListView.addAction(self.pluginutils.add_to_context_menu(self.SongListView, ':/songs/song_new.png', "&Edit Song", self.onSongEditClick))
|
self.SongListView.addAction(self.add_to_context_menu(self.SongListView, ':/songs/song_new.png', "&Edit Song", self.onSongEditClick))
|
||||||
self.SongListView.addAction(self.pluginutils.add_separator(self.SongListView))
|
self.SongListView.addAction(self.add_to_context_separator(self.SongListView))
|
||||||
self.SongListView.addAction(self.pluginutils.add_to_context_menu(self.SongListView, ':/system/system_preview.png', "&Preview Song", self.onSongPreviewClick))
|
self.SongListView.addAction(self.add_to_context_menu(self.SongListView, ':/system/system_preview.png', "&Preview Song", self.onSongPreviewClick))
|
||||||
self.SongListView.addAction(self.pluginutils.add_to_context_menu(self.SongListView, ':/system/system_live.png', "&Show Live", self.onSongLiveClick))
|
self.SongListView.addAction(self.add_to_context_menu(self.SongListView, ':/system/system_live.png', "&Show Live", self.onSongLiveClick))
|
||||||
self.SongListView.addAction(self.pluginutils.add_to_context_menu(self.SongListView, ':/system/system_add.png', "&Add to Service", self.onSongEditClick))
|
self.SongListView.addAction(self.add_to_context_menu(self.SongListView, ':/system/system_add.png', "&Add to Service", self.onSongEditClick))
|
||||||
|
|
||||||
return self.MediaManagerItem
|
return self.MediaManagerItem
|
||||||
|
|
||||||
@ -253,7 +255,7 @@ class SongsPlugin(Plugin):
|
|||||||
|
|
||||||
def _display_results(self):
|
def _display_results(self):
|
||||||
self.SongListView.clear() # clear the results
|
self.SongListView.clear() # clear the results
|
||||||
self.SongListView.setHorizontalHeaderLabels(QtCore.QStringList(["","Song Name","Author"]))
|
self.SongListView.setHorizontalHeaderLabels(QtCore.QStringList(["","Song Name","Author"]))
|
||||||
self.SongListView.setVerticalHeaderLabels(QtCore.QStringList([""]))
|
self.SongListView.setVerticalHeaderLabels(QtCore.QStringList([""]))
|
||||||
self.SongListView.setRowCount(0)
|
self.SongListView.setRowCount(0)
|
||||||
for id, txt, name in self.searchresults:
|
for id, txt, name in self.searchresults:
|
||||||
|
Loading…
Reference in New Issue
Block a user