forked from openlp/openlp
ServiceManager changes
Small bug fixes New OOS format bzr-revno: 470
This commit is contained in:
commit
9405528a5a
|
@ -20,9 +20,8 @@ Place, Suite 330, Boston, MA 02111-1307 USA
|
||||||
import logging
|
import logging
|
||||||
import os, os.path
|
import os, os.path
|
||||||
import sys
|
import sys
|
||||||
#from copy import copy
|
|
||||||
|
|
||||||
from PyQt4 import QtGui, QtCore, Qt
|
from PyQt4 import QtGui, QtCore
|
||||||
|
|
||||||
class Renderer:
|
class Renderer:
|
||||||
"""
|
"""
|
||||||
|
@ -36,7 +35,6 @@ class Renderer:
|
||||||
def __init__(self):
|
def __init__(self):
|
||||||
self._rect = None
|
self._rect = None
|
||||||
self._debug = 0
|
self._debug = 0
|
||||||
#self.words = None
|
|
||||||
self._right_margin = 64 # the amount of right indent
|
self._right_margin = 64 # the amount of right indent
|
||||||
self._shadow_offset = 5
|
self._shadow_offset = 5
|
||||||
self._outline_offset = 2
|
self._outline_offset = 2
|
||||||
|
@ -140,7 +138,7 @@ class Renderer:
|
||||||
# reset the frame. first time do not worry about what you paint on.
|
# reset the frame. first time do not worry about what you paint on.
|
||||||
#self._frame = QtGui.QPixmap(self._frame.width(), self._frame.height()) #(self._bg_frame)
|
#self._frame = QtGui.QPixmap(self._frame.width(), self._frame.height()) #(self._bg_frame)
|
||||||
#self._frame.fill(QtCore.Qt.transparent)
|
#self._frame.fill(QtCore.Qt.transparent)
|
||||||
# reset the frame. first time do not worrk about what you paint on.
|
# reset the frame. first time do not worry about what you paint on.
|
||||||
self._frame = QtGui.QImage(self._bg_frame)
|
self._frame = QtGui.QImage(self._bg_frame)
|
||||||
x, y = self._correctAlignment(self._rect, bbox)
|
x, y = self._correctAlignment(self._rect, bbox)
|
||||||
bbox = self._render_lines_unaligned(lines, False, (x, y), True)
|
bbox = self._render_lines_unaligned(lines, False, (x, y), True)
|
||||||
|
|
|
@ -21,9 +21,8 @@ import logging
|
||||||
import os, os.path
|
import os, os.path
|
||||||
import sys
|
import sys
|
||||||
|
|
||||||
from datetime import *
|
from PyQt4 import QtGui, QtCore
|
||||||
from PyQt4 import QtGui, QtCore, Qt
|
from renderer import Renderer
|
||||||
from renderer import Renderer
|
|
||||||
|
|
||||||
import sys
|
import sys
|
||||||
import linecache
|
import linecache
|
||||||
|
|
|
@ -113,25 +113,47 @@ class ServiceManager(QtGui.QWidget):
|
||||||
"""
|
"""
|
||||||
Move the current ServiceItem to the top of the list
|
Move the current ServiceItem to the top of the list
|
||||||
"""
|
"""
|
||||||
pass
|
item, count = self.findServiceItem()
|
||||||
|
if item < len(self.serviceItems) and item is not -1:
|
||||||
|
temp = self.serviceItems[item]
|
||||||
|
self.serviceItems.remove(self.serviceItems[item])
|
||||||
|
self.serviceItems.insert(0, temp)
|
||||||
|
self.repaintServiceList()
|
||||||
|
|
||||||
def onServiceUp(self):
|
def onServiceUp(self):
|
||||||
"""
|
"""
|
||||||
Move the current ServiceItem up in the list
|
Move the current ServiceItem up in the list
|
||||||
|
Note move up means move to top of area ie 0.
|
||||||
"""
|
"""
|
||||||
pass
|
item, count = self.findServiceItem()
|
||||||
|
if item > 0:
|
||||||
|
temp = self.serviceItems[item]
|
||||||
|
self.serviceItems.remove(self.serviceItems[item])
|
||||||
|
self.serviceItems.insert(item - 1, temp)
|
||||||
|
self.repaintServiceList()
|
||||||
|
|
||||||
def onServiceDown(self):
|
def onServiceDown(self):
|
||||||
"""
|
"""
|
||||||
Move the current ServiceItem down in the list
|
Move the current ServiceItem down in the list
|
||||||
|
Note move down means move to bottom of area i.e len().
|
||||||
"""
|
"""
|
||||||
pass
|
item, count = self.findServiceItem()
|
||||||
|
if item < len(self.serviceItems) and item is not -1:
|
||||||
|
temp = self.serviceItems[item]
|
||||||
|
self.serviceItems.remove(self.serviceItems[item])
|
||||||
|
self.serviceItems.insert(item + 1, temp)
|
||||||
|
self.repaintServiceList()
|
||||||
|
|
||||||
def onServiceEnd(self):
|
def onServiceEnd(self):
|
||||||
"""
|
"""
|
||||||
Move the current ServiceItem to the bottom of the list
|
Move the current ServiceItem to the bottom of the list
|
||||||
"""
|
"""
|
||||||
pass
|
item, count = self.findServiceItem()
|
||||||
|
if item < len(self.serviceItems) and item is not -1:
|
||||||
|
temp = self.serviceItems[item]
|
||||||
|
self.serviceItems.remove(self.serviceItems[item])
|
||||||
|
self.serviceItems.insert(len(self.serviceItems), temp)
|
||||||
|
self.repaintServiceList()
|
||||||
|
|
||||||
def onNewService(self):
|
def onNewService(self):
|
||||||
"""
|
"""
|
||||||
|
@ -144,7 +166,32 @@ class ServiceManager(QtGui.QWidget):
|
||||||
"""
|
"""
|
||||||
Remove the current ServiceItem from the list
|
Remove the current ServiceItem from the list
|
||||||
"""
|
"""
|
||||||
pass
|
item, count = self.findServiceItem()
|
||||||
|
if item is not -1:
|
||||||
|
self.serviceItems.remove(self.serviceItems[item])
|
||||||
|
self.repaintServiceList()
|
||||||
|
|
||||||
|
def repaintServiceList(self):
|
||||||
|
#Correct order of idems in array
|
||||||
|
count = 1
|
||||||
|
for item in self.serviceItems:
|
||||||
|
item[u'order'] = count
|
||||||
|
count += 1
|
||||||
|
#Repaint the screen
|
||||||
|
self.ServiceManagerList.clear()
|
||||||
|
for item in self.serviceItems:
|
||||||
|
serviceitem = item[u'data']
|
||||||
|
treewidgetitem = QtGui.QTreeWidgetItem(self.ServiceManagerList)
|
||||||
|
treewidgetitem.setText(0,serviceitem.title)
|
||||||
|
treewidgetitem.setIcon(0,serviceitem.iconic_representation)
|
||||||
|
treewidgetitem.setData(0, QtCore.Qt.UserRole, QtCore.QVariant(item[u'order']))
|
||||||
|
count = 0
|
||||||
|
for frame in serviceitem.frames:
|
||||||
|
treewidgetitem1 = QtGui.QTreeWidgetItem(treewidgetitem)
|
||||||
|
text = frame[u'title']
|
||||||
|
treewidgetitem1.setText(0,text[:40])
|
||||||
|
treewidgetitem1.setData(0, QtCore.Qt.UserRole,QtCore.QVariant(count))
|
||||||
|
count = count + 1
|
||||||
|
|
||||||
def onSaveService(self):
|
def onSaveService(self):
|
||||||
"""
|
"""
|
||||||
|
@ -233,11 +280,10 @@ class ServiceManager(QtGui.QWidget):
|
||||||
pos = 0
|
pos = 0
|
||||||
count = 0
|
count = 0
|
||||||
for item in items:
|
for item in items:
|
||||||
childCount = item.childCount()
|
parentitem = item.parent()
|
||||||
if childCount >= 1:
|
if parentitem is None:
|
||||||
pos = item.data(0, QtCore.Qt.UserRole).toInt()[0]
|
pos = item.data(0, QtCore.Qt.UserRole).toInt()[0]
|
||||||
else:
|
else:
|
||||||
parentitem = item.parent()
|
|
||||||
pos = parentitem.data(0, QtCore.Qt.UserRole).toInt()[0]
|
pos = parentitem.data(0, QtCore.Qt.UserRole).toInt()[0]
|
||||||
count = item.data(0, QtCore.Qt.UserRole).toInt()[0]
|
count = item.data(0, QtCore.Qt.UserRole).toInt()[0]
|
||||||
#adjuest for zero based arrays
|
#adjuest for zero based arrays
|
||||||
|
|
|
@ -142,17 +142,20 @@ class CustomMediaItem(MediaManagerItem):
|
||||||
|
|
||||||
def onCustomEditClick(self):
|
def onCustomEditClick(self):
|
||||||
item = self.CustomListWidget.currentItem()
|
item = self.CustomListWidget.currentItem()
|
||||||
item_id = (item.data(QtCore.Qt.UserRole)).toInt()[0]
|
item = self.CustomListWidget.currentItem()
|
||||||
self.parent.edit_custom_form.loadCustom(item_id)
|
if item is not None:
|
||||||
self.parent.edit_custom_form.exec_()
|
item_id = (item.data(QtCore.Qt.UserRole)).toInt()[0]
|
||||||
self.initialise()
|
self.parent.edit_custom_form.loadCustom(item_id)
|
||||||
|
self.parent.edit_custom_form.exec_()
|
||||||
|
self.initialise()
|
||||||
|
|
||||||
def onCustomDeleteClick(self):
|
def onCustomDeleteClick(self):
|
||||||
item = self.CustomListWidget.currentItem()
|
item = self.CustomListWidget.currentItem()
|
||||||
item_id = (item.data(QtCore.Qt.UserRole)).toInt()[0]
|
if item is not None:
|
||||||
self.parent.custommanager.delete_custom(item_id)
|
item_id = (item.data(QtCore.Qt.UserRole)).toInt()[0]
|
||||||
row = self.CustomListWidget.row(item)
|
self.parent.custommanager.delete_custom(item_id)
|
||||||
self.CustomListWidget.takeItem(row)
|
row = self.CustomListWidget.row(item)
|
||||||
|
self.CustomListWidget.takeItem(row)
|
||||||
|
|
||||||
def onCustomPreviewClick(self):
|
def onCustomPreviewClick(self):
|
||||||
log.debug(u'Custom Preview Requested')
|
log.debug(u'Custom Preview Requested')
|
||||||
|
|
|
@ -1,113 +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 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 ServiceItem
|
|
||||||
from listwithpreviews import ListWithPreviews
|
|
||||||
|
|
||||||
class ImageServiceItem(ServiceItem):
|
|
||||||
"""
|
|
||||||
The service item is a base class for the plugins to use to interact with
|
|
||||||
* the service manager (and hence the OOS disk files),
|
|
||||||
* the slide controller(s - both preview and live)
|
|
||||||
* and the renderer - which produces the
|
|
||||||
main screen
|
|
||||||
the preview preview and
|
|
||||||
the live preview
|
|
||||||
|
|
||||||
The image plugin passes one of these to the preview/live when requested
|
|
||||||
The preview/live controllers keep hold of it
|
|
||||||
The service manager has one in its service structure for each Image item in the OOS
|
|
||||||
When something goes live/previews -
|
|
||||||
it simply tells the slide controller to use it???
|
|
||||||
|
|
||||||
It contains 1 or more images
|
|
||||||
|
|
||||||
"""
|
|
||||||
global log
|
|
||||||
log=logging.getLogger(u'ImageServiceItem')
|
|
||||||
log.info(u'ImageServiceItem loaded')
|
|
||||||
def __init__(self, controller):
|
|
||||||
"""
|
|
||||||
Init Method
|
|
||||||
"""
|
|
||||||
log.info(u'init')
|
|
||||||
self.imgs=ListWithPreviews()
|
|
||||||
# self.slide_controller=controller
|
|
||||||
# self.slide_controller.ControllerContents=QtGui.QListView()
|
|
||||||
# c=self.slide_controller.ControllerContents
|
|
||||||
# c.uniformItemSizes=True
|
|
||||||
# c.setModel(self.imgs)
|
|
||||||
# c.setGeometry(0,0,200,200)
|
|
||||||
|
|
||||||
def render(self):
|
|
||||||
"""
|
|
||||||
The render method is what the plugin uses to render its meda to the
|
|
||||||
screen.
|
|
||||||
"""
|
|
||||||
# render the "image chooser first"
|
|
||||||
# for f in self.imgs:
|
|
||||||
# fl , nm = os.path.split(unicode(f))
|
|
||||||
# c = self.slide_controller.rowCount()
|
|
||||||
# self.slide_controller.setRowCount(c+1)
|
|
||||||
# twi = QtGui.QTableWidgetItem(unicode(f))
|
|
||||||
# self.slide_controller.setItem(c , 0, twi)
|
|
||||||
# twi = QtGui.QTableWidgetItem(unicode(nm))
|
|
||||||
# self.slide_controller.setItem(c , 1, twi)
|
|
||||||
# self.slide_controller.setRowHeight(c, 80)
|
|
||||||
|
|
||||||
# render the preview screen here
|
|
||||||
|
|
||||||
def get_parent_node(self):
|
|
||||||
"""
|
|
||||||
This method returns a parent node to be inserted into the Service
|
|
||||||
Manager.
|
|
||||||
"""
|
|
||||||
pass
|
|
||||||
def add(self, data):
|
|
||||||
"""
|
|
||||||
append an image to the list
|
|
||||||
"""
|
|
||||||
if type(data)==type(u'string'):
|
|
||||||
log.info(u'add filename:'+data)
|
|
||||||
self.imgs.addRow(data)
|
|
||||||
else: # it's another service item to be merged in
|
|
||||||
log.info(u'add Item...'+unicode(data))
|
|
||||||
for filename in data.get_file_list():
|
|
||||||
self.add(filename)
|
|
||||||
|
|
||||||
|
|
||||||
def get_oos_text(self):
|
|
||||||
"""
|
|
||||||
Turn the image list into a set of filenames for storage in the oos file
|
|
||||||
"""
|
|
||||||
log.info(u'Get oos text')
|
|
||||||
log.info(unicode(self.imgs))
|
|
||||||
# log.info(unicode(self.imgs.get_file_list()))
|
|
||||||
return '\n'.join(self.imgs.get_file_list())
|
|
||||||
|
|
||||||
def set_from_oos(self, text):
|
|
||||||
"""
|
|
||||||
get text from the OOS file and setup the internal structure
|
|
||||||
"""
|
|
||||||
log.info(u'Set from OOS:'+text)
|
|
||||||
files=text.split(u'\n')
|
|
||||||
for f in files:
|
|
||||||
self.imgs.addRow(f)
|
|
|
@ -5,11 +5,11 @@ OpenLP - Open Source Lyrics Projection
|
||||||
Copyright (c) 2008 Raoul Snyman
|
Copyright (c) 2008 Raoul Snyman
|
||||||
Portions copyright (c) 2008-2009 Martin Thompson, Tim Bentley
|
Portions copyright (c) 2008-2009 Martin Thompson, Tim Bentley
|
||||||
|
|
||||||
This program is free software; you can redistribute it and/or modify it under
|
This program is free software; you can rediunicodeibute it and/or modify it under
|
||||||
the terms of the GNU General Public License as published by the Free Software
|
the terms of the GNU General Public License as published by the Free Software
|
||||||
Foundation; version 2 of the License.
|
Foundation; version 2 of the License.
|
||||||
|
|
||||||
This program is distributed in the hope that it will be useful, but WITHOUT ANY
|
This program is diunicodeibuted in the hope that it will be useful, but WITHOUT ANY
|
||||||
WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A
|
WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A
|
||||||
PARTICULAR PURPOSE. See the GNU General Public License for more details.
|
PARTICULAR PURPOSE. See the GNU General Public License for more details.
|
||||||
|
|
||||||
|
@ -21,10 +21,9 @@ import os
|
||||||
import logging
|
import logging
|
||||||
from PyQt4 import QtCore, QtGui
|
from PyQt4 import QtCore, QtGui
|
||||||
|
|
||||||
|
|
||||||
class ListWithPreviews(QtCore.QAbstractListModel):
|
class ListWithPreviews(QtCore.QAbstractListModel):
|
||||||
"""
|
"""
|
||||||
An abstract list of strings and the preview icon to go with them
|
An abstract list of unicodeings and the preview icon to go with them
|
||||||
"""
|
"""
|
||||||
global log
|
global log
|
||||||
log = logging.getLogger(u'ListWithPreviews')
|
log = logging.getLogger(u'ListWithPreviews')
|
||||||
|
@ -32,7 +31,8 @@ class ListWithPreviews(QtCore.QAbstractListModel):
|
||||||
|
|
||||||
def __init__(self):
|
def __init__(self):
|
||||||
QtCore.QAbstractListModel.__init__(self)
|
QtCore.QAbstractListModel.__init__(self)
|
||||||
self.items = [] # will be a list of (full filename, QPixmap, shortname) tuples
|
# will be a list of (full filename, QPixmap, shortname) tuples
|
||||||
|
self.items = []
|
||||||
self.rowheight = 50
|
self.rowheight = 50
|
||||||
self.maximagewidth = self.rowheight*16/9.0;
|
self.maximagewidth = self.rowheight*16/9.0;
|
||||||
|
|
||||||
|
@ -41,10 +41,10 @@ class ListWithPreviews(QtCore.QAbstractListModel):
|
||||||
|
|
||||||
def insertRow(self, row, filename):
|
def insertRow(self, row, filename):
|
||||||
self.beginInsertRows(QtCore.QModelIndex(),row,row)
|
self.beginInsertRows(QtCore.QModelIndex(),row,row)
|
||||||
log.info(u'insert row %d:%s'% (row,filename))
|
#log.info(u'insert row %d:%s' % (row,filename))
|
||||||
# get short filename to display next to image
|
# get short filename to display next to image
|
||||||
(prefix, shortfilename) = os.path.split(unicode(filename))
|
(prefix, shortfilename) = os.path.split(unicode(filename))
|
||||||
log.info(u'shortfilename=%s'% (shortfilename))
|
#log.info(u'shortfilename=%s' % (shortfilename))
|
||||||
# create a preview image
|
# create a preview image
|
||||||
if os.path.exists(filename):
|
if os.path.exists(filename):
|
||||||
preview = QtGui.QPixmap(unicode(filename))
|
preview = QtGui.QPixmap(unicode(filename))
|
||||||
|
|
|
@ -122,7 +122,7 @@ class ImageMediaItem(MediaManagerItem):
|
||||||
files = QtGui.QFileDialog.getOpenFileNames(None,
|
files = QtGui.QFileDialog.getOpenFileNames(None,
|
||||||
translate(u'ImageMediaItem', u'Select Image(s)'),
|
translate(u'ImageMediaItem', u'Select Image(s)'),
|
||||||
self.parent.config.get_last_dir(),
|
self.parent.config.get_last_dir(),
|
||||||
u'Images (*.jpg *.gif *.png *.bmp)')
|
u'Images (*.jpg *jpeg *.gif *.png *.bmp)')
|
||||||
log.info(u'New image(s)', unicode(files))
|
log.info(u'New image(s)', unicode(files))
|
||||||
if len(files) > 0:
|
if len(files) > 0:
|
||||||
self.loadImageList(files)
|
self.loadImageList(files)
|
||||||
|
|
|
@ -209,16 +209,18 @@ class SongMediaItem(MediaManagerItem):
|
||||||
|
|
||||||
def onSongEditClick(self):
|
def onSongEditClick(self):
|
||||||
item = self.SongListWidget.currentItem()
|
item = self.SongListWidget.currentItem()
|
||||||
item_id = (item.data(QtCore.Qt.UserRole)).toInt()[0]
|
if item is not None:
|
||||||
self.edit_song_form.loadSong(item_id)
|
item_id = (item.data(QtCore.Qt.UserRole)).toInt()[0]
|
||||||
self.edit_song_form.exec_()
|
self.edit_song_form.loadSong(item_id)
|
||||||
|
self.edit_song_form.exec_()
|
||||||
|
|
||||||
def onSongDeleteClick(self):
|
def onSongDeleteClick(self):
|
||||||
item = self.SongListWidget.currentItem()
|
item = self.SongListWidget.currentItem()
|
||||||
item_id = (item.data(QtCore.Qt.UserRole)).toInt()[0]
|
if item is not None:
|
||||||
self.parent.songmanager.delete_song(item_id)
|
item_id = (item.data(QtCore.Qt.UserRole)).toInt()[0]
|
||||||
row = self.SongListWidget.row(item)
|
self.parent.songmanager.delete_song(item_id)
|
||||||
self.SongListWidget.takeItem(row)
|
row = self.SongListWidget.row(item)
|
||||||
|
self.SongListWidget.takeItem(row)
|
||||||
|
|
||||||
def onSongPreviewClick(self):
|
def onSongPreviewClick(self):
|
||||||
service_item = ServiceItem(self.parent)
|
service_item = ServiceItem(self.parent)
|
||||||
|
|
Loading…
Reference in New Issue