Use inheritance instead of composition. Some interface cleanup.

This commit is contained in:
Patrick Zimmermann 2013-04-18 22:15:44 +02:00
parent d687288336
commit 25db18d34c
3 changed files with 57 additions and 69 deletions

View File

@ -35,72 +35,61 @@ from PyQt4 import QtCore, QtGui
from openlp.core.lib import ImageSource, Registry, ServiceItem from openlp.core.lib import ImageSource, Registry, ServiceItem
class ListPreviewWidget(QtCore.QObject): class ListPreviewWidget(QtGui.QTableWidget):
clicked = QtCore.pyqtSignal() def __init__(self, parent, screen_ratio):
double_clicked = QtCore.pyqtSignal() super(QtGui.QTableWidget, self).__init__(parent)
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)
self.service_item = ServiceItem() self.service_item = ServiceItem()
if not self.is_live: self.screen_ratio = screen_ratio
self.preview_table_widget.doubleClicked.connect(self._double_clicked)
self.preview_table_widget.clicked.connect(self._clicked)
def _clicked(self): self.setColumnCount(1)
self.clicked.emit() 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): def resizeEvent(self, QResizeEvent):
self.double_clicked.emit() self.__recalculate_layout()
def get_preview_widget(self): def __recalculate_layout(self):
return self.preview_table_widget self.setColumnWidth(0, self.viewport().width())
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())
if self.service_item: if self.service_item:
# Sort out songs, bibles, etc. # Sort out songs, bibles, etc.
if self.service_item.is_text(): if self.service_item.is_text():
self.preview_table_widget.resizeRowsToContents() self.resizeRowsToContents()
else: else:
# Sort out image heights. # Sort out image heights.
for framenumber in range(len(self.service_item.get_frames())): 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 Loads a ServiceItem into the system from ServiceManager
Display the slide number passed Display the slide number passed
""" """
self.service_item = service_item self.service_item = service_item
self.preview_table_widget.clear() self.clear()
self.preview_table_widget.setRowCount(0) self.setRowCount(0)
self.preview_table_widget.setColumnWidth(0, width) self.setColumnWidth(0, width)
row = 0 row = 0
text = [] text = []
for framenumber, frame in enumerate(self.service_item.get_frames()): 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() item = QtGui.QTableWidgetItem()
slideHeight = 0 slideHeight = 0
if self.service_item.is_text(): if self.service_item.is_text():
@ -129,26 +118,26 @@ class ListPreviewWidget(QtCore.QObject):
ImageSource.ImagePlugin) ImageSource.ImagePlugin)
image = self.image_manager.get_image(frame[u'path'], ImageSource.ImagePlugin) image = self.image_manager.get_image(frame[u'path'], ImageSource.ImagePlugin)
label.setPixmap(QtGui.QPixmap.fromImage(image)) label.setPixmap(QtGui.QPixmap.fromImage(image))
self.preview_table_widget.setCellWidget(framenumber, 0, label) self.setCellWidget(framenumber, 0, label)
slideHeight = width / ratio slideHeight = width / self.screen_ratio
row += 1 row += 1
text.append(unicode(row)) text.append(unicode(row))
self.preview_table_widget.setItem(framenumber, 0, item) self.setItem(framenumber, 0, item)
if slideHeight: if slideHeight:
self.preview_table_widget.setRowHeight(framenumber, slideHeight) self.setRowHeight(framenumber, slideHeight)
self.preview_table_widget.setVerticalHeaderLabels(text) self.setVerticalHeaderLabels(text)
if self.service_item.is_text(): if self.service_item.is_text():
self.preview_table_widget.resizeRowsToContents() self.resizeRowsToContents()
self.preview_table_widget.setColumnWidth(0, self.preview_table_widget.viewport().size().width()) self.setColumnWidth(0, self.viewport().width())
#stuff happens here, perhaps the setFocus() has to happen later... #stuff happens here, perhaps the setFocus() has to happen later...
self.preview_table_widget.setFocus() self.setFocus()
def update_preview_selection(self, row): def update_preview_selection(self, row):
""" """
Utility method to update the selected slide in the list. Utility method to update the selected slide in the list.
""" """
if row >= self.preview_table_widget.rowCount(): if row >= self.rowCount():
self.preview_table_widget.selectRow(self.preview_table_widget.rowCount() - 1) self.selectRow(self.rowCount() - 1)
else: else:
self.check_update_selected_slide(row) self.check_update_selected_slide(row)
@ -156,15 +145,15 @@ class ListPreviewWidget(QtCore.QObject):
""" """
Check if this slide has been updated Check if this slide has been updated
""" """
if row + 1 < self.preview_table_widget.rowCount(): if row + 1 < self.rowCount():
self.preview_table_widget.scrollToItem(self.preview_table_widget.item(row + 1, 0)) self.scrollToItem(self.item(row + 1, 0))
self.preview_table_widget.selectRow(row) self.selectRow(row)
def currentRow(self): def currentRow(self):
return self.preview_table_widget.currentRow() return super(ListPreviewWidget, self).currentRow()
def rowCount(self): def rowCount(self):
return self.preview_table_widget.rowCount() return super(ListPreviewWidget, self).rowCount()
def _get_image_manager(self): def _get_image_manager(self):
""" """

