Lots for fixes:

- General Tab now saves and retrieves
- Alert Dialogs now alerts
- Renderer - More fixes
- SlideController looks better.
- Removal of poked in Managers all accessed via Parent.
This commit is contained in:
Tim Bentley 2009-06-01 18:50:37 +01:00
parent e019e0f5d8
commit 30154f2127
14 changed files with 227 additions and 146 deletions

View File

@ -29,7 +29,7 @@ from copy import copy
class Renderer:
global log
log=logging.getLogger(u'Renderer')
log = logging.getLogger(u'Renderer')
log.info(u'Renderer Loaded')
"""All the functions for rendering a set of words onto a Device Context
@ -44,7 +44,7 @@ class Renderer:
def __init__(self):
self._rect = None
self._debug = 0
self.words = None
#self.words = None
self._right_margin = 64 # the amount of right indent
self._shadow_offset = 5
self._outline_offset = 2
@ -103,7 +103,7 @@ class Renderer:
if self._bg_image_filename is not None:
self.scale_bg_image()
if self._bg_frame is None:
self._render_background()
self._generate_background_frame()
def format_slide(self, words, footer):
"""
@ -111,30 +111,57 @@ class Renderer:
"""
log.debug(u'format_slide %s', words)
verses = []
words=words.replace("\r\n", "\n")
words = words.replace("\r\n", "\n")
verses_text = words.split(u'\n\n')
text = []
for verse in verses_text:
lines = verse.split(u'\n')
verses.append(self.split_set_of_lines(lines, footer)[0])
self.words = verses
verses_text = []
for v in verses:
verses_text.append(u'\n'.join(v).lstrip()) # remove first \n
return verses_text
for line in lines:
text.append(line)
def render_screen(self, screennum):
log.debug(u'render screen\n %s %s ', screennum, self.words[screennum])
t = 0.0
words = self.words[screennum]
retval = self._render_lines(words)
return retval
print self._split_set_of_lines(text, False)
#verses_text = []
#for verse in verses:
# for line in verse:
# verses_text.append(line)
print "text ", text
return text
# def render_screen(self, screennum):
# log.debug(u'render screen\n %s %s ', screennum, self.words[screennum])
# t = 0.0
# words = self.words[screennum]
# retval = self._render_lines(words)
# return retval
def set_text_rectangle(self, rect_main, rect_footer):
""" Sets the rectangle within which text should be rendered"""
self._rect = rect_main
self._rect_footer = rect_footer
def _render_background(self):
def generate_frame_from_lines(self, lines, footer_lines=None):
"""
render a set of lines according to the theme, return bounding box
"""
log.debug(u'generate_frame_from_lines - Start')
bbox = self._render_lines_unaligned(lines, False)
if footer_lines is not None:
bbox1 = self._render_lines_unaligned(footer_lines, True)
# reset the frame. first time do not worrk about what you paint on.
self._frame = QtGui.QPixmap(self._bg_frame)
x, y = self._correctAlignment(self._rect, bbox)
bbox = self._render_lines_unaligned(lines, False, (x, y))
if footer_lines is not None:
bbox = self._render_lines_unaligned(footer_lines, True, (self._rect_footer.left(), self._rect_footer.top()) )
log.debug(u'generate_frame_from_lines - Finish')
return self._frame
def _generate_background_frame(self):
"""
Generate a background frame to the same size as the frame to be used
Results cached for performance reasons.
@ -150,14 +177,14 @@ class Renderer:
elif self._theme.background_type == u'gradient' : # gradient
gradient = None
if self._theme.background_direction == u'horizontal':
w = int(self._frame.width())/2
w = int(self._frame.width()) / 2
gradient = QtGui.QLinearGradient(w, 0, w, self._frame.height()) # vertical
elif self._theme.background_direction == u'vertical':
h = int(self._frame.height())/2
h = int(self._frame.height()) / 2
gradient = QtGui.QLinearGradient(0, h, self._frame.width(), h) # Horizontal
else:
w = int(self._frame.width())/2
h = int(self._frame.height())/2
w = int(self._frame.width()) / 2
h = int(self._frame.height()) / 2
gradient = QtGui.QRadialGradient(w, h, w) # Circular
gradient.setColorAt(0, QtGui.QColor(self._theme.background_startColor))
@ -189,9 +216,9 @@ class Renderer:
print "background time", bef, aft, aft-bef
log.debug(u'render background finish')
def split_set_of_lines(self, lines, footer):
"""Given a list of lines, decide how to split them best if they don't all fit on the screen
def _split_set_of_lines(self, lines, footer):
"""
Given a list of lines, decide how to split them best if they don't all fit on the screen
- this is done by splitting at 1/2, 1/3 or 1/4 of the set
If it doesn't fit, even at this size, just split at each opportunity
@ -200,8 +227,9 @@ class Renderer:
"""
log.debug(u'Split set of lines')
bboxes = []
print "Lines ", lines
for line in lines:
bboxes.append(self._render_single_line(line, footer))
bboxes.append(self._render_and_wrap_single_line(line, footer))
#print line, bboxes
numlines = len(lines)
@ -211,6 +239,8 @@ class Renderer:
good = 1
startline = 0
endline = startline + ratio
#print "A ", numlines , startline, endline
#print "B ", bboxes
while (endline <= numlines):
by = 0
for (x, y) in bboxes[startline:endline]:
@ -224,7 +254,7 @@ class Renderer:
endline = startline+ratio
# if good == 1:
# break
#print "---------"
# print "---------"
retval = []
numlines_per_page = ratio
@ -252,6 +282,7 @@ class Renderer:
endline = startline # gets incremented below
by = 0
endline += 1
print "retval ", retval
return retval
def _correctAlignment(self, rect, bbox):
@ -259,32 +290,13 @@ class Renderer:
if int(self._theme.display_verticalAlign) == 0: # top align
y = rect.top()
elif int(self._theme.display_verticalAlign) == 2: # bottom align
y = rect.bottom()-bbox.height()
y = rect.bottom() - bbox.height()
elif int(self._theme.display_verticalAlign) == 1: # centre align
y = rect.top()+(rect.height()-bbox.height())/2
y = rect.top() + (rect.height() - bbox.height()) / 2
else:
assert(0, u'Invalid value for theme.VerticalAlign:%s' % self._theme.display_verticalAlign)
assert(0 , u'Invalid value for theme.VerticalAlign:%s' % self._theme.display_verticalAlign)
return x, y
def render_lines(self, lines, footer_lines=None):
"""render a set of lines according to the theme, return bounding box"""
log.debug(u'render_lines - Start')
bbox = self._render_lines_unaligned(lines, False) # Main font
if footer_lines is not None:
bbox1 = self._render_lines_unaligned(footer_lines, True) # Footer Font
self._frame = QtGui.QPixmap(self._bg_frame)
x, y = self._correctAlignment(self._rect, bbox)
bbox = self._render_lines_unaligned(lines, False, (x, y))
if footer_lines is not None:
bbox = self._render_lines_unaligned(footer_lines, True, (self._rect_footer.left(), self._rect_footer.top()) )
log.debug(u'render_lines- Finish')
return self._frame
def _render_lines_unaligned(self, lines, footer, tlcorner=(0,0)):
"""
Given a list of lines to render, render each one in turn
@ -298,12 +310,14 @@ class Renderer:
x, y = tlcorner
brx = x
bry = y
print "A ", bry
for line in lines:
# render after current bottom, but at original left edge
# keep track of right edge to see which is biggest
(thisx, bry) = self._render_single_line(line, footer, (x , bry))
(thisx, bry) = self._render_and_wrap_single_line(line, footer, (x , bry))
if (thisx > brx):
brx = thisx
print "B ", bry
retval = QtCore.QRect(x, y,brx-x, bry-y)
if self._debug:
painter = QtGui.QPainter()
@ -314,7 +328,7 @@ class Renderer:
log.debug(u'render lines unaligned Finish')
return retval
def _render_single_line(self, line, footer, tlcorner=(0,0)):
def _render_and_wrap_single_line(self, line, footer, tlcorner=(0,0)):
"""
Render a single line of words onto the DC, top left corner
specified.
@ -335,10 +349,10 @@ class Renderer:
lines = []
maxx = self._rect.width();
maxy = self._rect.height();
while (len(words)>0):
while (len(words) > 0):
w , h = self._get_extent_and_render(thisline, footer)
rhs = w + x
if rhs < maxx-self._right_margin:
if rhs < maxx - self._right_margin:
lines.append(thisline)
words = words[lastword:]
thisline = ' '.join(words)
@ -373,10 +387,10 @@ class Renderer:
x = rightextent - w
elif align == 1: # right align
rightextent = maxx
x = maxx-w
x = maxx - w
elif align == 2: # centre
x = (maxx-w) / 2;
rightextent = x+w
x = (maxx - w) / 2;
rightextent = x + w
# now draw the text, and any outlines/shadows
if self._theme.display_shadow:
self._get_extent_and_render(line, footer,tlcorner=(x+self._shadow_offset,y+self._shadow_offset),
@ -441,7 +455,6 @@ class Renderer:
QtGui.QFont.Normal, # weight
0)# italic
font.setPixelSize(int(self._theme.font_main_proportion))
#log.debug(u'Font details %s %s %s %d', self._theme.font_main_name, self._theme.font_main_proportion, font.family(), font.pointSize())
painter.setFont(font)
if color == None:
if footer:
@ -454,9 +467,9 @@ class Renderer:
metrics=QtGui.QFontMetrics(font)
# xxx some fudges to make it exactly like wx! Take 'em out later
w = metrics.width(line)
h = metrics.height()-2
h = metrics.height() - 2
if draw:
painter.drawText(x, y+metrics.height()-metrics.descent()-1, line)
painter.drawText(x, y + metrics.ascent() , line)
painter.end()
return (w, h)

View File

@ -136,10 +136,9 @@ class RenderManager:
lines1.append(u'Amazing Grace (John Newton)' )
lines1.append(u'Public Domain')
lines1.append(u'CCLI xxx')
return self.renderer.render_lines(lines, lines1)
return self.renderer.generate_frame_from_lines(lines, lines1)
def format_slide(self, words, footer):
def format_slide(self, words):
log.debug(u'format slide')
self.calculate_default(self.screen_list[self.current_display]['size'])
self.build_text_rectangle(self.themedata)
@ -151,7 +150,7 @@ class RenderManager:
self.calculate_default(self.screen_list[self.current_display]['size'])
self.build_text_rectangle(self.themedata)
self.renderer.set_frame_dest(self.width, self.height)
return self.renderer.render_lines(main_text, footer_text)
return self.renderer.generate_frame_from_lines(main_text, footer_text)
def calculate_default(self, screen):
log.debug(u'calculate default %s' , screen)

View File

@ -58,14 +58,15 @@ class ServiceItem():
"""
log.debug(u'Render called')
if self.theme == None:
self.render_manager.set_override_theme(None)
self.plugin.render_manager.set_override_theme(None)
else:
self.render_manager.set_override_theme(self.theme)
self.plugin.render_manager.set_override_theme(self.theme)
log.debug(u'Formatting slides')
if len(self.frames) == 0 and len(self.raw_slides) > 0 :
for slide in self.raw_slides:
formated = self.render_manager.format_slide(slide, False)
frame = self.render_manager.generate_slide(formated, self.raw_footer)
formated = self.plugin.render_manager.format_slide(slide)
print formated
frame = self.plugin.render_manager.generate_slide(formated, self.raw_footer)
self.frames.append({u'title': formated, u'image': frame})
else:
if len(self.command_files) > 0:

