mirror of
https://github.com/fergalmoran/picard.git
synced 2026-03-02 11:33:59 +00:00
[PICARD-519] Fix up hacky resize/restore/save of metadata box columns
Replace `metadata_box_sizes` option by QByteArray `metadatabox_header_state` and simply rely on Qt `QHeaderView::restoreState()` and `QHeaderView::saveState()` This change implies metadata box columns aren't auto resized when changing main window size, but instead scrollbar may appear. Overall, it is still user-friendly enough and much more reliable. See http://tickets.musicbrainz.org/browse/PICARD-519
This commit is contained in:
@@ -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)
|
||||
)
|
||||
|
||||
@@ -462,43 +462,12 @@ 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)
|
||||
|
||||
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
|
||||
|
||||
Reference in New Issue
Block a user