From 30154f2127af2068eea392a2515e0c505e60ba90 Mon Sep 17 00:00:00 2001 From: Tim Bentley Date: Mon, 1 Jun 2009 18:50:37 +0100 Subject: [PATCH] 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. --- openlp/core/lib/renderer.py | 129 ++++++++++-------- openlp/core/lib/rendermanager.py | 7 +- openlp/core/lib/serviceitem.py | 9 +- openlp/core/ui/alertform.py | 11 +- openlp/core/ui/generaltab.py | 61 ++++++++- openlp/core/ui/maindisplay.py | 48 ++++++- openlp/core/ui/mainwindow.py | 69 +++------- openlp/core/ui/servicemanager.py | 10 +- openlp/core/ui/slidecontroller.py | 11 +- openlp/core/ui/thememanager.py | 8 +- .../plugins/bibles/forms/bibleimportdialog.py | 1 + openlp/plugins/bibles/lib/mediaitem.py | 3 - openlp/plugins/custom/lib/mediaitem.py | 3 - openlp/plugins/images/lib/mediaitem.py | 3 - 14 files changed, 227 insertions(+), 146 deletions(-) diff --git a/openlp/core/lib/renderer.py b/openlp/core/lib/renderer.py index 236bf136e..249759eff 100644 --- a/openlp/core/lib/renderer.py +++ b/openlp/core/lib/renderer.py @@ -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) diff --git a/openlp/core/lib/rendermanager.py b/openlp/core/lib/rendermanager.py index d31b4b3a0..608a8deaf 100644 --- a/openlp/core/lib/rendermanager.py +++ b/openlp/core/lib/rendermanager.py @@ -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) diff --git a/openlp/core/lib/serviceitem.py b/openlp/core/lib/serviceitem.py index 139f19fc7..4619ccd72 100644 --- a/openlp/core/lib/serviceitem.py +++ b/openlp/core/lib/serviceitem.py @@ -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: diff --git a/openlp/core/ui/alertform.py b/openlp/core/ui/alertform.py index 3f0633a19..2247c7e4e 100644 --- a/openlp/core/ui/alertform.py +++ b/openlp/core/ui/alertform.py @@ -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()) diff --git a/openlp/core/ui/generaltab.py b/openlp/core/ui/generaltab.py index c04d9ecb9..2a22f67e5 100644 --- a/openlp/core/ui/generaltab.py +++ b/openlp/core/ui/generaltab.py @@ -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 )) diff --git a/openlp/core/ui/maindisplay.py b/openlp/core/ui/maindisplay.py index 0e44b00d2..30ec78454 100644 --- a/openlp/core/ui/maindisplay.py +++ b/openlp/core/ui/maindisplay.py @@ -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) diff --git a/openlp/core/ui/mainwindow.py b/openlp/core/ui/mainwindow.py index 62f855f71..ab52980dc 100644 --- a/openlp/core/ui/mainwindow.py +++ b/openlp/core/ui/mainwindow.py @@ -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): diff --git a/openlp/core/ui/servicemanager.py b/openlp/core/ui/servicemanager.py index f34106bb1..f0dc98c5f 100644 --- a/openlp/core/ui/servicemanager.py +++ b/openlp/core/ui/servicemanager.py @@ -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) diff --git a/openlp/core/ui/slidecontroller.py b/openlp/core/ui/slidecontroller.py index 9e8fdd634..25b725ece 100644 --- a/openlp/core/ui/slidecontroller.py +++ b/openlp/core/ui/slidecontroller.py @@ -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') diff --git a/openlp/core/ui/thememanager.py b/openlp/core/ui/thememanager.py index b50ee7af6..83b878011 100644 --- a/openlp/core/ui/thememanager.py +++ b/openlp/core/ui/thememanager.py @@ -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): diff --git a/openlp/plugins/bibles/forms/bibleimportdialog.py b/openlp/plugins/bibles/forms/bibleimportdialog.py index 380b5821b..82da02774 100644 --- a/openlp/plugins/bibles/forms/bibleimportdialog.py +++ b/openlp/plugins/bibles/forms/bibleimportdialog.py @@ -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) diff --git a/openlp/plugins/bibles/lib/mediaitem.py b/openlp/plugins/bibles/lib/mediaitem.py index 21e9a5ede..634d6d7a3 100644 --- a/openlp/plugins/bibles/lib/mediaitem.py +++ b/openlp/plugins/bibles/lib/mediaitem.py @@ -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) diff --git a/openlp/plugins/custom/lib/mediaitem.py b/openlp/plugins/custom/lib/mediaitem.py index b81124994..64294135f 100644 --- a/openlp/plugins/custom/lib/mediaitem.py +++ b/openlp/plugins/custom/lib/mediaitem.py @@ -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) diff --git a/openlp/plugins/images/lib/mediaitem.py b/openlp/plugins/images/lib/mediaitem.py index 54fbcd317..0ed5f4241 100644 --- a/openlp/plugins/images/lib/mediaitem.py +++ b/openlp/plugins/images/lib/mediaitem.py @@ -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)