View File

@ -18,17 +18,19 @@ 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 translate
class AlertForm(QtGui.QDialog):
global log
log=logging.getLogger(u'AlertForm')
log = logging.getLogger(u'AlertForm')
def __init__(self, parent=None):
QtGui.QDialog.__init__(self, parent)
QtGui.QDialog.__init__(self, None)
self.parent = parent
self.setupUi(self)
log.info(u'Defined')
log.debug(u'Defined')
def setupUi(self, AlertForm):
AlertForm.setObjectName("AlertForm")
@ -92,7 +94,6 @@ class AlertForm(QtGui.QDialog):
self.DisplayButton.setText(translate("AlertForm", u'Display'))
self.CancelButton.setText(translate("AlertForm", u'Cancel'))
def load_settings(self):
pass
@ -100,4 +101,4 @@ class AlertForm(QtGui.QDialog):
pass
def onDisplayClicked(self):
pass
self.parent.mainDisplay.alert(self.parent.settingsForm.AlertsTab, self.AlertEntryEditItem.text())

View File

@ -20,7 +20,7 @@ Place, Suite 330, Boston, MA 02111-1307 USA
from PyQt4 import QtCore, QtGui
from openlp.core.lib import SettingsTab, translate
from openlp.core.lib import SettingsTab, translate, str_to_bool
class GeneralTab(SettingsTab):
"""
@ -113,6 +113,19 @@ class GeneralTab(SettingsTab):
QtGui.QSizePolicy.Minimum, QtGui.QSizePolicy.Expanding)
self.GeneralRightLayout.addItem(self.GeneralRightSpacer)
self.GeneralLayout.addWidget(self.GeneralRightWidget)
QtCore.QObject.connect(self.MonitorComboBox,
QtCore.SIGNAL("activated(int)"), self.onMonitorComboBoxChanged)
QtCore.QObject.connect(self.WarningCheckBox,
QtCore.SIGNAL("stateChanged(int)"), self.onWarningCheckBoxChanged)
QtCore.QObject.connect(self.AutoOpenCheckBox,
QtCore.SIGNAL("stateChanged(int)"), self.onAutoOpenCheckBoxChanged)
QtCore.QObject.connect(self.NumberEdit,
QtCore.SIGNAL("lostFocus()"), self.onNumberEditLostFocus)
QtCore.QObject.connect(self.UsernameEdit,
QtCore.SIGNAL("lostFocus()"), self.onUsernameEditLostFocus)
QtCore.QObject.connect(self.PasswordEdit,
QtCore.SIGNAL("lostFocus()"), self.onPasswordEditLostFocus)
def retranslateUi(self):
self.MonitorGroupBox.setTitle(translate(u'GeneralTab', u'Monitors'))
@ -126,7 +139,29 @@ class GeneralTab(SettingsTab):
self.UsernameLabel.setText(translate(u'GeneralTab', u'SongSelect Username:'))
self.PasswordLabel.setText(translate(u'GeneralTab', u'SongSelect Password:'))
def initialise(self):
def onMonitorComboBoxChanged(self):
self.MonitorNumber = self.MonitorComboBox.currentIndex()
def onAutoOpenCheckBoxChanged(self, value):
self.AutoOpen = False
if value == 2: # we have a set value convert to True/False
self.AutoOpen = True
def onWarningCheckBoxChanged(self, value):
self.Warning = False
if value == 2: # we have a set value convert to True/False
self.Warning = True
def onNumberEditLostFocus(self):
self.CCLNumber = self.NumberEdit.displayText()
def onUsernameEditLostFocus(self):
self.Username = self.UsernameEdit.displayText()
def onPasswordEditLostFocus(self):
self.Password = self.PasswordEdit.displayText()
def load(self):
for screen in self.screen_list:
screen_name = translate(u'GeneralTab', u'Screen') + u' ' + \
str(screen['number'] + 1)
@ -134,3 +169,25 @@ class GeneralTab(SettingsTab):
screen_name = screen_name + u' (' + \
translate(u'GeneralTab', u'primary') + u')'
self.MonitorComboBox.addItem(screen_name)
self.MonitorNumber = int(self.config.get_config(u'Monitor', u'0'))
self.Warning = str_to_bool(self.config.get_config(u'Warning', u"False"))
self.AutoOpen = str_to_bool(self.config.get_config(u'Auto Open', u"False"))
self.CCLNumber = str(self.config.get_config('CCL Number', u'XXX'))
self.Username = str(self.config.get_config('User Name', u''))
self.Password = str(self.config.get_config('Password', u''))
self.MonitorComboBox.setCurrentIndex(self.MonitorNumber)
self.WarningCheckBox.setChecked(self.Warning)
self.AutoOpenCheckBox.setChecked(self.AutoOpen)
self.NumberEdit.setText(self.CCLNumber)
self.UsernameEdit.setText(self.Username)
self.PasswordEdit.setText(self.Password)
def save(self):
self.config.set_config(u'Monitor',str(self.MonitorNumber))
self.config.set_config(u'Warning', str(self.Warning))
self.config.set_config(u'Auto Open', str(self.AutoOpen))
self.config.set_config('CCL Number', str(self.CCLNumber))
self.config.set_config('User Name',str(self.Username))
self.config.set_config('Password', str(self.Password ))

View File

@ -18,8 +18,9 @@ this program; if not, write to the Free Software Foundation, Inc., 59 Temple
Place, Suite 330, Boston, MA 02111-1307 USA
"""
from PyQt4 import QtCore, QtGui
from PyQt4 import QtCore, QtGui, QtTest
from time import sleep
from openlp.core.lib import translate
class MainDisplay(QtGui.QWidget):
@ -32,6 +33,9 @@ class MainDisplay(QtGui.QWidget):
self.display.setScaledContents(True)
self.displayBlank = False
self.blankFrame= None
self.alertactive = False
self.alerttext = u''
self.alertTab = None
def setup(self, screenNumber):
"""
@ -55,19 +59,55 @@ class MainDisplay(QtGui.QWidget):
self.showMinimized()
painter=QtGui.QPainter()
self.blankFrame = QtGui.QPixmap(800, 600)
self.blankFrame = QtGui.QPixmap(screen['size'].width(), screen['size'].height())
painter.begin(self.blankFrame)
painter.fillRect(self.blankFrame.rect(), QtGui.QColor(u'#000000'))
self.frameView(self.blankFrame)
def frameView(self, frame):
self.frame = frame
if self.displayBlank == False:
if not self.displayBlank:
self.display.setPixmap(frame)
elif self.alertactive:
self.displayAlert()
def blankDisplay(self):
if self.displayBlank == False:
if not self.displayBlank:
self.displayBlank = True
self.display.setPixmap(self.blankFrame)
else:
self.displayBlank = False
self.frameView(self.frame)
def alert(self, alertTab, text):
"""
Called from the Alert Tab
alertTab = details from AlertTab
text = display text
screen = screen number to be displayed on.
"""
self.alerttext = text
self.alertTab = alertTab
if len(text) > 0:
self.alertactive = True
self.displayAlert()
self.alertactive = False
def displayAlert(self):
alertframe = QtGui.QPixmap(self.frame)
painter = QtGui.QPainter(alertframe)
top = alertframe.rect().height() * 0.9
painter.fillRect(QtCore.QRect(0, top , alertframe.rect().width(), alertframe.rect().height() - top), QtGui.QColor(self.alertTab.bg_color))
font = QtGui.QFont()
font.setFamily(self.alertTab.font_face)
font.setBold(True)
font.setPointSize(40)
painter.setFont(font)
painter.setPen(QtGui.QColor(self.alertTab.font_color))
x, y = (0, top)
metrics=QtGui.QFontMetrics(font)
painter.drawText(x, y+metrics.height()-metrics.descent()-1, self.alerttext)
painter.end()
self.display.setPixmap(alertframe)
QtTest.QTest.qWait(self.alertTab.timeout*1000)
self.display.setPixmap(self.frame)

View File

@ -40,7 +40,7 @@ class MainWindow(object):
self.mainDisplay = MainDisplay(None, screens)
self.screenList = screens
self.EventManager = EventManager()
self.alertForm = AlertForm()
self.alertForm = AlertForm(self)
self.aboutForm = AboutForm()
self.settingsForm = SettingsForm(self.screenList, self)
@ -88,26 +88,9 @@ class MainWindow(object):
self.plugin_manager.initialise_plugins()
# Once all components are initialised load the Themes
log.info(u'Load Themes and Managers')
self.PreviewController.ServiceManager = self.ServiceManagerContents
self.LiveController.ServiceManager = self.ServiceManagerContents
self.ThemeManagerContents.EventManager = self.EventManager
self.ThemeManagerContents.RenderManager = self.RenderManager
self.ThemeManagerContents.ServiceManager = self.ServiceManagerContents
#self.ThemeManagerContents.ThemesTab = self.ServiceManagerContents.ThemesTab
self.ServiceManagerContents.RenderManager = self.RenderManager
self.ServiceManagerContents.EventManager = self.EventManager
self.ServiceManagerContents.LiveController = self.LiveController
self.ServiceManagerContents.PreviewController = self.PreviewController
log.info(u'Load Themes')
self.ThemeManagerContents.loadThemes()
# Initialise SlideControllers
log.info(u'Set Up SlideControllers')
self.LiveController.mainDisplay = self.mainDisplay
def onCloseEvent(self, event):
"""
Hook to close the main window and display windows on exit
@ -128,6 +111,7 @@ class MainWindow(object):
main_icon.addPixmap(QtGui.QPixmap(u':/icon/openlp-logo-16x16.png'),
QtGui.QIcon.Normal, QtGui.QIcon.Off)
self.mainWindow.setWindowIcon(main_icon)
self.MainContent = QtGui.QWidget(self.mainWindow)
sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Expanding)
sizePolicy.setHorizontalStretch(0)
@ -144,8 +128,10 @@ class MainWindow(object):
self.ControlSplitter.setOrientation(QtCore.Qt.Horizontal)
self.ControlSplitter.setObjectName(u'ControlSplitter')
self.MainContentLayout.addWidget(self.ControlSplitter)
self.PreviewController = SlideController(self.ControlSplitter, False)
self.LiveController = SlideController(self.ControlSplitter, True)
self.PreviewController = SlideController(self.ControlSplitter, self, False)
self.LiveController = SlideController(self.ControlSplitter, self, True)
self.MenuBar = QtGui.QMenuBar(self.mainWindow)
self.MenuBar.setGeometry(QtCore.QRect(0, 0, 1087, 27))
self.MenuBar.setObjectName(u'MenuBar')
@ -172,12 +158,13 @@ class MainWindow(object):
self.StatusBar = QtGui.QStatusBar(self.mainWindow)
self.StatusBar.setObjectName(u'StatusBar')
self.mainWindow.setStatusBar(self.StatusBar)
self.MediaManagerDock = QtGui.QDockWidget(self.mainWindow)
sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Expanding)
sizePolicy.setHorizontalStretch(0)
sizePolicy.setVerticalStretch(0)
sizePolicy.setHeightForWidth(self.MediaManagerDock.sizePolicy().hasHeightForWidth())
self.MediaManagerDock.setSizePolicy(sizePolicy)
#MmSizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Expanding)
#MmSizePolicy.setHorizontalStretch(0)
#MmSizePolicy.setVerticalStretch(0)
#MmSizePolicy.setHeightForWidth(self.MediaManagerDock.sizePolicy().hasHeightForWidth())
#self.MediaManagerDock.setSizePolicy(MmSizePolicy)
icon = QtGui.QIcon()
icon.addPixmap(QtGui.QPixmap(u':/system/system_mediamanager.png'),
QtGui.QIcon.Normal, QtGui.QIcon.Off)
@ -187,11 +174,11 @@ class MainWindow(object):
self.MediaManagerDock.setObjectName(u'MediaManagerDock')
self.MediaManagerDock.setMinimumWidth(250)
self.MediaManagerContents = QtGui.QWidget()
sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Expanding)
sizePolicy.setHorizontalStretch(0)
sizePolicy.setVerticalStretch(0)
sizePolicy.setHeightForWidth(self.MediaManagerContents.sizePolicy().hasHeightForWidth())
self.MediaManagerContents.setSizePolicy(sizePolicy)
#sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Expanding)
#sizePolicy.setHorizontalStretch(0)
#sizePolicy.setVerticalStretch(0)
#sizePolicy.setHeightForWidth(self.MediaManagerContents.sizePolicy().hasHeightForWidth())
#self.MediaManagerContents.setSizePolicy(sizePolicy)
self.MediaManagerContents.setObjectName(u'MediaManagerContents')
self.MediaManagerLayout = QtGui.QHBoxLayout(self.MediaManagerContents)
self.MediaManagerLayout.setContentsMargins(0, 2, 0, 0)
@ -202,6 +189,7 @@ class MainWindow(object):
self.MediaManagerLayout.addWidget(self.MediaToolBox)
self.MediaManagerDock.setWidget(self.MediaManagerContents)
self.mainWindow.addDockWidget(QtCore.Qt.DockWidgetArea(1), self.MediaManagerDock)
#Sevice Manager Defined
self.ServiceManagerDock = QtGui.QDockWidget(self.mainWindow)
ServiceManagerIcon = QtGui.QIcon()
@ -213,6 +201,7 @@ class MainWindow(object):
self.ServiceManagerContents = ServiceManager(self)
self.ServiceManagerDock.setWidget(self.ServiceManagerContents)
self.mainWindow.addDockWidget(QtCore.Qt.DockWidgetArea(2), self.ServiceManagerDock)
#Theme Manager Defined
self.ThemeManagerDock = QtGui.QDockWidget(self.mainWindow)
ThemeManagerIcon = QtGui.QIcon()
@ -227,6 +216,7 @@ class MainWindow(object):
self.ThemeManagerDock.setWidget(self.ThemeManagerContents)
self.mainWindow.addDockWidget(QtCore.Qt.DockWidgetArea(2), self.ThemeManagerDock)
#Menu Items define
self.FileNewItem = QtGui.QAction(self.mainWindow)
self.FileNewItem.setIcon(
self.ServiceManagerContents.Toolbar.getIconFromTitle(u'New Service'))
@ -397,22 +387,7 @@ class MainWindow(object):
self.HelpMenu.setTitle(translate(u'mainWindow', u'&Help'))
self.MediaManagerDock.setWindowTitle(translate(u'mainWindow', u'Media Manager'))
self.ServiceManagerDock.setWindowTitle(translate(u'mainWindow', u'Service Manager'))
# self.ServiceManagerContents.MoveTopButton.setText(translate(u'mainWindow', u'Move To Top'))
# self.ServiceManagerContents.MoveUpButton.setText(translate(u'mainWindow', u'Move Up'))
# self.ServiceManagerContents.MoveDownButton.setText(translate(u'mainWindow', u'Move Down'))
# self.ServiceManagerContents.MoveBottomButton.setText(translate(u'mainWindow', u'Move To Bottom'))
# self.ServiceManagerContents.NewItem.setText(translate(u'mainWindow', u'New Service'))
# self.ServiceManagerContents.OpenItem.setText(translate(u'mainWindow', u'Open Service'))
# self.ServiceManagerContents.SaveItem.setText(translate(u'mainWindow', u'Save Service'))
# self.ServiceManagerContents.ThemeComboBox.setItemText(0, translate(u'mainWindow', u'African Sunset'))
# self.ServiceManagerContents.ThemeComboBox.setItemText(1, translate(u'mainWindow', u'Snowy Mountains'))
# self.ServiceManagerContents.ThemeComboBox.setItemText(2, translate(u'mainWindow', u'Wilderness'))
self.ThemeManagerDock.setWindowTitle(translate(u'mainWindow', u'Theme Manager'))
# self.ThemeNewItem.setText(translate(u'mainWindow', u'New Theme'))
# self.ThemeEditItem.setText(translate(u'mainWindow', u'Edit Theme'))
# self.ThemeDeleteButton.setText(translate(u'mainWindow', u'Delete Theme'))
# self.ThemeImportButton.setText(translate(u'mainWindow', u'Import Theme'))
# self.ThemeExportButton.setText(translate(u'mainWindow', u'Export Theme'))
self.FileNewItem.setText(translate(u'mainWindow', u'&New'))
self.FileNewItem.setToolTip(translate(u'mainWindow', u'New Service'))
self.FileNewItem.setStatusTip(translate(u'mainWindow', u'Create a new Service'))
@ -470,7 +445,7 @@ class MainWindow(object):
def show(self):
self.mainWindow.showMaximized()
self.mainDisplay.setup(0)
self.mainDisplay.setup(self.settingsForm.GeneralTab.MonitorNumber)
self.mainDisplay.show()
def onHelpAboutItemClicked(self):

