Merge pull request #351 from zas/metadatabox_sizes

[PICARD-519] Fix up hacky resize/restore/save of metadata box columns
This commit is contained in:
Laurent Monin
2014-08-05 22:32:42 +02:00

View File

@@ -144,7 +144,7 @@ class TagDiff(object):
class MetadataBox(QtGui.QTableWidget):
options = (
config.IntListOption("persist", "metadata_box_sizes", [150, 300, 300]),
config.Option("persist", "metadatabox_header_state", QtCore.QByteArray()),
config.BoolOption("persist", "show_changes_first", False)
)
@@ -156,6 +156,7 @@ class MetadataBox(QtGui.QTableWidget):
self.setColumnCount(3)
self.setHorizontalHeaderLabels((_("Tag"), _("Original Value"), _("New Value")))
self.horizontalHeader().setStretchLastSection(True)
self.horizontalHeader().setResizeMode(QtGui.QHeaderView.ResizeToContents)
self.horizontalHeader().setClickable(False)
self.verticalHeader().setDefaultSectionSize(21)
self.verticalHeader().setVisible(False)
@@ -462,43 +463,13 @@ class MetadataBox(QtGui.QTableWidget):
font.setItalic(italic)
item.setFont(font)
def _resize_column(self, i, size):
header = self.horizontalHeader()
nsize = max(size, header.sectionSizeHint(i))
header.resizeSection(i, nsize)
def restore_state(self):
sizes = config.persist["metadata_box_sizes"]
state = config.persist["metadatabox_header_state"]
header = self.horizontalHeader()
try:
for i in range(header.count() - 1):
self._resize_column(i, sizes[i])
except IndexError:
pass
self.resize_columns()
header.restoreState(state)
header.setResizeMode(QtGui.QHeaderView.Interactive)
def save_state(self):
sizes = []
header = self.horizontalHeader()
for i in range(header.count()):
sizes.append(header.sectionSize(i))
config.persist["metadata_box_sizes"] = sizes
def resize_columns(self):
header = self.horizontalHeader()
width = header.length()
ncols = header.count()
visible_width = self.contentsRect().width()
scroll = self.verticalScrollBar()
if scroll.isVisible():
width -= scroll.width()
visible_width -= scroll.width()
if width != visible_width:
for i in range(ncols - 1):
newsize = int(round((float(visible_width) * header.sectionSize(i)) / float(width)))
self._resize_column(i, newsize)
def resizeEvent(self, event):
if abs(event.size().width() - event.oldSize().width()) > self.verticalScrollBar().width():
self.resize_columns()
super(MetadataBox, self).resizeEvent(event)
state = header.saveState()
config.persist["metadatabox_header_state"] = state