diff --git a/openlp/core/ui/listpreviewwidget.py b/openlp/core/ui/listpreviewwidget.py index fb94555fd..e9025a255 100644 --- a/openlp/core/ui/listpreviewwidget.py +++ b/openlp/core/ui/listpreviewwidget.py @@ -35,72 +35,61 @@ from PyQt4 import QtCore, QtGui from openlp.core.lib import ImageSource, Registry, ServiceItem -class ListPreviewWidget(QtCore.QObject): - clicked = QtCore.pyqtSignal() - double_clicked = QtCore.pyqtSignal() - - def __init__(self, parent, is_live): - super(QtCore.QObject, self).__init__() - self.is_live = is_live - self.preview_table_widget = QtGui.QTableWidget(parent) - self.preview_table_widget.setColumnCount(1) - self.preview_table_widget.horizontalHeader().setVisible(False) - self.preview_table_widget.setColumnWidth(0, parent.width()) - self.preview_table_widget.setObjectName(u'preview_table_widget') - self.preview_table_widget.setSelectionBehavior(QtGui.QAbstractItemView.SelectRows) - self.preview_table_widget.setSelectionMode(QtGui.QAbstractItemView.SingleSelection) - self.preview_table_widget.setEditTriggers(QtGui.QAbstractItemView.NoEditTriggers) - self.preview_table_widget.setHorizontalScrollBarPolicy(QtCore.Qt.ScrollBarAlwaysOff) - self.preview_table_widget.setAlternatingRowColors(True) +class ListPreviewWidget(QtGui.QTableWidget): + def __init__(self, parent, screen_ratio): + super(QtGui.QTableWidget, self).__init__(parent) self.service_item = ServiceItem() - if not self.is_live: - self.preview_table_widget.doubleClicked.connect(self._double_clicked) - self.preview_table_widget.clicked.connect(self._clicked) + self.screen_ratio = screen_ratio - def _clicked(self): - self.clicked.emit() + self.setColumnCount(1) + self.horizontalHeader().setVisible(False) + self.setColumnWidth(0, parent.width()) + self.setSelectionBehavior(QtGui.QAbstractItemView.SelectRows) + self.setSelectionMode(QtGui.QAbstractItemView.SingleSelection) + self.setEditTriggers(QtGui.QAbstractItemView.NoEditTriggers) + self.setHorizontalScrollBarPolicy(QtCore.Qt.ScrollBarAlwaysOff) + self.setAlternatingRowColors(True) - def _double_clicked(self): - self.double_clicked.emit() + def resizeEvent(self, QResizeEvent): + self.__recalculate_layout() - def get_preview_widget(self): - return self.preview_table_widget - - def set_active(self, active): - if active: - self.preview_table_widget.show() - else: - self.preview_table_widget.hide() - - def preview_size_changed(self, width, ratio): - """ - Takes care of the SlidePreview's size. Is called when one of the the - splitters is moved or when the screen size is changed. Note, that this - method is (also) called frequently from the mainwindow *paintEvent*. - """ - self.preview_table_widget.setColumnWidth(0, self.preview_table_widget.viewport().size().width()) + def __recalculate_layout(self): + self.setColumnWidth(0, self.viewport().width()) if self.service_item: # Sort out songs, bibles, etc. if self.service_item.is_text(): - self.preview_table_widget.resizeRowsToContents() + self.resizeRowsToContents() else: # Sort out image heights. for framenumber in range(len(self.service_item.get_frames())): - self.preview_table_widget.setRowHeight(framenumber, width / ratio) + #self.setRowHeight(framenumber, width / ratio) + height = self.viewport().width() / self.screen_ratio + self.setRowHeight(framenumber, height) - def replace_service_manager_item(self, service_item, width, ratio, slideno): + #width = self.main_window.controlSplitter.sizes()[self.split] + def screen_size_changed(self, screen_ratio): + self.screen_ratio = screen_ratio + self.__recalculate_layout() + + def set_active(self, active): + if active: + self.show() + else: + self.hide() + + def replace_service_manager_item(self, service_item, width, slideno): """ Loads a ServiceItem into the system from ServiceManager Display the slide number passed """ self.service_item = service_item - self.preview_table_widget.clear() - self.preview_table_widget.setRowCount(0) - self.preview_table_widget.setColumnWidth(0, width) + self.clear() + self.setRowCount(0) + self.setColumnWidth(0, width) row = 0 text = [] for framenumber, frame in enumerate(self.service_item.get_frames()): - self.preview_table_widget.setRowCount(self.preview_table_widget.rowCount() + 1) + self.setRowCount(self.rowCount() + 1) item = QtGui.QTableWidgetItem() slideHeight = 0 if self.service_item.is_text(): @@ -129,26 +118,26 @@ class ListPreviewWidget(QtCore.QObject): ImageSource.ImagePlugin) image = self.image_manager.get_image(frame[u'path'], ImageSource.ImagePlugin) label.setPixmap(QtGui.QPixmap.fromImage(image)) - self.preview_table_widget.setCellWidget(framenumber, 0, label) - slideHeight = width / ratio + self.setCellWidget(framenumber, 0, label) + slideHeight = width / self.screen_ratio row += 1 text.append(unicode(row)) - self.preview_table_widget.setItem(framenumber, 0, item) + self.setItem(framenumber, 0, item) if slideHeight: - self.preview_table_widget.setRowHeight(framenumber, slideHeight) - self.preview_table_widget.setVerticalHeaderLabels(text) + self.setRowHeight(framenumber, slideHeight) + self.setVerticalHeaderLabels(text) if self.service_item.is_text(): - self.preview_table_widget.resizeRowsToContents() - self.preview_table_widget.setColumnWidth(0, self.preview_table_widget.viewport().size().width()) + self.resizeRowsToContents() + self.setColumnWidth(0, self.viewport().width()) #stuff happens here, perhaps the setFocus() has to happen later... - self.preview_table_widget.setFocus() + self.setFocus() def update_preview_selection(self, row): """ Utility method to update the selected slide in the list. """ - if row >= self.preview_table_widget.rowCount(): - self.preview_table_widget.selectRow(self.preview_table_widget.rowCount() - 1) + if row >= self.rowCount(): + self.selectRow(self.rowCount() - 1) else: self.check_update_selected_slide(row) @@ -156,15 +145,15 @@ class ListPreviewWidget(QtCore.QObject): """ Check if this slide has been updated """ - if row + 1 < self.preview_table_widget.rowCount(): - self.preview_table_widget.scrollToItem(self.preview_table_widget.item(row + 1, 0)) - self.preview_table_widget.selectRow(row) + if row + 1 < self.rowCount(): + self.scrollToItem(self.item(row + 1, 0)) + self.selectRow(row) def currentRow(self): - return self.preview_table_widget.currentRow() + return super(ListPreviewWidget, self).currentRow() def rowCount(self): - return self.preview_table_widget.rowCount() + return super(ListPreviewWidget, self).rowCount() def _get_image_manager(self): """ diff --git a/openlp/core/ui/servicemanager.py b/openlp/core/ui/servicemanager.py index 4aa7c5307..51e3f790d 100644 --- a/openlp/core/ui/servicemanager.py +++ b/openlp/core/ui/servicemanager.py @@ -1379,7 +1379,7 @@ class ServiceManager(QtGui.QWidget, ServiceManagerDialog): self.preview_controller.addServiceManagerItem(self.service_items[item][u'service_item'], 0) next_item = self.service_manager_list.topLevelItem(item) self.service_manager_list.setCurrentItem(next_item) - self.live_controller.preview_widget.get_preview_widget().setFocus() + self.live_controller.preview_widget.setFocus() else: critical_error_message_box(translate('OpenLP.ServiceManager', 'Missing Display Handler'), translate('OpenLP.ServiceManager', diff --git a/openlp/core/ui/slidecontroller.py b/openlp/core/ui/slidecontroller.py index d1694ca56..6e5e5c8b7 100644 --- a/openlp/core/ui/slidecontroller.py +++ b/openlp/core/ui/slidecontroller.py @@ -158,8 +158,8 @@ class SlideController(DisplayController): self.controller_layout.setSpacing(0) self.controller_layout.setMargin(0) # Controller list view - self.preview_widget = ListPreviewWidget(self, self.is_live) - self.controller_layout.addWidget(self.preview_widget.get_preview_widget()) + self.preview_widget = ListPreviewWidget(self, self.ratio) + self.controller_layout.addWidget(self.preview_widget) # Build the full toolbar self.toolbar = OpenLPToolbar(self) size_toolbar_policy = QtGui.QSizePolicy(QtGui.QSizePolicy.Fixed, QtGui.QSizePolicy.Fixed) @@ -356,7 +356,7 @@ class SlideController(DisplayController): self.toolbar.set_widget_visible(self.loop_list, False) self.toolbar.set_widget_visible(self.wide_menu, False) else: - self.preview_widget.double_clicked.connect(self.onGoLiveClick) + self.preview_widget.doubleClicked.connect(self.onGoLiveClick) self.toolbar.set_widget_visible([u'editSong'], False) if self.is_live: self.setLiveHotkeys(self) @@ -524,6 +524,7 @@ class SlideController(DisplayController): self.ratio = 1 self.media_controller.setup_display(self.display, False) self.previewSizeChanged() + self.preview_widget.screen_size_changed(self.ratio) self.preview_display.setup() service_item = ServiceItem() self.preview_display.web_view.setHtml(build_html(service_item, self.preview_display.screen, None, self.is_live, @@ -562,8 +563,6 @@ class SlideController(DisplayController): self.preview_display.screen = { u'size': self.preview_display.geometry()} # Make sure that the frames have the correct size. - width = self.main_window.controlSplitter.sizes()[self.split] - self.preview_widget.preview_size_changed(width, self.ratio) self.onControllerSizeChanged(self.controller.width()) def onControllerSizeChanged(self, width): @@ -777,7 +776,7 @@ class SlideController(DisplayController): slideHeight = width * (1 / self.ratio) row += 1 self.slideList[unicode(row)] = row - 1 - self.preview_widget.replace_service_manager_item(self.service_item, width, self.ratio, slideno) + self.preview_widget.replace_service_manager_item(self.service_item, width, slideno) self.preview_widget.update_preview_selection(slideno) self.enableToolBar(service_item) # Pass to display for viewing.