View File

@ -126,7 +126,7 @@ class ServiceManager(QtGui.QWidget):
def onThemeComboBoxSelected(self, currentIndex):
self.service_theme = self.ThemeComboBox.currentText()
self.RenderManager.set_service_theme(self.service_theme)
self.parent.RenderManager.set_service_theme(self.service_theme)
self.config.set_config(u'theme service theme', self.service_theme)
def addServiceItem(self, item):
@ -147,11 +147,11 @@ class ServiceManager(QtGui.QWidget):
def makePreview(self):
item, count = self.findServiceItem()
self.PreviewController.addServiceManagerItem(self.serviceItems[item][u'data'], count)
self.parent.PreviewController.addServiceManagerItem(self.serviceItems[item][u'data'], count)
def makeLive(self):
item, count = self.findServiceItem()
self.LiveController.addServiceManagerItem(self.serviceItems[item][u'data'], count)
self.parent.LiveController.addServiceManagerItem(self.serviceItems[item][u'data'], count)
def findServiceItem(self):
items = self.ServiceManagerList.selectedItems()
@ -182,7 +182,7 @@ class ServiceManager(QtGui.QWidget):
link = event.mimeData()
if link.hasText():
plugin = event.mimeData().text()
self.EventManager.post_event(Event(EventType.LoadServiceItem, plugin))
self.parent.EventManager.post_event(Event(EventType.LoadServiceItem, plugin))
def oos_as_text(self):
text=[]
@ -218,4 +218,4 @@ class ServiceManager(QtGui.QWidget):
id = 0
self.service_theme = u''
self.ThemeComboBox.setCurrentIndex(id)
self.RenderManager.set_service_theme(self.service_theme)
self.parent.RenderManager.set_service_theme(self.service_theme)