View File

@ -1379,7 +1379,7 @@ class ServiceManager(QtGui.QWidget, ServiceManagerDialog):
self.preview_controller.addServiceManagerItem(self.service_items[item][u'service_item'], 0) self.preview_controller.addServiceManagerItem(self.service_items[item][u'service_item'], 0)
next_item = self.service_manager_list.topLevelItem(item) next_item = self.service_manager_list.topLevelItem(item)
self.service_manager_list.setCurrentItem(next_item) self.service_manager_list.setCurrentItem(next_item)
self.live_controller.preview_widget.get_preview_widget().setFocus() self.live_controller.preview_widget.setFocus()
else: else:
critical_error_message_box(translate('OpenLP.ServiceManager', 'Missing Display Handler'), critical_error_message_box(translate('OpenLP.ServiceManager', 'Missing Display Handler'),
translate('OpenLP.ServiceManager', translate('OpenLP.ServiceManager',

View File

@ -158,8 +158,8 @@ class SlideController(DisplayController):
self.controller_layout.setSpacing(0) self.controller_layout.setSpacing(0)
self.controller_layout.setMargin(0) self.controller_layout.setMargin(0)
# Controller list view # Controller list view
self.preview_widget = ListPreviewWidget(self, self.is_live) self.preview_widget = ListPreviewWidget(self, self.ratio)
self.controller_layout.addWidget(self.preview_widget.get_preview_widget()) self.controller_layout.addWidget(self.preview_widget)
# Build the full toolbar # Build the full toolbar
self.toolbar = OpenLPToolbar(self) self.toolbar = OpenLPToolbar(self)
size_toolbar_policy = QtGui.QSizePolicy(QtGui.QSizePolicy.Fixed, QtGui.QSizePolicy.Fixed) 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.loop_list, False)
self.toolbar.set_widget_visible(self.wide_menu, False) self.toolbar.set_widget_visible(self.wide_menu, False)
else: else:
self.preview_widget.double_clicked.connect(self.onGoLiveClick) self.preview_widget.doubleClicked.connect(self.onGoLiveClick)
self.toolbar.set_widget_visible([u'editSong'], False) self.toolbar.set_widget_visible([u'editSong'], False)
if self.is_live: if self.is_live:
self.setLiveHotkeys(self) self.setLiveHotkeys(self)
@ -524,6 +524,7 @@ class SlideController(DisplayController):
self.ratio = 1 self.ratio = 1
self.media_controller.setup_display(self.display, False) self.media_controller.setup_display(self.display, False)
self.previewSizeChanged() self.previewSizeChanged()
self.preview_widget.screen_size_changed(self.ratio)
self.preview_display.setup() self.preview_display.setup()
service_item = ServiceItem() service_item = ServiceItem()
self.preview_display.web_view.setHtml(build_html(service_item, self.preview_display.screen, None, self.is_live, 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 = { self.preview_display.screen = {
u'size': self.preview_display.geometry()} u'size': self.preview_display.geometry()}
# Make sure that the frames have the correct size. # 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()) self.onControllerSizeChanged(self.controller.width())
def onControllerSizeChanged(self, width): def onControllerSizeChanged(self, width):
@ -777,7 +776,7 @@ class SlideController(DisplayController):
slideHeight = width * (1 / self.ratio) slideHeight = width * (1 / self.ratio)
row += 1 row += 1
self.slideList[unicode(row)] = 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.preview_widget.update_preview_selection(slideno)
self.enableToolBar(service_item) self.enableToolBar(service_item)
# Pass to display for viewing. # Pass to display for viewing.