diff --git a/openlp.pyw b/openlp.pyw index 49f348556..3ba640de2 100755 --- a/openlp.pyw +++ b/openlp.pyw @@ -46,7 +46,7 @@ class OpenLP(QtGui.QApplication): self.setApplicationName(u'openlp.org') self.setApplicationVersion(u'1.9.0') - self.splash = SplashScreen() + self.splash = SplashScreen(self.applicationVersion()) self.splash.show() # make sure Qt really display the splash screen self.processEvents() diff --git a/openlp/core/lib/plugin.py b/openlp/core/lib/plugin.py index 8436bc8d3..b4edc06fd 100644 --- a/openlp/core/lib/plugin.py +++ b/openlp/core/lib/plugin.py @@ -91,8 +91,9 @@ class Plugin(object): self.preview_controller=plugin_helpers[u'preview'] self.live_controller=plugin_helpers[u'live'] self.theme_manager=plugin_helpers[u'theme'] - self.event_manager=plugin_helpers[u'event'] - + self.event_manager=plugin_helpers[u'event'] + self.render_manager=plugin_helpers[u'render'] + def check_pre_conditions(self): """ Provides the Plugin with a handle to check if it can be loaded. @@ -118,7 +119,7 @@ class Plugin(object): Create a menu item and add it to the "Export" menu. """ pass - + def get_settings_tab(self): """ Create a menu item and add it to the "Import" menu. diff --git a/openlp/core/lib/renderer.py b/openlp/core/lib/renderer.py index 8bcd86edb..0356e084a 100644 --- a/openlp/core/lib/renderer.py +++ b/openlp/core/lib/renderer.py @@ -97,19 +97,18 @@ class Renderer: if self._bg_image_filename is not None: self.scale_bg_image() - def set_words_openlp(self, words): -# log.debug(u" "set words openlp", words + def format_slide(self, words, footer): + log.debug(u'format_slide %s', words) verses=[] words=words.replace(u'\r\n', u'\n') - verses_text=words.split(u'\n\n') + verses_text = words.split(u'\n') for v in verses_text: lines=v.split(u'\n') - verses.append(self.split_set_of_lines(lines)[0]) - self.words=verses + 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 def render_screen(self, screennum): @@ -172,22 +171,22 @@ class Renderer: p.end() log.debug(u'render background done') - def split_set_of_lines(self, lines): + 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 - We'll do this by getting the bounding box of each line, and then summing them appropriately + We'll do this by getting the bounding box of each lline, and then summing them appropriately Returns a list of [lists of lines], one set for each screenful """ -# log.debug(u" "Split set of lines" + log.debug(u'Split set of lines') # Probably ought to save the rendering results to a pseudoDC for redrawing efficiency. But let's not optimse prematurely! bboxes = [] for line in lines: - bboxes.append(self._render_single_line(line)) + bboxes.append(self._render_single_line(line, footer)) numlines=len(lines) bottom=self._rect.bottom() for ratio in (numlines, numlines/2, numlines/3, numlines/4): @@ -281,8 +280,8 @@ class Renderer: brx=x bry=y for line in lines: - if (line == ''): - continue + #if (line == ''): + # continue # 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)) @@ -309,7 +308,7 @@ class Renderer: Returns the bottom-right corner (of what was rendered) as a tuple(x, y). """ - #log.debug(u'Render single line %s @ %s '%( line, tlcorner)) + log.debug(u'Render single line %s @ %s '%( line, tlcorner)) x, y=tlcorner # We draw the text to see how big it is and then iterate to make it fit # when we line wrap we do in in the "lyrics" style, so the second line is diff --git a/openlp/core/lib/rendermanager.py b/openlp/core/lib/rendermanager.py index a31afd663..8df35337e 100644 --- a/openlp/core/lib/rendermanager.py +++ b/openlp/core/lib/rendermanager.py @@ -33,33 +33,42 @@ class RenderManager: log=logging.getLogger(u'RenderManager') log.info(u'RenderManager Loaded') - def __init__(self, screen_list): + def __init__(self, theme_manager, screen_list): log.debug(u'Initilisation started') self.screen_list = screen_list + self.theme_manager = theme_manager self.displays = len(screen_list) self.current_display = 1 - self.renderer = Renderer() + self.renderer = Renderer(None) self.calculate_default(self.screen_list[self.current_display-1][1]) + self.frame = None + + def set_default_theme(self, theme): + log.debug("default theme set to %s", theme) + self.default_theme = self.theme_manager.getThemeData(theme) + self.renderer.set_theme(self.default_theme) + + self.renderer.set_text_rectangle(QtCore.QRect(10,0, self.width-1, self.height-1), + QtCore.QRect(10,self.footer_start, self.width-1, self.height-self.footer_start)) + def set_theme(self, theme): + log.debug("theme set to %s", theme) self.theme = theme if theme.font_main_override == False: pass if theme.font_footer_override == False: pass - def generate_preview(self): self.calculate_default(QtCore.QSize(800,600)) - frame = QtGui.QPixmap(self.width, self.height) - renderer=Renderer(None) - renderer.set_paint_dest(frame) - - renderer.set_theme(self.theme) - renderer.set_text_rectangle(QtCore.QRect(10,0, self.width-1, self.height-1), + self.renderer.set_text_rectangle(QtCore.QRect(10,0, self.width-1, self.height-1), QtCore.QRect(10,self.footer_start, self.width-1, self.height-self.footer_start)) + frame = QtGui.QPixmap(self.width, self.height) + self.renderer.set_paint_dest(frame) + lines=[] lines.append(u'Amazing Grace!') lines.append(u'How sweet the sound') @@ -69,13 +78,34 @@ class RenderManager: lines1=[] lines1.append(u'Amazing Grace (John Newton)' ) lines1.append(u'CCLI xxx (c)Openlp.org') - answer=renderer.render_lines(lines, lines1) + answer=self.renderer.render_lines(lines, lines1) return frame - def generate_bible(self): - pass + def format_slide(self, words, footer): + self.calculate_default(QtCore.QSize(800,600)) + + self.renderer.set_text_rectangle(QtCore.QRect(10,0, self.width-1, self.height-1), + QtCore.QRect(10,self.footer_start, self.width-1, self.height-self.footer_start)) + + return self.renderer.format_slide(words, footer) + + def generate_slide(self,main_text, footer_text, preview=True): + if preview == True: + self.calculate_default(QtCore.QSize(800,600)) + + self.renderer.set_text_rectangle(QtCore.QRect(10,0, self.width-1, self.height-1), + QtCore.QRect(10,self.footer_start, self.width-1, self.height-self.footer_start)) + + #frame = QtGui.QPixmap(self.width, self.height) + #self.renderer.set_paint_dest(frame) + print main_text + answer=self.renderer.render_lines(main_text, footer_text) + return self.frame def calculate_default(self, screen): self.width = screen.width() self.height = screen.height() self.footer_start = int(self.height*0.95) # 95% is start of footer + #update the rederer frame + self.frame = QtGui.QPixmap(self.width, self.height) + self.renderer.set_paint_dest(self.frame) diff --git a/openlp/core/ui/mainwindow.py b/openlp/core/ui/mainwindow.py index ec5dce759..fce956780 100644 --- a/openlp/core/ui/mainwindow.py +++ b/openlp/core/ui/mainwindow.py @@ -44,7 +44,6 @@ class MainWindow(object): self.alert_form = AlertForm() self.about_form = AboutForm() self.settings_form = SettingsForm(self.screen_list) - self.RenderManager = RenderManager(self.screen_list) pluginpath = os.path.split(os.path.abspath(__file__))[0] pluginpath = os.path.abspath(os.path.join(pluginpath, '..', '..','plugins')) @@ -53,6 +52,11 @@ class MainWindow(object): self.setupUi() + #warning cyclic dependency + #RenderManager needs to call ThemeManager and + #ThemeManager needs to call RenderManager + self.RenderManager = RenderManager(self.ThemeManagerContents, self.screen_list) + log.info(u'Load Plugins') self.plugin_helpers[u'preview'] = self.PreviewController self.plugin_helpers[u'live'] = self.LiveController @@ -87,6 +91,7 @@ class MainWindow(object): log.info(u'Load Themes') self.ThemeManagerContents.setEventManager(self.EventManager) self.ThemeManagerContents.setRenderManager(self.RenderManager) + self.ServiceManagerContents.setRenderManager(self.RenderManager) self.ThemeManagerContents.setServiceManager(self.ServiceManagerContents) self.ThemeManagerContents.loadThemes() diff --git a/openlp/core/ui/servicemanager.py b/openlp/core/ui/servicemanager.py index 1df8f163d..81c272d17 100644 --- a/openlp/core/ui/servicemanager.py +++ b/openlp/core/ui/servicemanager.py @@ -29,6 +29,7 @@ from PyQt4.QtGui import * # from openlp.core.ui import AboutForm, AlertForm, SettingsForm, SlideController from openlp.core.lib import OpenLPToolbar from openlp.core.lib import ServiceItem +from openlp.core.lib import RenderManager # from openlp.core import PluginManager import logging @@ -138,6 +139,14 @@ class ServiceManager(QWidget): self.service_data=ServiceData() self.TreeView.setModel(self.service_data) self.Layout.addWidget(self.TreeView) + QtCore.QObject.connect(self.ThemeComboBox, + QtCore.SIGNAL("activated(int)"), self.onThemeComboBoxSelected) + + def setRenderManager(self, renderManager): + self.renderManager = renderManager + + def onThemeComboBoxSelected(self, currentIndex): + self.renderManager.set_default_theme(self.ThemeComboBox.currentText()) def addServiceItem(self, item): """Adds service item""" @@ -191,3 +200,5 @@ class ServiceManager(QWidget): self.ThemeComboBox.clear() for theme in theme_list: self.ThemeComboBox.addItem(theme) + self.renderManager.set_default_theme(self.ThemeComboBox.currentText()) + diff --git a/openlp/core/ui/slidecontroller.py b/openlp/core/ui/slidecontroller.py index 1f11dcf08..08593fe07 100644 --- a/openlp/core/ui/slidecontroller.py +++ b/openlp/core/ui/slidecontroller.py @@ -3,7 +3,7 @@ """ OpenLP - Open Source Lyrics Projection Copyright (c) 2008 Raoul Snyman -Portions copyright (c) 2008 Martin Thompson, Tim Bentley, +Portions copyright (c) 2008-2009 Martin Thompson, Tim Bentley, This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software @@ -27,7 +27,7 @@ class SlideController(QtGui.QWidget): self.Pane = QtGui.QWidget(control_splitter) self.Splitter = QtGui.QSplitter(self.Pane) self.Splitter.setOrientation(QtCore.Qt.Vertical) - + self.PaneLayout = QtGui.QVBoxLayout(self.Pane) self.PaneLayout.addWidget(self.Splitter) self.PaneLayout.setSpacing(50) @@ -41,6 +41,23 @@ class SlideController(QtGui.QWidget): self.Controller.setGeometry(QtCore.QRect(0, 0, 828, 536)) self.Controller.setWidget(self.ControllerContents) - self.Screen = QtGui.QGraphicsView(self.Splitter) - self.Screen.setMaximumSize(QtCore.QSize(16777215, 250)) + #self.Screen = QtGui.QGraphicsView(self.Splitter) + #self.Screen.setMaximumSize(QtCore.QSize(16777215, 250)) + + self.ThemePreview = QtGui.QLabel(self.Splitter) + sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Fixed, QtGui.QSizePolicy.Fixed) + sizePolicy.setHorizontalStretch(0) + sizePolicy.setVerticalStretch(0) + sizePolicy.setHeightForWidth(self.ThemePreview.sizePolicy().hasHeightForWidth()) + self.ThemePreview.setSizePolicy(sizePolicy) + self.ThemePreview.setMinimumSize(QtCore.QSize(250, 190)) + self.ThemePreview.setFrameShape(QtGui.QFrame.WinPanel) + self.ThemePreview.setFrameShadow(QtGui.QFrame.Sunken) + self.ThemePreview.setLineWidth(1) + self.ThemePreview.setScaledContents(True) + self.ThemePreview.setObjectName("ThemePreview") + + + def previewFrame(self, frame): + self.ThemePreview.setPixmap(frame) diff --git a/openlp/core/ui/splashscreen.py b/openlp/core/ui/splashscreen.py index f045a4183..7d4fea3d5 100644 --- a/openlp/core/ui/splashscreen.py +++ b/openlp/core/ui/splashscreen.py @@ -20,12 +20,15 @@ Place, Suite 330, Boston, MA 02111-1307 USA from PyQt4 import QtCore, QtGui -from openlp.core.resources import * +#from openlp.core.resources import * +from openlp.core import translate class SplashScreen(object): - def __init__(self): + def __init__(self, version): self.splash_screen = QtGui.QSplashScreen() self.setupUi() + starting = translate('SplashScreen',u'Starting') + self.message=starting+u'..... '+version def setupUi(self): self.splash_screen.setObjectName("splash_screen") @@ -60,7 +63,7 @@ class SplashScreen(object): def show(self): self.splash_screen.show() - self.splash_screen.showMessage(u'Starting...', QtCore.Qt.AlignLeft | QtCore.Qt.AlignBottom, QtCore.Qt.black) + self.splash_screen.showMessage(self.message, QtCore.Qt.AlignLeft | QtCore.Qt.AlignBottom, QtCore.Qt.black) self.splash_screen.repaint() def finish(self, widget): diff --git a/openlp/core/ui/thememanager.py b/openlp/core/ui/thememanager.py index 406097d8f..01ddf0492 100644 --- a/openlp/core/ui/thememanager.py +++ b/openlp/core/ui/thememanager.py @@ -33,6 +33,7 @@ from PyQt4.QtGui import * from openlp.core.ui import AmendThemeForm from openlp.core.ui import ServiceManager from openlp.core import translate +from openlp.core import fileToXML from openlp.core.theme import Theme from openlp.core.lib import Event from openlp.core.lib import EventType @@ -248,6 +249,13 @@ class ThemeManager(QWidget): def getThemes(self): return self.Theme_data.getList() + def getThemeData(self, themename): + xml_file = os.path.join(self.path, str(themename), str(themename)+u'.xml') + xml = fileToXML(xml_file) + theme = ThemeXML() + theme.parse(xml) + return theme + def checkThemesExists(self, dir): log.debug(u'check themes') if os.path.exists(dir) == False: diff --git a/openlp/plugins/bibles/lib/mediaitem.py b/openlp/plugins/bibles/lib/mediaitem.py index a51969ce9..e6fc55ee4 100644 --- a/openlp/plugins/bibles/lib/mediaitem.py +++ b/openlp/plugins/bibles/lib/mediaitem.py @@ -48,19 +48,19 @@ class BibleMediaItem(MediaManagerItem): # Create buttons for the toolbar ## New Bible Button ## self.addToolbarButton( - translate(u'BibleMediaItem','New Bible'), + translate(u'BibleMediaItem','New Bible'), translate(u'BibleMediaItem','Register a new Bible'), ':/themes/theme_import.png', self.onBibleNewClick, 'BibleNewItem') ## Separator Line ## self.addToolbarSeparator() ## Preview Bible Button ## self.addToolbarButton( - translate(u'BibleMediaItem','Preview Bible'), + translate(u'BibleMediaItem','Preview Bible'), translate(u'BibleMediaItem','Preview the selected Bible Verse'), ':/system/system_preview.png', self.onBiblePreviewClick, 'BiblePreviewItem') ## Live Bible Button ## self.addToolbarButton( - translate(u'BibleMediaItem','Go Live'), + translate(u'BibleMediaItem','Go Live'), translate(u'BibleMediaItem','Send the selected Bible Verse(s) live'), ':/system/system_live.png', self.onBibleLiveClick, 'BibleLiveItem') ## Add Bible Button ## @@ -183,9 +183,10 @@ class BibleMediaItem(MediaManagerItem): self.BibleListView.setAlternatingRowColors(True) self.BibleListData = TextListData() self.BibleListView.setModel(self.BibleListData) - + self.BibleListView.setSelectionMode(2) + self.PageLayout.addWidget(self.BibleListView) - + # Combo Boxes QtCore.QObject.connect(self.AdvancedVersionComboBox, QtCore.SIGNAL("activated(int)"), self.onAdvancedVersionComboBox) @@ -215,7 +216,7 @@ class BibleMediaItem(MediaManagerItem): translate(u'BibleMediaItem',u'&Add to Service'), self.onBibleAddClick)) def retranslateUi(self): - log.debug(u'retranslateUi') + log.debug(u'retranslateUi') self.QuickVersionLabel.setText(translate(u'BibleMediaItem', u'Version:')) self.QuickSearchLabel.setText(translate(u'BibleMediaItem', u'Search Type:')) self.QuickSearchLabel.setText(translate(u'BibleMediaItem', u'Find:')) @@ -241,15 +242,15 @@ class BibleMediaItem(MediaManagerItem): self.loadBibles() def loadBibles(self): - log.debug(u'Loading Bibles') + log.debug(u'Loading Bibles') self.QuickVersionComboBox.clear() self.AdvancedVersionComboBox.clear() - + bibles = self.parent.biblemanager.get_bibles(u'full') - + for bible in bibles: # load bibles into the combo boxes self.QuickVersionComboBox.addItem(bible) - + bibles = self.parent.biblemanager.get_bibles(u'partial') # Without HTTP first = True for bible in bibles: # load bibles into the combo boxes @@ -328,6 +329,8 @@ class BibleMediaItem(MediaManagerItem): log.debug(u'Bible Preview Button pressed') items = self.BibleListView.selectedIndexes() old_chapter = '' + main_lines=[] + footer_lines = [] for item in items: text = self.BibleListData.getValue(item) verse = text[:text.find("(")] @@ -348,16 +351,19 @@ class BibleMediaItem(MediaManagerItem): else: loc = self.formatVerse(old_chapter, chapter, verse, u'', u'') old_chapter = chapter - print book - print loc - print text + main_lines.append(loc + u' '+text) + if len(footer_lines) <= 1: + footer_lines.append(book) + + frame=self.parent.render_manager.generate_slide(main_lines, footer_lines) + self.parent.preview_controller.previewFrame(frame) def formatVerse(self, old_chapter, chapter, verse, opening, closing): loc = opening if old_chapter != chapter: loc += chapter + u':' - elif not self.parent.bibles_tab.new_chapter_check: - loc += chapter + u':' + elif not self.parent.bibles_tab.show_new_chapters: + loc += chapter + u':' loc += verse loc += closing return loc diff --git a/openlp/plugins/custom/lib/mediaitem.py b/openlp/plugins/custom/lib/mediaitem.py index 2f80ea42f..2ca7314eb 100644 --- a/openlp/plugins/custom/lib/mediaitem.py +++ b/openlp/plugins/custom/lib/mediaitem.py @@ -23,7 +23,7 @@ from PyQt4 import QtCore, QtGui from openlp.core import translate from openlp.core.lib import MediaManagerItem -from openlp.core.resources import * +from openlp.core.lib import SongXMLParser from openlp.plugins.custom.lib import TextListData @@ -44,7 +44,7 @@ class CustomMediaItem(MediaManagerItem): # Create buttons for the toolbar ## New Custom Button ## self.addToolbarButton( - translate('CustomMediaItem',u'New Custom Item'), + translate('CustomMediaItem',u'New Custom Item'), translate('CustomMediaItem',u'Add a new Custom Item'), ':/custom/custom_new.png', self.onCustomNewClick, 'CustomNewItem') ## Edit Custom Button ## @@ -72,7 +72,7 @@ class CustomMediaItem(MediaManagerItem): ## Add Custom Button ## self.addToolbarButton( translate('CustomMediaItem',u'Add Custom To Service'), - translate('CustomMediaItem',u'Add the selected Custom(s) to the service'), + translate('CustomMediaItem',u'Add the selected Custom(s) to the service'), ':/system/system_add.png', self.onCustomAddClick, 'CustomAddItem') # Add the Customlist widget self.CustomWidget = QtGui.QWidget(self) @@ -82,7 +82,7 @@ class CustomMediaItem(MediaManagerItem): sizePolicy.setHeightForWidth(self.CustomWidget.sizePolicy().hasHeightForWidth()) self.CustomWidget.setSizePolicy(sizePolicy) self.CustomWidget.setObjectName(u'CustomWidget') - + # self.SearchLayout = QtGui.QGridLayout(self.CustomWidget) # self.SearchLayout.setObjectName('SearchLayout') # self.SearchTextLabel = QtGui.QLabel(self.CustomWidget) @@ -92,7 +92,7 @@ class CustomMediaItem(MediaManagerItem): # self.SearchTextEdit = QtGui.QLineEdit(self.CustomWidget) # self.SearchTextEdit.setObjectName('SearchTextEdit') # self.SearchLayout.addWidget(self.SearchTextEdit, 2, 1, 1, 2) -# +# # self.ClearTextButton = QtGui.QPushButton(self.CustomWidget) # self.ClearTextButton.setObjectName('ClearTextButton') # @@ -102,22 +102,22 @@ class CustomMediaItem(MediaManagerItem): # self.SearchLayout.addWidget(self.SearchTextButton, 3, 2, 1, 1) # Add the Custom widget to the page layout self.PageLayout.addWidget(self.CustomWidget) - + self.CustomListView = QtGui.QListView() self.CustomListView.setAlternatingRowColors(True) self.CustomListData = TextListData() self.CustomListView.setModel(self.CustomListData) - + self.PageLayout.addWidget(self.CustomListView) # Signals -# QtCore.QObject.connect(self.SearchTextButton, +# QtCore.QObject.connect(self.SearchTextButton, # QtCore.SIGNAL("pressed()"), self.onSearchTextButtonClick) -# QtCore.QObject.connect(self.ClearTextButton, +# QtCore.QObject.connect(self.ClearTextButton, # QtCore.SIGNAL("pressed()"), self.onClearTextButtonClick) -# QtCore.QObject.connect(self.SearchTextEdit, +# QtCore.QObject.connect(self.SearchTextEdit, # QtCore.SIGNAL("textChanged(const QString&)"), self.onSearchTextEditChanged) -# QtCore.QObject.connect(self.CustomListView, +# QtCore.QObject.connect(self.CustomListView, # QtCore.SIGNAL("itemPressed(QTableWidgetItem * item)"), self.onCustomSelected) #define and add the context menu @@ -135,14 +135,14 @@ class CustomMediaItem(MediaManagerItem): self.CustomListView.addAction(self.contextMenuAction( self.CustomListView, ':/system/system_add.png', translate('CustomMediaItem',u'&Add to Service'), self.onCustomEditClick)) - + # def retranslateUi(self): # self.ClearTextButton.setText(translate('CustomMediaItem', u'Clear')) -# self.SearchTextButton.setText(translate('CustomMediaItem', u'Search')) - +# self.SearchTextButton.setText(translate('CustomMediaItem', u'Search')) + def initialise(self): self.loadCustomList(self.parent.custommanager.get_all_slides()) - + def loadCustomList(self, list): self.CustomListData.resetStore() for CustomSlide in list: @@ -166,9 +166,9 @@ class CustomMediaItem(MediaManagerItem): self._display_results(search_results) def onCustomNewClick(self): - self.parent.edit_custom_form.loadCustom(0) + self.parent.edit_custom_form.loadCustom(0) self.parent.edit_custom_form.exec_() - self.initialise() + self.initialise() def onCustomEditClick(self): indexes = self.CustomListView.selectedIndexes() @@ -185,7 +185,25 @@ class CustomMediaItem(MediaManagerItem): self.CustomListData.deleteRow(index) def onCustomPreviewClick(self): - pass + indexes = self.CustomListView.selectedIndexes() + main_lines=[] + footer_lines = [] + slide = None + for index in indexes: + id = self.CustomListData.getId(index) + customSlide = self.parent.custommanager.get_custom(id) + title = customSlide.title + credit = customSlide.title + + songXML=SongXMLParser(customSlide.text) + verseList = songXML.get_verses() + for verse in verseList: + slide = self.parent.render_manager.format_slide(verse[1], False) + + footer_lines.append(title + u' '+ credit) + + frame=self.parent.render_manager.generate_slide(slide, footer_lines) + self.parent.preview_controller.previewFrame(frame) def onCustomLiveClick(self): pass diff --git a/openlp/plugins/videos/lib/filelistdata.py b/openlp/plugins/videos/lib/filelistdata.py index 303ccb802..df4a5eb69 100644 --- a/openlp/plugins/videos/lib/filelistdata.py +++ b/openlp/plugins/videos/lib/filelistdata.py @@ -80,3 +80,7 @@ class FileListData(QAbstractListModel): def getFilename(self, index): row = index.row() return self.items[row][0] + + def getValue(self, index): + row = index.row() + return self.items[row][0] diff --git a/openlp/plugins/videos/lib/mediaitem.py b/openlp/plugins/videos/lib/mediaitem.py index 07b29ec38..54d9114ae 100644 --- a/openlp/plugins/videos/lib/mediaitem.py +++ b/openlp/plugins/videos/lib/mediaitem.py @@ -24,7 +24,6 @@ from PyQt4 import QtCore, QtGui from openlp.core import translate from openlp.core.lib import MediaManagerItem -from openlp.core.resources import * from openlp.plugins.videos.lib import VideoTab from openlp.plugins.videos.lib import FileListData @@ -40,93 +39,97 @@ class VideoMediaItem(MediaManagerItem): def __init__(self, parent, icon, title): MediaManagerItem.__init__(self, parent, icon, title) - def setupUi(self): + def setupUi(self): # Add a toolbar self.addToolbar() # Create buttons for the toolbar ## New Video Button ## self.addToolbarButton( - translate('VideoMediaItem',u'New Video'), + translate('VideoMediaItem',u'New Video'), translate('VideoMediaItem',u'Load videos into openlp.org'), ':/videos/video_load.png', self.onVideoNewClick, 'VideoNewItem') ## Delete Video Button ## self.addToolbarButton( - translate('VideoMediaItem',u'Delete Video'), + translate('VideoMediaItem',u'Delete Video'), translate('VideoMediaItem',u'Delete the selected video'), ':/videos/video_delete.png', self.onVideoDeleteClick, 'VideoDeleteItem') ## Separator Line ## self.addToolbarSeparator() ## Preview Video Button ## self.addToolbarButton( - translate('VideoMediaItem',u'Preview Video'), + translate('VideoMediaItem',u'Preview Video'), translate('VideoMediaItem',u'Preview the selected video'), ':/system/system_preview.png', self.onVideoPreviewClick, 'VideoPreviewItem') ## Live Video Button ## self.addToolbarButton( - translate('VideoMediaItem',u'Go Live'), + translate('VideoMediaItem',u'Go Live'), translate('VideoMediaItem',u'Send the selected video live'), ':/system/system_live.png', self.onVideoLiveClick, 'VideoLiveItem') ## Add Video Button ## self.addToolbarButton( translate('VideoMediaItem',u'Add Video To Service'), - translate('VideoMediaItem',u'Add the selected video(s) to the service'), + translate('VideoMediaItem',u'Add the selected video(s) to the service'), ':/system/system_add.png',self.onVideoAddClick, 'VideoAddItem') ## Add the videolist widget ## - + self.VideoListView = QtGui.QListView() self.VideoListView.setAlternatingRowColors(True) self.VideoListData = FileListData() self.VideoListView.setModel(self.VideoListData) - + self.PageLayout.addWidget(self.VideoListView) - + #define and add the context menu self.VideoListView.setContextMenuPolicy(QtCore.Qt.ActionsContextMenu) self.VideoListView.addAction(self.contextMenuAction( - self.VideoListView, ':/system/system_preview.png', + self.VideoListView, ':/system/system_preview.png', translate('VideoMediaItem',u'&Preview Video'), self.onVideoPreviewClick)) self.VideoListView.addAction(self.contextMenuAction( - self.VideoListView, ':/system/system_live.png', + self.VideoListView, ':/system/system_live.png', translate('VideoMediaItem',u'&Show Live'), self.onVideoLiveClick)) self.VideoListView.addAction(self.contextMenuAction( - self.VideoListView, ':/system/system_add.png', + self.VideoListView, ':/system/system_add.png', translate('VideoMediaItem',u'&Add to Service'), self.onVideoAddClick)) - + def initialise(self): list = self.parent.config.load_list(u'videos') self.loadVideoList(list) def onVideoNewClick(self): - files = QtGui.QFileDialog.getOpenFileNames(None, - translate('VideoMediaItem', u'Select Video(s)'), + files = QtGui.QFileDialog.getOpenFileNames(None, + translate('VideoMediaItem', u'Select Video(s)'), self.parent.config.get_last_dir(), u'Images (*.avi *.mpeg)') if len(files) > 0: self.loadVideoList(files) dir, filename = os.path.split(str(files[0])) self.parent.config.set_last_dir(dir) self.parent.config.set_list(u'videos', self.VideoListData.getFileList()) - + def getFileList(self): filelist = [item[0] for item in self.VideoListView]; - return filelist + return filelist def loadVideoList(self, list): for files in list: self.VideoListData.addRow(files) - + def onVideoDeleteClick(self): indexes = self.VideoListView.selectedIndexes() for index in indexes: current_row = int(index.row()) self.VideoListData.removeRow(current_row) - self.parent.config.set_list(u'videos', self.VideoListData.getFileList()) + self.parent.config.set_list(u'videos', self.VideoListData.getFileList()) def onVideoPreviewClick(self): - pass + log.debug(u'Video Preview Button pressed') + items = self.VideoListView.selectedIndexes() + for item in items: + text = self.VideoListData.getValue(item) + print text def onVideoLiveClick(self): pass def onVideoAddClick(self): - pass + pass