View File

@ -100,9 +100,10 @@ class SlideController(QtGui.QWidget):
global log
log=logging.getLogger(u'SlideController')
def __init__(self, control_splitter, isLive):
def __init__(self, control_splitter, parent , isLive):
QtGui.QWidget.__init__(self)
self.isLive = isLive
self.parent = parent
self.Panel = QtGui.QWidget(control_splitter)
self.Splitter = QtGui.QSplitter(self.Panel)
self.Splitter.setOrientation(QtCore.Qt.Vertical)
@ -124,10 +125,12 @@ class SlideController(QtGui.QWidget):
self.gridLayout.setObjectName("gridLayout")
self.PreviewListView = QtGui.QListView(self.scrollAreaWidgetContents)
self.PreviewListView.setFlow(1)
self.PreviewListView.setViewMode(1)
self.PreviewListView.setWrapping(False)
self.PreviewListData = SlideData()
self.PreviewListView.isLive = self.isLive
self.PreviewListView.setModel(self.PreviewListData)
self.PreviewListView.setSelectionRectVisible(True)
#self.PreviewListView.setSelectionRectVisible(True)
self.PreviewListView.setSpacing(5)
self.PreviewListView.setObjectName("PreviewListView")
@ -235,7 +238,7 @@ class SlideController(QtGui.QWidget):
if self.isLive:
no = frame[1]
LiveFrame = self.serviceitem.frames[no][u'image']
self.mainDisplay.frameView(LiveFrame)
self.parent.mainDisplay.frameView(LiveFrame)
def addServiceItem(self, serviceitem):
log.debug(u'addServiceItem')

