forked from openlp/openlp
Use inheritance instead of composition. Some interface cleanup.
This commit is contained in:
parent
d687288336
commit
25db18d34c
@ -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):
|
||||||
"""
|
"""
|
||||||
|
@ -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',
|
||||||
|
@ -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.
|
||||||
|
Loading…
Reference in New Issue
Block a user