forked from openlp/openlp
commit
081a9c98db
@ -26,7 +26,7 @@ from PyQt4 import QtCore, QtGui
|
|||||||
from openlp.core.lib import Receiver
|
from openlp.core.lib import Receiver
|
||||||
|
|
||||||
logging.basicConfig(level=logging.DEBUG,
|
logging.basicConfig(level=logging.DEBUG,
|
||||||
format=u'%(asctime)s %(name)-12s %(levelname)-8s %(message)s',
|
format=u'%(asctime)s %(msecs)d %(name)-12s %(levelname)-8s %(message)s',
|
||||||
datefmt=u'%m-%d %H:%M:%S',
|
datefmt=u'%m-%d %H:%M:%S',
|
||||||
filename=u'openlp.log',
|
filename=u'openlp.log',
|
||||||
filemode=u'w')
|
filemode=u'w')
|
||||||
|
@ -35,6 +35,7 @@ class EventType(object):
|
|||||||
AfterLoadService = 2
|
AfterLoadService = 2
|
||||||
BeforeSaveService = 3
|
BeforeSaveService = 3
|
||||||
AfterSaveService = 4
|
AfterSaveService = 4
|
||||||
|
LoadServiceItem = 5
|
||||||
# Preview events
|
# Preview events
|
||||||
PreviewBeforeLoad = 11
|
PreviewBeforeLoad = 11
|
||||||
PreviewAfterLoad = 12
|
PreviewAfterLoad = 12
|
||||||
|
@ -19,8 +19,9 @@ 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 datetime import *
|
||||||
from PyQt4 import QtGui, QtCore, Qt
|
from PyQt4 import QtGui, QtCore, Qt
|
||||||
|
|
||||||
from copy import copy
|
from copy import copy
|
||||||
@ -95,6 +96,7 @@ class Renderer:
|
|||||||
self.img=QtGui.QPixmap.fromImage(i.scaled(QtCore.QSize(neww, newh), Qt.Qt.KeepAspectRatio))
|
self.img=QtGui.QPixmap.fromImage(i.scaled(QtCore.QSize(neww, newh), Qt.Qt.KeepAspectRatio))
|
||||||
|
|
||||||
def set_paint_dest(self, p):
|
def set_paint_dest(self, p):
|
||||||
|
log.debug(u'set paint dest (frame) w %d h %d',p.width(), p.height())
|
||||||
self._paint=p
|
self._paint=p
|
||||||
if self._bg_image_filename is not None:
|
if self._bg_image_filename is not None:
|
||||||
self.scale_bg_image()
|
self.scale_bg_image()
|
||||||
@ -128,6 +130,7 @@ class Renderer:
|
|||||||
assert(self._theme)
|
assert(self._theme)
|
||||||
assert(self._paint)
|
assert(self._paint)
|
||||||
log.debug(u'render background %s ', self._theme.background_type)
|
log.debug(u'render background %s ', self._theme.background_type)
|
||||||
|
bef = datetime.now()
|
||||||
p=QtGui.QPainter()
|
p=QtGui.QPainter()
|
||||||
p.begin(self._paint)
|
p.begin(self._paint)
|
||||||
if self._theme.background_type == u'solid':
|
if self._theme.background_type == u'solid':
|
||||||
@ -172,6 +175,10 @@ class Renderer:
|
|||||||
else:
|
else:
|
||||||
p.fillRect(self._paint.rect(), QtGui.QColor(u'#000000'))
|
p.fillRect(self._paint.rect(), QtGui.QColor(u'#000000'))
|
||||||
p.end()
|
p.end()
|
||||||
|
aft = datetime.now()
|
||||||
|
print "background time", bef, aft, aft-bef
|
||||||
|
|
||||||
|
log.debug(u'render background finish')
|
||||||
|
|
||||||
def split_set_of_lines(self, lines, footer):
|
def split_set_of_lines(self, lines, footer):
|
||||||
|
|
||||||
@ -250,7 +257,7 @@ class Renderer:
|
|||||||
|
|
||||||
def render_lines(self, lines, footer_lines=None):
|
def render_lines(self, lines, footer_lines=None):
|
||||||
"""render a set of lines according to the theme, return bounding box"""
|
"""render a set of lines according to the theme, return bounding box"""
|
||||||
log.debug(u'_render_lines %s', lines)
|
log.debug(u'render_lines - Start')
|
||||||
|
|
||||||
bbox=self._render_lines_unaligned(lines, False) # Main font
|
bbox=self._render_lines_unaligned(lines, False) # Main font
|
||||||
if footer_lines is not None:
|
if footer_lines is not None:
|
||||||
@ -263,7 +270,7 @@ class Renderer:
|
|||||||
|
|
||||||
if footer_lines is not None:
|
if footer_lines is not None:
|
||||||
bbox=self._render_lines_unaligned(footer_lines, True, (self._rect_footer.left(), self._rect_footer.top()) )
|
bbox=self._render_lines_unaligned(footer_lines, True, (self._rect_footer.left(), self._rect_footer.top()) )
|
||||||
|
log.debug(u'render_lines- Finish')
|
||||||
return bbox
|
return bbox
|
||||||
|
|
||||||
def _render_lines_unaligned(self, lines, footer, tlcorner=(0,0)):
|
def _render_lines_unaligned(self, lines, footer, tlcorner=(0,0)):
|
||||||
@ -274,13 +281,11 @@ class Renderer:
|
|||||||
than a screenful (eg. by using split_set_of_lines)
|
than a screenful (eg. by using split_set_of_lines)
|
||||||
|
|
||||||
Returns the bounding box of the text as QRect"""
|
Returns the bounding box of the text as QRect"""
|
||||||
log.debug(u'render lines unaligned %s', lines)
|
log.debug(u'render lines unaligned Start')
|
||||||
x, y=tlcorner
|
x, y=tlcorner
|
||||||
brx=x
|
brx=x
|
||||||
bry=y
|
bry=y
|
||||||
for line in lines:
|
for line in lines:
|
||||||
#if (line == ''):
|
|
||||||
# continue
|
|
||||||
# render after current bottom, but at original left edge
|
# render after current bottom, but at original left edge
|
||||||
# keep track of right edge to see which is biggest
|
# keep track of right edge to see which is biggest
|
||||||
(thisx, bry) = self._render_single_line(line, footer, (x,bry))
|
(thisx, bry) = self._render_single_line(line, footer, (x,bry))
|
||||||
@ -293,8 +298,7 @@ class Renderer:
|
|||||||
p.setPen(QtGui.QPen(QtGui.QColor(0,0,255)))
|
p.setPen(QtGui.QPen(QtGui.QColor(0,0,255)))
|
||||||
p.drawRect(retval)
|
p.drawRect(retval)
|
||||||
p.end()
|
p.end()
|
||||||
|
log.debug(u'render lines unaligned Finish')
|
||||||
|
|
||||||
return retval
|
return retval
|
||||||
|
|
||||||
def _render_single_line(self, line, footer, tlcorner=(0,0)):
|
def _render_single_line(self, line, footer, tlcorner=(0,0)):
|
||||||
@ -396,16 +400,16 @@ class Renderer:
|
|||||||
p.end()
|
p.end()
|
||||||
|
|
||||||
brcorner=(rightextent,y)
|
brcorner=(rightextent,y)
|
||||||
|
log.debug(u'Render single line Finish')
|
||||||
return brcorner
|
return brcorner
|
||||||
|
|
||||||
# xxx this is what to override for an SDL version
|
# xxx this is what to override for an SDL version
|
||||||
def _get_extent_and_render(self, line, footer, tlcorner=(0,0), draw=False, color=None):
|
def _get_extent_and_render(self, line, footer, tlcorner=(0,0), draw=False, color=None):
|
||||||
"""Find bounding box of text - as render_single_line.
|
"""Find bounding box of text - as render_single_line.
|
||||||
If draw is set, actually draw the text to the current DC as well
|
If draw is set, actually draw the text to the current DC as well
|
||||||
|
|
||||||
return width and height of text as a tuple (w,h)"""
|
return width and height of text as a tuple (w,h)"""
|
||||||
# setup defaults
|
# setup defaults
|
||||||
log.debug(u'_get_extent_and_render %s %s %s ', [line], tlcorner, draw)
|
#log.debug(u'_get_extent_and_render %s %s %s ', [line], tlcorner, draw)
|
||||||
p=QtGui.QPainter()
|
p=QtGui.QPainter()
|
||||||
p.begin(self._paint)
|
p.begin(self._paint)
|
||||||
# 'twould be more efficient to set this once when theme changes
|
# 'twould be more efficient to set this once when theme changes
|
||||||
|
@ -18,12 +18,31 @@ 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 logging
|
import logging
|
||||||
import time
|
|
||||||
import os, os.path
|
import os, os.path
|
||||||
import sys
|
import sys
|
||||||
|
|
||||||
|
from datetime import *
|
||||||
from PyQt4 import QtGui, QtCore, Qt
|
from PyQt4 import QtGui, QtCore, Qt
|
||||||
from renderer import Renderer
|
from renderer import Renderer
|
||||||
|
|
||||||
|
import sys
|
||||||
|
import linecache
|
||||||
|
|
||||||
|
def traceit(frame, event, arg):
|
||||||
|
if event == "line":
|
||||||
|
lineno = frame.f_lineno
|
||||||
|
filename = frame.f_globals["__file__"]
|
||||||
|
if (filename.endswith(".pyc") or
|
||||||
|
filename.endswith(".pyo")):
|
||||||
|
filename = filename[:-1]
|
||||||
|
name = frame.f_globals["__name__"]
|
||||||
|
line = linecache.getline(filename, lineno)
|
||||||
|
if name.startswith("openlp"):
|
||||||
|
print "%s:%s: %s" % (name, lineno, line.rstrip())
|
||||||
|
return traceit
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
class RenderManager:
|
class RenderManager:
|
||||||
"""
|
"""
|
||||||
Class to pull all Renderer interactions into one place.
|
Class to pull all Renderer interactions into one place.
|
||||||
@ -51,6 +70,7 @@ class RenderManager:
|
|||||||
self.theme = self.default_theme
|
self.theme = self.default_theme
|
||||||
log.debug(u'theme is now %s', self.theme)
|
log.debug(u'theme is now %s', self.theme)
|
||||||
self.themedata = self.theme_manager.getThemeData(self.theme)
|
self.themedata = self.theme_manager.getThemeData(self.theme)
|
||||||
|
self.calculate_default(self.screen_list[self.current_display]['size'])
|
||||||
self.renderer.set_theme(self.themedata)
|
self.renderer.set_theme(self.themedata)
|
||||||
self.build_text_rectangle(self.themedata)
|
self.build_text_rectangle(self.themedata)
|
||||||
|
|
||||||
@ -74,7 +94,7 @@ class RenderManager:
|
|||||||
self.renderer.set_text_rectangle(main_rect,footer_rect)
|
self.renderer.set_text_rectangle(main_rect,footer_rect)
|
||||||
|
|
||||||
def generate_preview(self, themedata):
|
def generate_preview(self, themedata):
|
||||||
log.debug(u'generate preview ')
|
log.debug(u'generate preview')
|
||||||
self.calculate_default(QtCore.QSize(800,600))
|
self.calculate_default(QtCore.QSize(800,600))
|
||||||
self.renderer.set_theme(themedata)
|
self.renderer.set_theme(themedata)
|
||||||
self.build_text_rectangle(themedata)
|
self.build_text_rectangle(themedata)
|
||||||
@ -102,11 +122,18 @@ class RenderManager:
|
|||||||
|
|
||||||
def generate_slide(self,main_text, footer_text):
|
def generate_slide(self,main_text, footer_text):
|
||||||
log.debug(u'generate slide')
|
log.debug(u'generate slide')
|
||||||
|
#sys.settrace(traceit)
|
||||||
|
|
||||||
self.calculate_default(self.screen_list[self.current_display]['size'])
|
self.calculate_default(self.screen_list[self.current_display]['size'])
|
||||||
|
|
||||||
|
bef = datetime.now()
|
||||||
frame = QtGui.QPixmap(self.width, self.height)
|
frame = QtGui.QPixmap(self.width, self.height)
|
||||||
|
aft = datetime.now()
|
||||||
|
print "framebuild time", bef, aft, aft-bef
|
||||||
|
|
||||||
self.renderer.set_paint_dest(frame)
|
self.renderer.set_paint_dest(frame)
|
||||||
answer=self.renderer.render_lines(main_text, footer_text)
|
answer=self.renderer.render_lines(main_text, footer_text)
|
||||||
|
#sys.settrace()
|
||||||
return frame
|
return frame
|
||||||
|
|
||||||
def calculate_default(self, screen):
|
def calculate_default(self, screen):
|
||||||
|
@ -44,7 +44,6 @@ class ServiceItem():
|
|||||||
self.items = []
|
self.items = []
|
||||||
self.iconic_representation = None
|
self.iconic_representation = None
|
||||||
self.raw_slides = None
|
self.raw_slides = None
|
||||||
self.format_slides = []
|
|
||||||
self.frames = []
|
self.frames = []
|
||||||
self.raw_footer = None
|
self.raw_footer = None
|
||||||
self.theme = None
|
self.theme = None
|
||||||
@ -74,11 +73,11 @@ class ServiceItem():
|
|||||||
else:
|
else:
|
||||||
self.render_manager.set_override_theme(self.theme)
|
self.render_manager.set_override_theme(self.theme)
|
||||||
log.debug(u'Formatting slides')
|
log.debug(u'Formatting slides')
|
||||||
for slide in self.raw_slides:
|
if len(self.frames) == 0 :
|
||||||
self.format_slides.append(self.render_manager.format_slide(slide, False))
|
for slide in self.raw_slides:
|
||||||
log.debug(u'Rendering slides')
|
formated = self.render_manager.format_slide(slide, False)
|
||||||
for slide in self.format_slides:
|
frame = self.render_manager.generate_slide(formated, self.raw_footer)
|
||||||
self.frames.append(self.render_manager.generate_slide(slide, self.raw_footer))
|
self.frames.append({u'formatted': formated, u'image': frame})
|
||||||
|
|
||||||
|
|
||||||
def get_parent_node(self):
|
def get_parent_node(self):
|
||||||
|
@ -92,6 +92,7 @@ class MainWindow(object):
|
|||||||
self.ThemeManagerContents.eventManager = self.EventManager
|
self.ThemeManagerContents.eventManager = self.EventManager
|
||||||
self.ThemeManagerContents.renderManager = self.RenderManager
|
self.ThemeManagerContents.renderManager = self.RenderManager
|
||||||
self.ServiceManagerContents.renderManager = self.RenderManager
|
self.ServiceManagerContents.renderManager = self.RenderManager
|
||||||
|
self.ServiceManagerContents.eventManager = self.EventManager
|
||||||
self.ThemeManagerContents.serviceManager = self.ServiceManagerContents
|
self.ThemeManagerContents.serviceManager = self.ServiceManagerContents
|
||||||
self.ThemeManagerContents.loadThemes()
|
self.ThemeManagerContents.loadThemes()
|
||||||
|
|
||||||
|
@ -18,101 +18,97 @@ 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 os
|
||||||
|
import logging
|
||||||
|
|
||||||
from time import sleep
|
from time import sleep
|
||||||
from copy import deepcopy
|
from copy import deepcopy
|
||||||
|
|
||||||
from PyQt4.QtCore import *
|
from PyQt4 import QtCore, QtGui
|
||||||
from PyQt4.QtGui import *
|
|
||||||
|
|
||||||
# from openlp.core.resources import *
|
|
||||||
# from openlp.core.ui import AboutForm, AlertForm, SettingsForm, SlideController
|
|
||||||
from openlp.core.lib import OpenLPToolbar
|
from openlp.core.lib import OpenLPToolbar
|
||||||
from openlp.core.lib import ServiceItem
|
from openlp.core.lib import ServiceItem
|
||||||
from openlp.core.lib import RenderManager
|
from openlp.core.lib import RenderManager
|
||||||
from openlp.core import translate
|
from openlp.core import translate
|
||||||
|
from openlp.core.lib import Event, EventType, EventManager
|
||||||
|
|
||||||
# from openlp.core import PluginManager
|
#class ServiceData(QtCore.QAbstractItemModel):
|
||||||
import logging
|
# """
|
||||||
|
# Tree of items for an order of service.
|
||||||
class ServiceData(QAbstractItemModel):
|
# Includes methods for reading and writing the contents to an OOS file
|
||||||
"""
|
# Root contains a list of ServiceItems
|
||||||
Tree of items for an order of service.
|
# """
|
||||||
Includes methods for reading and writing the contents to an OOS file
|
# global log
|
||||||
Root contains a list of ServiceItems
|
# log=logging.getLogger(u'ServiceData')
|
||||||
"""
|
# def __init__(self):
|
||||||
global log
|
# QtCore.QAbstractItemModel.__init__(self)
|
||||||
log=logging.getLogger(u'ServiceData')
|
# self.items=[]
|
||||||
def __init__(self):
|
# log.info("Starting")
|
||||||
QAbstractItemModel.__init__(self)
|
#
|
||||||
self.items=[]
|
# def clearItems(self):
|
||||||
log.info("Starting")
|
# self.items = []
|
||||||
|
#
|
||||||
def clearItems(self):
|
# def columnCount(self, parent=None):
|
||||||
self.items = []
|
# return 1; # always only a single column (for now)
|
||||||
|
#
|
||||||
def columnCount(self, parent):
|
# def rowCount(self, parent=None):
|
||||||
return 1; # always only a single column (for now)
|
# return len(self.items)
|
||||||
|
#
|
||||||
def rowCount(self, parent):
|
# def insertRow(self, row, service_item):
|
||||||
return len(self.items)
|
# self.beginInsertRows(QtCore.QModelIndex(),row,row)
|
||||||
|
# log.info("insert row %s:%s" % (row,service_item))
|
||||||
def insertRow(self, row, service_item):
|
# self.items.insert(row, service_item)
|
||||||
self.beginInsertRows(QModelIndex(),row,row)
|
# log.info("Items: %s" % self.items)
|
||||||
log.info("insert row %s:%s" % (row,service_item))
|
# self.endInsertRows()
|
||||||
self.items.insert(row, service_item)
|
#
|
||||||
log.info("Items: %s" % self.items)
|
# def removeRow(self, row):
|
||||||
self.endInsertRows()
|
# self.beginRemoveRows(QtCore.QModelIndex(), row,row)
|
||||||
|
# self.items.pop(row)
|
||||||
def removeRow(self, row):
|
# self.endRemoveRows()
|
||||||
self.beginRemoveRows(QModelIndex(), row,row)
|
#
|
||||||
self.items.pop(row)
|
# def addRow(self, service_item):
|
||||||
self.endRemoveRows()
|
# self.insertRow(len(self.items), service_item)
|
||||||
|
#
|
||||||
def addRow(self, item):
|
# def index(self, row, col, parent = QtCore.QModelIndex()):
|
||||||
self.insertRow(len(self.items), item)
|
# return self.createIndex(row,col)
|
||||||
|
#
|
||||||
def index(self, row, col, parent = QModelIndex()):
|
# def parent(self, index=QtCore.QModelIndex()):
|
||||||
return self.createIndex(row,col)
|
# return QtCore.QModelIndex() # no children as yet
|
||||||
|
#
|
||||||
def parent(self, index=QModelIndex()):
|
# def data(self, index, role):
|
||||||
return QModelIndex() # no children as yet
|
# """
|
||||||
|
# Called by the service manager to draw us in the service window
|
||||||
def data(self, index, role):
|
# """
|
||||||
"""
|
# log.debug(u'data %s %d', index, role)
|
||||||
Called by the service manager to draw us in the service window
|
# row = index.row()
|
||||||
"""
|
# if row > len(self.items): # if the last row is selected and deleted, we then get called with an empty row!
|
||||||
log.debug(u'data %s %d', index, role)
|
# return QtCore.QVariant()
|
||||||
row=index.row()
|
# item = self.items[row]
|
||||||
if row > len(self.items): # if the last row is selected and deleted, we then get called with an empty row!
|
# if role == QtCore.Qt.DisplayRole:
|
||||||
return QVariant()
|
# retval= item.title + u':' + item.shortname
|
||||||
item=self.items[row]
|
# elif role == QtCore.Qt.DecorationRole:
|
||||||
if role==Qt.DisplayRole:
|
# retval = item.iconic_representation
|
||||||
retval= item.title + u':' + item.shortname
|
# elif role == QtCore.Qt.ToolTipRole:
|
||||||
elif role == Qt.DecorationRole:
|
# retval = None
|
||||||
retval = item.iconic_representation
|
# else:
|
||||||
elif role == Qt.ToolTipRole:
|
# retval = None
|
||||||
retval= None
|
# if retval == None:
|
||||||
else:
|
# retval = QtCore.QVariant()
|
||||||
retval= None
|
## log.info("Returning"+ str(retval))
|
||||||
if retval == None:
|
# if type(retval) is not type(QtCore.QVariant):
|
||||||
retval=QVariant()
|
# return QtCore.QVariant(retval)
|
||||||
# log.info("Returning"+ str(retval))
|
# else:
|
||||||
if type(retval) is not type(QVariant):
|
# return retval
|
||||||
return QVariant(retval)
|
#
|
||||||
else:
|
# def __iter__(self):
|
||||||
return retval
|
# for i in self.items:
|
||||||
|
# yield i
|
||||||
def __iter__(self):
|
#
|
||||||
for i in self.items:
|
# def item(self, row):
|
||||||
yield i
|
# log.info("Get Item:%d -> %s" %(row, str(self.items)))
|
||||||
|
# return self.items[row]
|
||||||
def item(self, row):
|
|
||||||
log.info("Get Item:%d -> %s" %(row, str(self.items)))
|
|
||||||
return self.items[row]
|
|
||||||
|
|
||||||
|
|
||||||
class ServiceManager(QWidget):
|
class ServiceManager(QtGui.QWidget):
|
||||||
|
|
||||||
"""Manages the orders of service. Currently this involves taking
|
"""Manages the orders of service. Currently this involves taking
|
||||||
text strings from plugins and adding them to an OOS file. In
|
text strings from plugins and adding them to an OOS file. In
|
||||||
@ -124,48 +120,52 @@ class ServiceManager(QWidget):
|
|||||||
log=logging.getLogger(u'ServiceManager')
|
log=logging.getLogger(u'ServiceManager')
|
||||||
|
|
||||||
def __init__(self, parent):
|
def __init__(self, parent):
|
||||||
QWidget.__init__(self)
|
QtGui.QWidget.__init__(self)
|
||||||
self.parent=parent
|
self.parent=parent
|
||||||
self.Layout = QVBoxLayout(self)
|
self.Layout = QtGui.QVBoxLayout(self)
|
||||||
self.Layout.setSpacing(0)
|
self.Layout.setSpacing(0)
|
||||||
self.Layout.setMargin(0)
|
self.Layout.setMargin(0)
|
||||||
self.Toolbar = OpenLPToolbar(self)
|
self.Toolbar = OpenLPToolbar(self)
|
||||||
self.Toolbar.addToolbarButton("Move to top", ":/services/service_top.png",
|
self.Toolbar.addToolbarButton(u'Move to top', u':/services/service_top.png',
|
||||||
translate(u'ServiceManager', u'Move to start'), self.onServiceTop)
|
translate(u'ServiceManager', u'Move to top'), self.onServiceTop)
|
||||||
self.Toolbar.addToolbarButton("Move up", ":/services/service_up.png",
|
self.Toolbar.addToolbarButton(u'Move up', u':/services/service_up.png',
|
||||||
translate(u'ServiceManager', u'Move up order'), self.onServiceUp)
|
translate(u'ServiceManager', u'Move up order'), self.onServiceUp)
|
||||||
self.Toolbar.addToolbarButton("Move down", ":/services/service_down.png",
|
self.Toolbar.addToolbarButton(u'Move down', u':/services/service_down.png',
|
||||||
translate(u'ServiceManager', u'Move down order'), self.onServiceDown)
|
translate(u'ServiceManager', u'Move down order'), self.onServiceDown)
|
||||||
self.Toolbar.addToolbarButton("Move to bottom", ":/services/service_bottom.png",
|
self.Toolbar.addToolbarButton(u'Move to bottom', u':/services/service_bottom.png',
|
||||||
translate(u'ServiceManager', u'Move to end'), self.onServiceEnd)
|
translate(u'ServiceManager', u'Move to end'), self.onServiceEnd)
|
||||||
self.Toolbar.addSeparator()
|
self.Toolbar.addSeparator()
|
||||||
self.Toolbar.addToolbarButton("New Service", ":/services/service_new.png",
|
self.Toolbar.addToolbarButton(u'New Service', u':/services/service_new.png',
|
||||||
translate(u'ServiceManager', u'Create a new Service'), self.onNewService)
|
translate(u'ServiceManager', u'Create a new Service'), self.onNewService)
|
||||||
self.Toolbar.addToolbarButton("Delete From Service", ":/services/service_delete.png",
|
self.Toolbar.addToolbarButton(u'Delete From Service', u':/services/service_delete.png',
|
||||||
translate(u'ServiceManager', u'Delete From Service'), self.onDeleteFromService)
|
translate(u'ServiceManager', u'Delete From Service'), self.onDeleteFromService)
|
||||||
self.Toolbar.addSeparator()
|
self.Toolbar.addSeparator()
|
||||||
self.Toolbar.addToolbarButton("Save Service", ":/services/service_save.png",
|
self.Toolbar.addToolbarButton(u'Save Service', u':/services/service_save.png',
|
||||||
translate(u'ServiceManager', u'Save Service'), self.onSaveService)
|
translate(u'ServiceManager', u'Save Service'), self.onSaveService)
|
||||||
self.Toolbar.addToolbarButton("Load Service", ":/services/service_open.png",
|
self.Toolbar.addToolbarButton(u'Load Service', u':/services/service_open.png',
|
||||||
translate(u'ServiceManager', u'Load Existing'), self.onLoadService)
|
translate(u'ServiceManager', u'Load Existing'), self.onLoadService)
|
||||||
|
|
||||||
self.Toolbar.addSeparator()
|
self.Toolbar.addSeparator()
|
||||||
self.ThemeComboBox = QComboBox(self.Toolbar)
|
self.ThemeComboBox = QtGui.QComboBox(self.Toolbar)
|
||||||
self.ThemeComboBox.setSizeAdjustPolicy(QComboBox.AdjustToContents)
|
self.ThemeComboBox.setSizeAdjustPolicy(QtGui.QComboBox.AdjustToContents)
|
||||||
self.ThemeWidget = QWidgetAction(self.Toolbar)
|
self.ThemeWidget = QtGui.QWidgetAction(self.Toolbar)
|
||||||
self.ThemeWidget.setDefaultWidget(self.ThemeComboBox)
|
self.ThemeWidget.setDefaultWidget(self.ThemeComboBox)
|
||||||
self.Toolbar.addAction(self.ThemeWidget)
|
self.Toolbar.addAction(self.ThemeWidget)
|
||||||
|
|
||||||
self.Layout.addWidget(self.Toolbar)
|
self.Layout.addWidget(self.Toolbar)
|
||||||
|
|
||||||
self.TreeView = QTreeView(self)
|
self.serviceManagerList = QtGui.QTreeWidget(self)
|
||||||
self.service_data=ServiceData()
|
self.serviceManagerList.setEditTriggers(QtGui.QAbstractItemView.CurrentChanged|QtGui.QAbstractItemView.DoubleClicked|QtGui.QAbstractItemView.EditKeyPressed)
|
||||||
self.TreeView.setModel(self.service_data)
|
self.serviceManagerList.setDragDropMode(QtGui.QAbstractItemView.DragDrop)
|
||||||
self.TreeView.setAlternatingRowColors(True)
|
self.serviceManagerList.setAlternatingRowColors(True)
|
||||||
self.Layout.addWidget(self.TreeView)
|
self.serviceManagerList.setObjectName("serviceManagerList")
|
||||||
|
self.serviceManagerList .__class__.dragEnterEvent=self.dragEnterEvent
|
||||||
|
self.serviceManagerList .__class__.dragMoveEvent=self.dragEnterEvent
|
||||||
|
self.serviceManagerList .__class__.dropEvent =self.dropEvent
|
||||||
|
|
||||||
QObject.connect(self.ThemeComboBox,
|
self.Layout.addWidget(self.serviceManagerList)
|
||||||
SIGNAL("activated(int)"), self.onThemeComboBoxSelected)
|
|
||||||
|
QtCore.QObject.connect(self.ThemeComboBox,
|
||||||
|
QtCore.SIGNAL("activated(int)"), self.onThemeComboBoxSelected)
|
||||||
|
|
||||||
def onServiceTop(self):
|
def onServiceTop(self):
|
||||||
pass
|
pass
|
||||||
@ -191,40 +191,36 @@ class ServiceManager(QWidget):
|
|||||||
def onLoadService(self):
|
def onLoadService(self):
|
||||||
Pass
|
Pass
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
def onThemeComboBoxSelected(self, currentIndex):
|
def onThemeComboBoxSelected(self, currentIndex):
|
||||||
self.renderManager.default_theme = self.ThemeComboBox.currentText()
|
self.renderManager.default_theme = self.ThemeComboBox.currentText()
|
||||||
|
|
||||||
def addServiceItem(self, item):
|
def addServiceItem(self, item):
|
||||||
"""Adds service item"""
|
treewidgetitem = QtGui.QTreeWidgetItem(self.serviceManagerList)
|
||||||
log.info("addServiceItem")
|
treewidgetitem.setText(0,item.title + u':' + item.shortname)
|
||||||
indexes=self.TreeView.selectedIndexes()
|
treewidgetitem.setIcon(0,item.iconic_representation)
|
||||||
assert len(indexes) <= 1 # can only have one selected index in this view
|
treewidgetitem.setExpanded(True)
|
||||||
if indexes == []:
|
item.render()
|
||||||
log.info("No row")
|
for frame in item.frames:
|
||||||
row = None
|
treewidgetitem1 = QtGui.QTreeWidgetItem(treewidgetitem)
|
||||||
selected_item = None
|
text = frame[u'formatted'][0]
|
||||||
else:
|
treewidgetitem1.setText(0,text[:10])
|
||||||
row=indexes[0].row()
|
#treewidgetitem1.setIcon(0,frame[u'image'])
|
||||||
# if currently selected is of correct type, add it to it
|
|
||||||
log.info("row:%d"%row)
|
|
||||||
selected_item=self.service_data.item(row)
|
|
||||||
|
|
||||||
if type(selected_item) == type(item):
|
def dragEnterEvent(self, event):
|
||||||
log.info("Add to existing item")
|
"""
|
||||||
selected_item.add(item)
|
Accept Drag events
|
||||||
else:
|
"""
|
||||||
log.info("Create new item")
|
event.accept()
|
||||||
if row is None:
|
|
||||||
self.service_data.addRow(item)
|
|
||||||
else:
|
|
||||||
self.service_data.insertRow(row+1, item)
|
|
||||||
|
|
||||||
def removeServiceItem(self):
|
def dropEvent(self, event):
|
||||||
"""Remove currently selected item"""
|
"""
|
||||||
pass
|
Handle the release of the event and trigger the plugin
|
||||||
|
to add the data
|
||||||
|
"""
|
||||||
|
link=event.mimeData()
|
||||||
|
if link.hasText():
|
||||||
|
plugin = event.mimeData().text()
|
||||||
|
self.eventManager.post_event(Event(EventType.LoadServiceItem, plugin))
|
||||||
|
|
||||||
def oos_as_text(self):
|
def oos_as_text(self):
|
||||||
text=[]
|
text=[]
|
||||||
@ -247,6 +243,9 @@ class ServiceManager(QWidget):
|
|||||||
oosfile.close()
|
oosfile.close()
|
||||||
|
|
||||||
def updateThemeList(self, theme_list):
|
def updateThemeList(self, theme_list):
|
||||||
|
"""
|
||||||
|
Called from ThemeManager when the Themes have changed
|
||||||
|
"""
|
||||||
self.ThemeComboBox.clear()
|
self.ThemeComboBox.clear()
|
||||||
for theme in theme_list:
|
for theme in theme_list:
|
||||||
self.ThemeComboBox.addItem(theme)
|
self.ThemeComboBox.addItem(theme)
|
||||||
|
@ -20,13 +20,12 @@ Place, Suite 330, Boston, MA 02111-1307 USA
|
|||||||
import logging
|
import logging
|
||||||
import os
|
import os
|
||||||
|
|
||||||
from PyQt4.QtCore import *
|
from PyQt4 import QtCore, QtGui
|
||||||
from PyQt4.QtGui import *
|
|
||||||
|
|
||||||
from openlp.core.lib import OpenLPToolbar
|
from openlp.core.lib import OpenLPToolbar
|
||||||
from openlp.core import translate
|
from openlp.core import translate
|
||||||
|
|
||||||
class SlideData(QAbstractListModel):
|
class SlideData(QtCore.QAbstractListModel):
|
||||||
"""
|
"""
|
||||||
Tree of items for an order of Theme.
|
Tree of items for an order of Theme.
|
||||||
Includes methods for reading and writing the contents to an OOS file
|
Includes methods for reading and writing the contents to an OOS file
|
||||||
@ -36,13 +35,13 @@ class SlideData(QAbstractListModel):
|
|||||||
log=logging.getLogger(u'SlideData')
|
log=logging.getLogger(u'SlideData')
|
||||||
|
|
||||||
def __init__(self):
|
def __init__(self):
|
||||||
QAbstractListModel.__init__(self)
|
QtCore.QAbstractListModel.__init__(self)
|
||||||
self.items=[]
|
self.items=[]
|
||||||
self.rowheight=50
|
self.rowheight=50
|
||||||
self.maximagewidth=self.rowheight*16/9.0;
|
self.maximagewidth=self.rowheight*16/9.0;
|
||||||
log.info(u'Starting')
|
log.info(u'Starting')
|
||||||
|
|
||||||
def clearItems(self):
|
def clear(self):
|
||||||
self.items=[]
|
self.items=[]
|
||||||
|
|
||||||
def columnCount(self, parent):
|
def columnCount(self, parent):
|
||||||
@ -51,36 +50,36 @@ class SlideData(QAbstractListModel):
|
|||||||
def rowCount(self, parent=None):
|
def rowCount(self, parent=None):
|
||||||
return len(self.items)
|
return len(self.items)
|
||||||
|
|
||||||
def insertRow(self, row, frame):
|
def insertRow(self, row, frame, framenumber):
|
||||||
self.beginInsertRows(QModelIndex(),row,row)
|
self.beginInsertRows(QtCore.QModelIndex(),row,row)
|
||||||
log.info(u'insert row %d' % row)
|
log.info(u'insert row %d' % row)
|
||||||
# create a preview image
|
# create a preview image
|
||||||
frame1 = frame.scaled(QSize(350,260))
|
frame1 = frame.scaled(QtCore.QSize(350,260), QtCore.Qt.KeepAspectRatio, QtCore.Qt.SmoothTransformation)
|
||||||
self.items.insert(row,(frame1))
|
self.items.insert(row,(frame1, framenumber))
|
||||||
log.info(u'Items: %s' % self.items)
|
log.info(u'Items: %s' % self.items)
|
||||||
self.endInsertRows()
|
self.endInsertRows()
|
||||||
|
|
||||||
def removeRow(self, row):
|
def removeRow(self, row):
|
||||||
self.beginRemoveRows(QModelIndex(), row,row)
|
self.beginRemoveRows(QtCore.QModelIndex(), row,row)
|
||||||
self.items.pop(row)
|
self.items.pop(row)
|
||||||
self.endRemoveRows()
|
self.endRemoveRows()
|
||||||
|
|
||||||
def addRow(self, frame):
|
def addRow(self, frame, framenumber):
|
||||||
self.insertRow(len(self.items), frame)
|
self.insertRow(len(self.items), frame, framenumber)
|
||||||
|
|
||||||
def data(self, index, role):
|
def data(self, index, role):
|
||||||
row=index.row()
|
row=index.row()
|
||||||
if row > len(self.items): # if the last row is selected and deleted, we then get called with an empty row!
|
if row > len(self.items): # if the last row is selected and deleted, we then get called with an empty row!
|
||||||
return QVariant()
|
return QtCore.QVariant()
|
||||||
# if role==Qt.DisplayRole:
|
# if role==Qt.DisplayRole:
|
||||||
# retval= self.items[row][1]
|
# retval= self.items[row][1]
|
||||||
if role == Qt.DecorationRole:
|
if role == QtCore.Qt.DecorationRole:
|
||||||
retval= self.items[row]#[0]
|
retval= self.items[row][0]
|
||||||
else:
|
else:
|
||||||
retval= QVariant()
|
retval= QtCore.QVariant()
|
||||||
# log.info("Returning"+ str(retval))
|
# log.info("Returning"+ str(retval))
|
||||||
if type(retval) is not type(QVariant):
|
if type(retval) is not type(QtCore.QVariant):
|
||||||
return QVariant(retval)
|
return QtCore.QVariant(retval)
|
||||||
else:
|
else:
|
||||||
return retval
|
return retval
|
||||||
|
|
||||||
@ -101,75 +100,84 @@ class SlideData(QAbstractListModel):
|
|||||||
return filelist
|
return filelist
|
||||||
|
|
||||||
|
|
||||||
class SlideController(QWidget):
|
class SlideController(QtGui.QWidget):
|
||||||
global log
|
global log
|
||||||
log=logging.getLogger(u'SlideController')
|
log=logging.getLogger(u'SlideController')
|
||||||
|
|
||||||
def __init__(self, control_splitter, isLive):
|
def __init__(self, control_splitter, isLive):
|
||||||
QWidget.__init__(self)
|
QtGui.QWidget.__init__(self)
|
||||||
self.isLive = isLive
|
self.isLive = isLive
|
||||||
self.Panel = QWidget(control_splitter)
|
self.Panel = QtGui.QWidget(control_splitter)
|
||||||
self.Splitter = QSplitter(self.Panel)
|
self.Splitter = QtGui.QSplitter(self.Panel)
|
||||||
self.Splitter.setOrientation(Qt.Vertical)
|
self.Splitter.setOrientation(QtCore.Qt.Vertical)
|
||||||
|
|
||||||
self.PanelLayout = QVBoxLayout(self.Panel)
|
self.PanelLayout = QtGui.QVBoxLayout(self.Panel)
|
||||||
self.PanelLayout.addWidget(self.Splitter)
|
self.PanelLayout.addWidget(self.Splitter)
|
||||||
self.PanelLayout.setSpacing(50)
|
self.PanelLayout.setSpacing(50)
|
||||||
self.PanelLayout.setMargin(0)
|
self.PanelLayout.setMargin(0)
|
||||||
|
|
||||||
self.Controller = QScrollArea(self.Splitter)
|
self.Controller = QtGui.QScrollArea(self.Splitter)
|
||||||
self.Controller.setWidgetResizable(True)
|
self.Controller.setWidgetResizable(True)
|
||||||
|
|
||||||
self.PreviewListView = QListView(self.Splitter)
|
self.PreviewListView = QtGui.QListView(self.Splitter)
|
||||||
|
self.PreviewListView.setEditTriggers(QtGui.QAbstractItemView.CurrentChanged)
|
||||||
self.PreviewListView.setAlternatingRowColors(True)
|
self.PreviewListView.setAlternatingRowColors(True)
|
||||||
self.PreviewListData = SlideData()
|
self.PreviewListData = SlideData()
|
||||||
self.PreviewListView.setModel(self.PreviewListData)
|
self.PreviewListView.setModel(self.PreviewListData)
|
||||||
|
self.PreviewListView.setSelectionRectVisible(True)
|
||||||
|
|
||||||
self.Controller.setGeometry(QRect(0, 0, 828, 536))
|
self.Controller.setGeometry(QtCore.QRect(0, 0, 828, 536))
|
||||||
self.Controller.setWidget(self.PreviewListView)
|
self.Controller.setWidget(self.PreviewListView)
|
||||||
|
|
||||||
self.Toolbar = OpenLPToolbar(self.Splitter)
|
self.Toolbar = OpenLPToolbar(self.Splitter)
|
||||||
sizeToolbarPolicy = QSizePolicy(QSizePolicy.Fixed, QSizePolicy.Fixed)
|
sizeToolbarPolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Fixed, QtGui.QSizePolicy.Fixed)
|
||||||
sizeToolbarPolicy.setHorizontalStretch(0)
|
sizeToolbarPolicy.setHorizontalStretch(0)
|
||||||
sizeToolbarPolicy.setVerticalStretch(0)
|
sizeToolbarPolicy.setVerticalStretch(0)
|
||||||
sizeToolbarPolicy.setHeightForWidth(self.Toolbar.sizePolicy().hasHeightForWidth())
|
sizeToolbarPolicy.setHeightForWidth(self.Toolbar.sizePolicy().hasHeightForWidth())
|
||||||
|
|
||||||
if self.isLive:
|
if self.isLive:
|
||||||
self.Toolbar.addToolbarButton("First Slide", ":/slides/slide_first.png",
|
self.Toolbar.addToolbarButton(u'First Slide', u':/slides/slide_first.png',
|
||||||
translate(u'SlideController', u'Move to first'), self.onSlideSelectedFirst)
|
translate(u'SlideController', u'Move to first'), self.onSlideSelectedFirst)
|
||||||
self.Toolbar.addToolbarButton("Last Slide", ":/slides/slide_previous.png",
|
self.Toolbar.addToolbarButton(u'Last Slide', u':/slides/slide_previous.png',
|
||||||
translate(u'SlideController', u'Move to previous'), self.onSlideSelectedPrevious)
|
translate(u'SlideController', u'Move to previous'), self.onSlideSelectedPrevious)
|
||||||
self.Toolbar.addToolbarButton("First Slide", ":/slides/slide_next.png",
|
self.Toolbar.addToolbarButton(u'First Slide', u':/slides/slide_next.png',
|
||||||
translate(u'SlideController', u'Move to next'), self.onSlideSelectedNext)
|
translate(u'SlideController', u'Move to next'), self.onSlideSelectedNext)
|
||||||
if self.isLive:
|
if self.isLive:
|
||||||
self.Toolbar.addToolbarButton("Last Slide", ":/slides/slide_last.png",
|
self.Toolbar.addToolbarButton(u'Last Slide', u':/slides/slide_last.png',
|
||||||
translate(u'SlideController', u'Move to last'), self.onSlideSelectedLast)
|
translate(u'SlideController', u'Move to last'), self.onSlideSelectedLast)
|
||||||
self.Toolbar.addSeparator()
|
self.Toolbar.addSeparator()
|
||||||
self.Toolbar.addToolbarButton("Close Sscreen", ":/slides/slide_close.png",
|
self.Toolbar.addToolbarButton(u'Close Screen', u':/slides/slide_close.png',
|
||||||
translate(u'SlideController', u'Close Screen'), self.onBlankScreen)
|
translate(u'SlideController', u'Close Screen'), self.onBlankScreen)
|
||||||
|
|
||||||
self.Toolbar.setSizePolicy(sizeToolbarPolicy)
|
self.Toolbar.setSizePolicy(sizeToolbarPolicy)
|
||||||
|
|
||||||
self.SlidePreview = QLabel(self.Splitter)
|
self.SlidePreview = QtGui.QLabel(self.Splitter)
|
||||||
sizePolicy = QSizePolicy(QSizePolicy.Fixed, QSizePolicy.Fixed)
|
sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Fixed, QtGui.QSizePolicy.Fixed)
|
||||||
sizePolicy.setHorizontalStretch(0)
|
sizePolicy.setHorizontalStretch(0)
|
||||||
sizePolicy.setVerticalStretch(0)
|
sizePolicy.setVerticalStretch(0)
|
||||||
sizePolicy.setHeightForWidth(self.SlidePreview.sizePolicy().hasHeightForWidth())
|
sizePolicy.setHeightForWidth(self.SlidePreview.sizePolicy().hasHeightForWidth())
|
||||||
self.SlidePreview.setSizePolicy(sizePolicy)
|
self.SlidePreview.setSizePolicy(sizePolicy)
|
||||||
self.SlidePreview.setMinimumSize(QSize(250, 190))
|
self.SlidePreview.setMinimumSize(QtCore.QSize(250, 190))
|
||||||
self.SlidePreview.setFrameShape(QFrame.WinPanel)
|
self.SlidePreview.setFrameShape(QtGui.QFrame.WinPanel)
|
||||||
self.SlidePreview.setFrameShadow(QFrame.Sunken)
|
self.SlidePreview.setFrameShadow(QtGui.QFrame.Sunken)
|
||||||
self.SlidePreview.setLineWidth(1)
|
self.SlidePreview.setLineWidth(1)
|
||||||
self.SlidePreview.setScaledContents(True)
|
self.SlidePreview.setScaledContents(True)
|
||||||
self.SlidePreview.setObjectName("SlidePreview")
|
self.SlidePreview.setObjectName(u'SlidePreview')
|
||||||
|
|
||||||
QObject.connect(self.PreviewListView,
|
QtCore.QObject.connect(self.PreviewListView,
|
||||||
SIGNAL("clicked(QModelIndex)"), self.onSlideSelected)
|
QtCore.SIGNAL(u'clicked(QModelIndex)'), self.onSlideSelected)
|
||||||
|
QtCore.QObject.connect(self.PreviewListView,
|
||||||
|
QtCore.SIGNAL(u'clicked(QListViewItem)'), self.onCurrentItemChanged)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
def onCurrentItemChanged(self, current, previous):
|
||||||
|
print u'Method slideControllerList currentItemChanged called', current, previous
|
||||||
|
|
||||||
def onSlideSelectedFirst(self):
|
def onSlideSelectedFirst(self):
|
||||||
row = self.PreviewListData.createIndex(0, 0)
|
row = self.PreviewListData.createIndex(0, 0)
|
||||||
if row.isValid():
|
if row.isValid():
|
||||||
self.PreviewListView.selectionModel().setCurrentIndex(row, QItemSelectionModel.SelectCurrent)
|
self.PreviewListView.selectionModel().setCurrentIndex(row, QtGui.QItemSelectionModel.SelectCurrent)
|
||||||
self.onSlideSelected(row)
|
self.onSlideSelected(row)
|
||||||
|
|
||||||
def onSlideSelectedNext(self):
|
def onSlideSelectedNext(self):
|
||||||
@ -182,10 +190,9 @@ class SlideController(QWidget):
|
|||||||
rowNumber = index.row() + 1
|
rowNumber = index.row() + 1
|
||||||
row = self.PreviewListData.createIndex(rowNumber , 0)
|
row = self.PreviewListData.createIndex(rowNumber , 0)
|
||||||
if row.isValid():
|
if row.isValid():
|
||||||
self.PreviewListView.selectionModel().setCurrentIndex(row, QItemSelectionModel.SelectCurrent)
|
self.PreviewListView.selectionModel().setCurrentIndex(row, QtGui.QItemSelectionModel.SelectCurrent)
|
||||||
self.onSlideSelected(row)
|
self.onSlideSelected(row)
|
||||||
|
|
||||||
|
|
||||||
def onSlideSelectedPrevious(self):
|
def onSlideSelectedPrevious(self):
|
||||||
indexes = self.PreviewListView.selectedIndexes()
|
indexes = self.PreviewListView.selectedIndexes()
|
||||||
rowNumber = 0
|
rowNumber = 0
|
||||||
@ -196,13 +203,13 @@ class SlideController(QWidget):
|
|||||||
rowNumber = index.row() - 1
|
rowNumber = index.row() - 1
|
||||||
row = self.PreviewListData.createIndex(rowNumber , 0)
|
row = self.PreviewListData.createIndex(rowNumber , 0)
|
||||||
if row.isValid():
|
if row.isValid():
|
||||||
self.PreviewListView.selectionModel().setCurrentIndex(row, QItemSelectionModel.SelectCurrent)
|
self.PreviewListView.selectionModel().setCurrentIndex(row, QtGui.QItemSelectionModel.SelectCurrent)
|
||||||
self.onSlideSelected(row)
|
self.onSlideSelected(row)
|
||||||
|
|
||||||
def onSlideSelectedLast(self):
|
def onSlideSelectedLast(self):
|
||||||
row = self.PreviewListData.createIndex(self.PreviewListData.rowCount() - 1 , 0)
|
row = self.PreviewListData.createIndex(self.PreviewListData.rowCount() - 1 , 0)
|
||||||
if row.isValid():
|
if row.isValid():
|
||||||
self.PreviewListView.selectionModel().setCurrentIndex(row, QItemSelectionModel.SelectCurrent)
|
self.PreviewListView.selectionModel().setCurrentIndex(row, QtGui.QItemSelectionModel.SelectCurrent)
|
||||||
self.onSlideSelected(row)
|
self.onSlideSelected(row)
|
||||||
|
|
||||||
def onBlankScreen(self):
|
def onBlankScreen(self):
|
||||||
@ -213,21 +220,25 @@ class SlideController(QWidget):
|
|||||||
self.previewFrame(frame)
|
self.previewFrame(frame)
|
||||||
|
|
||||||
def previewFrame(self, frame):
|
def previewFrame(self, frame):
|
||||||
self.SlidePreview.setPixmap(frame)
|
self.SlidePreview.setPixmap(frame[0])
|
||||||
if self.isLive:
|
if self.isLive:
|
||||||
self.mainDisplay.frameView(frame)
|
no = frame[1]
|
||||||
|
LiveFrame = self.serviceitem.frames[no][u'image']
|
||||||
|
self.mainDisplay.frameView(LiveFrame)
|
||||||
|
|
||||||
def addServiceItem(self, serviceitem):
|
def addServiceItem(self, serviceitem):
|
||||||
log.debug(u'addServiceItem')
|
log.debug(u'addServiceItem')
|
||||||
self.serviceitem = serviceitem
|
self.serviceitem = serviceitem
|
||||||
self.serviceitem.render()
|
self.serviceitem.render()
|
||||||
self.PreviewListData.clearItems()
|
self.PreviewListData.clear()
|
||||||
|
framenumber = 0
|
||||||
for frame in self.serviceitem.frames:
|
for frame in self.serviceitem.frames:
|
||||||
self.PreviewListData.addRow(frame)
|
self.PreviewListData.addRow(frame[u'image'], framenumber)
|
||||||
|
framenumber += 1
|
||||||
|
|
||||||
row = self.PreviewListData.createIndex(0, 0)
|
row = self.PreviewListData.createIndex(0, 0)
|
||||||
if row.isValid():
|
if row.isValid():
|
||||||
self.PreviewListView.selectionModel().setCurrentIndex(row, QItemSelectionModel.SelectCurrent)
|
self.PreviewListView.selectionModel().setCurrentIndex(row, QtGui.QItemSelectionModel.SelectCurrent)
|
||||||
self.onSlideSelected(row)
|
self.onSlideSelected(row)
|
||||||
|
|
||||||
def render(self):
|
def render(self):
|
||||||
|
@ -25,7 +25,7 @@ from PyQt4.QtGui import *
|
|||||||
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.core.ui import ServiceManager
|
from openlp.core.ui import ServiceManager
|
||||||
from openlp.plugins.images import ImageServiceItem
|
from openlp.plugins.images.lib import ImageServiceItem
|
||||||
|
|
||||||
import logging
|
import logging
|
||||||
logging.basicConfig(filename="test_service_manager.log",level=logging.INFO, filemode="w")
|
logging.basicConfig(filename="test_service_manager.log",level=logging.INFO, filemode="w")
|
||||||
|
@ -72,7 +72,7 @@ class ThemeData(QAbstractListModel):
|
|||||||
preview = QPixmap(str(filename))
|
preview = QPixmap(str(filename))
|
||||||
width = self.maximagewidth
|
width = self.maximagewidth
|
||||||
height = self.rowheight
|
height = self.rowheight
|
||||||
preview = preview.scaled(width, height, Qt.KeepAspectRatio)
|
preview = preview.scaled(width, height, Qt.KeepAspectRatio, Qt.SmoothTransformation)
|
||||||
realwidth = preview.width()
|
realwidth = preview.width()
|
||||||
realheight = preview.height()
|
realheight = preview.height()
|
||||||
# and move it to the centre of the preview space
|
# and move it to the centre of the preview space
|
||||||
|
@ -60,3 +60,6 @@ class CustomPlugin(Plugin):
|
|||||||
if event.event_type == EventType.ThemeListChanged:
|
if event.event_type == EventType.ThemeListChanged:
|
||||||
log.debug(u'New Theme request received')
|
log.debug(u'New Theme request received')
|
||||||
self.edit_custom_form.loadThemes(self.theme_manager.getThemes())
|
self.edit_custom_form.loadThemes(self.theme_manager.getThemes())
|
||||||
|
if event.event_type == EventType.LoadServiceItem and event.payload == 'Custom':
|
||||||
|
log.debug(u'Load Service Item received')
|
||||||
|
self.media_item.onCustomAddClick()
|
||||||
|
@ -109,6 +109,8 @@ class CustomMediaItem(MediaManagerItem):
|
|||||||
self.CustomListView.setAlternatingRowColors(True)
|
self.CustomListView.setAlternatingRowColors(True)
|
||||||
self.CustomListData = TextListData()
|
self.CustomListData = TextListData()
|
||||||
self.CustomListView.setModel(self.CustomListData)
|
self.CustomListView.setModel(self.CustomListData)
|
||||||
|
self.CustomListView.setDragEnabled(True)
|
||||||
|
self.CustomListView .__class__.mouseMoveEvent =self.onMouseMoveEvent
|
||||||
|
|
||||||
self.PageLayout.addWidget(self.CustomListView)
|
self.PageLayout.addWidget(self.CustomListView)
|
||||||
|
|
||||||
@ -233,3 +235,27 @@ class CustomMediaItem(MediaManagerItem):
|
|||||||
service_item.title = title
|
service_item.title = title
|
||||||
service_item.raw_slides = raw_slides
|
service_item.raw_slides = raw_slides
|
||||||
service_item.raw_footer = raw_footer
|
service_item.raw_footer = raw_footer
|
||||||
|
|
||||||
|
def onMouseMoveEvent(self, event):
|
||||||
|
"""
|
||||||
|
Drag and drop eventDo not care what data is selected
|
||||||
|
as the recepient will use events to request the data move
|
||||||
|
just tell it what plugin to call
|
||||||
|
"""
|
||||||
|
if event.buttons() != QtCore.Qt.LeftButton:
|
||||||
|
return
|
||||||
|
|
||||||
|
items = self.CustomListView.selectedIndexes()
|
||||||
|
if items == []:
|
||||||
|
return
|
||||||
|
|
||||||
|
drag = QtGui.QDrag(self)
|
||||||
|
mimeData = QtCore.QMimeData()
|
||||||
|
drag.setMimeData(mimeData)
|
||||||
|
for item in items:
|
||||||
|
mimeData.setText(u'Custom')
|
||||||
|
|
||||||
|
dropAction = drag.start(QtCore.Qt.CopyAction)
|
||||||
|
|
||||||
|
if dropAction == QtCore.Qt.CopyAction:
|
||||||
|
self.close()
|
||||||
|
@ -18,6 +18,6 @@ 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
|
||||||
"""
|
"""
|
||||||
|
|
||||||
from imageplugin import ImagePlugin
|
#from imageplugin import ImagePlugin
|
||||||
from imageserviceitem import ImageServiceItem
|
#from imageserviceitem import ImageServiceItem
|
||||||
|
|
||||||
|
@ -100,7 +100,7 @@ class ImageServiceItem(ServiceItem):
|
|||||||
"""
|
"""
|
||||||
log.info("Get oos text")
|
log.info("Get oos text")
|
||||||
log.info(str(self.imgs))
|
log.info(str(self.imgs))
|
||||||
log.info(str(self.imgs.get_file_list()))
|
# log.info(str(self.imgs.get_file_list()))
|
||||||
return '\n'.join(self.imgs.get_file_list())
|
return '\n'.join(self.imgs.get_file_list())
|
||||||
|
|
||||||
def set_from_oos(self, text):
|
def set_from_oos(self, text):
|
||||||
|
@ -29,7 +29,7 @@ class ListWithPreviews(QAbstractListModel):
|
|||||||
if os.path.exists(filename):
|
if os.path.exists(filename):
|
||||||
preview = QPixmap(str(filename))
|
preview = QPixmap(str(filename))
|
||||||
w=self.maximagewidth;h=self.rowheight
|
w=self.maximagewidth;h=self.rowheight
|
||||||
preview = preview.scaled(w,h, Qt.KeepAspectRatio)
|
preview = preview.scaled(w,h, Qt.KeepAspectRatio, Qt.SmoothTransformation)
|
||||||
realw=preview.width(); realh=preview.height()
|
realw=preview.width(); realh=preview.height()
|
||||||
# and move it to the centre of the preview space
|
# and move it to the centre of the preview space
|
||||||
p=QPixmap(w,h)
|
p=QPixmap(w,h)
|
||||||
|
Binary file not shown.
Loading…
Reference in New Issue
Block a user