View File

@ -215,8 +215,8 @@ class ThemeManager(QtGui.QWidget):
for name in files:
if name.endswith(u'.png'):
self.themeData.addRow(os.path.join(self.path, name))
self.EventManager.post_event(Event(EventType.ThemeListChanged))
self.ServiceManager.updateThemeList(self.getThemes())
self.parent.EventManager.post_event(Event(EventType.ThemeListChanged))
self.parent.ServiceManagerContents.updateThemeList(self.getThemes())
self.parent.settingsForm.ThemesTab.updateThemeList(self.getThemes())
def getThemes(self):
@ -335,7 +335,7 @@ class ThemeManager(QtGui.QWidget):
outfile = open(theme_file, u'w')
outfile.write(theme_xml)
outfile.close()
if image_from is not None:
if image_from is not None and image_from != image_to:
shutil.copyfile(image_from, image_to)
self.generateAndSaveImage(self.path, name, theme_xml)
self.themeData.clearItems()
@ -356,7 +356,7 @@ class ThemeManager(QtGui.QWidget):
def generateImage(self, themedata):
log.debug(u'generateImage %s ', themedata)
frame = self.RenderManager.generate_preview(themedata)
frame = self.parent.RenderManager.generate_preview(themedata)
return frame
def getPreviewImage(self, theme):

View File

@ -128,6 +128,7 @@ class Ui_BibleImportDialog(object):
self.PasswordLabel.setObjectName("PasswordLabel")
self.ProxySettingsLayout.setWidget(2, QtGui.QFormLayout.LabelRole, self.PasswordLabel)
self.PasswordEdit = QtGui.QLineEdit(self.ProxyGroupBox)
self.PasswordEdit.setEchoMode(QtGui.QLineEdit.Password)
self.PasswordEdit.setObjectName("PasswordEdit")
self.ProxySettingsLayout.setWidget(2, QtGui.QFormLayout.FieldRole, self.PasswordEdit)
self.WebBibleLayout.addWidget(self.ProxyGroupBox)

View File

@ -345,21 +345,18 @@ class BibleMediaItem(MediaManagerItem):
def onBibleLiveClick(self):
service_item = ServiceItem(self.parent)
service_item.addIcon( ":/media/media_verse.png")
service_item.render_manager = self.parent.render_manager
self.generateSlideData(service_item)
self.parent.live_controller.addServiceItem(service_item)
def onBibleAddClick(self):
service_item = ServiceItem(self.parent)
service_item.addIcon( ":/media/media_verse.png")
service_item.render_manager = self.parent.render_manager
self.generateSlideData(service_item)
self.parent.service_manager.addServiceItem(service_item)
def onBiblePreviewClick(self):
service_item = ServiceItem(self.parent)
service_item.addIcon( ":/media/media_verse.png")
service_item.render_manager = self.parent.render_manager
self.generateSlideData(service_item)
self.parent.preview_controller.addServiceItem(service_item)

View File

@ -210,7 +210,6 @@ class CustomMediaItem(MediaManagerItem):
log.debug(u'Custom Preview Requested')
service_item = ServiceItem(self.parent)
service_item.addIcon( ":/media/media_song.png")
service_item.render_manager = self.parent.render_manager
self.generateSlideData(service_item)
self.parent.preview_controller.addServiceItem(service_item)
@ -218,7 +217,6 @@ class CustomMediaItem(MediaManagerItem):
log.debug(u'Custom Live Requested')
service_item = ServiceItem(self.parent)
service_item.addIcon( ":/media/media_song.png")
service_item.render_manager = self.parent.render_manager
self.generateSlideData(service_item)
self.parent.live_controller.addServiceItem(service_item)
@ -226,7 +224,6 @@ class CustomMediaItem(MediaManagerItem):
log.debug(u'Custom Add Requested')
service_item = ServiceItem(self.parent)
service_item.addIcon( ":/media/media_song.png")
service_item.render_manager = self.parent.render_manager
self.generateSlideData(service_item)
self.parent.service_manager.addServiceItem(service_item)

View File

@ -159,7 +159,6 @@ class ImageMediaItem(MediaManagerItem):
log.debug(u'Image Preview Requested')
service_item = ServiceItem(self.parent)
service_item.addIcon( ":/media/media_image.png")
service_item.render_manager = self.parent.render_manager
self.generateSlideData(service_item)
self.parent.preview_controller.addServiceItem(service_item)
@ -167,7 +166,6 @@ class ImageMediaItem(MediaManagerItem):
log.debug(u'Image Live Requested')
service_item = ServiceItem(self.parent)
service_item.addIcon( ":/media/media_image.png")
service_item.render_manager = self.parent.render_manager
self.generateSlideData(service_item)
self.parent.live_controller.addServiceItem(service_item)
@ -175,6 +173,5 @@ class ImageMediaItem(MediaManagerItem):
log.debug(u'Image Add Requested')
service_item = ServiceItem(self.parent)
service_item.addIcon( ":/media/media_image.png")
service_item.render_manager = self.parent.render_manager
self.generateSlideData(service_item)
self.parent.service_manager.addServiceItem(service_item)