1# -*- coding: utf-8 -*-
2
3# Copyright (c) 2015 - 2021 Detlev Offenbach <detlev@die-offenbachs.de>
4#
5
6"""
7Module implementing a dialog to show all saved zoom values.
8"""
9
10from PyQt5.QtCore import QSortFilterProxyModel
11from PyQt5.QtGui import QFont, QFontMetrics
12from PyQt5.QtWidgets import QDialog
13
14from .Ui_ZoomValuesDialog import Ui_ZoomValuesDialog
15
16
17class ZoomValuesDialog(QDialog, Ui_ZoomValuesDialog):
18    """
19    Class implementing a dialog to show all saved zoom values.
20    """
21    def __init__(self, parent=None):
22        """
23        Constructor
24
25        @param parent reference to the parent widget (QWidget)
26        """
27        super().__init__(parent)
28        self.setupUi(self)
29
30        self.removeButton.clicked.connect(
31            self.zoomValuesTable.removeSelected)
32        self.removeAllButton.clicked.connect(self.zoomValuesTable.removeAll)
33
34        from . import ZoomManager
35        from .ZoomValuesModel import ZoomValuesModel
36
37        self.zoomValuesTable.verticalHeader().hide()
38        self.__zoomValuesModel = ZoomValuesModel(
39            ZoomManager.instance(), self)
40        self.__proxyModel = QSortFilterProxyModel(self)
41        self.__proxyModel.setSourceModel(self.__zoomValuesModel)
42        self.searchEdit.textChanged.connect(
43            self.__proxyModel.setFilterFixedString)
44        self.zoomValuesTable.setModel(self.__proxyModel)
45
46        fm = QFontMetrics(QFont())
47        height = fm.height() + fm.height() // 3
48        self.zoomValuesTable.verticalHeader().setDefaultSectionSize(height)
49        self.zoomValuesTable.verticalHeader().setMinimumSectionSize(-1)
50
51        self.__calculateHeaderSizes()
52
53    def __calculateHeaderSizes(self):
54        """
55        Private method to calculate the section sizes of the horizontal header.
56        """
57        fm = QFontMetrics(QFont())
58        for section in range(self.__zoomValuesModel.columnCount()):
59            header = self.zoomValuesTable.horizontalHeader().sectionSizeHint(
60                section)
61            if section == 0:
62                try:
63                    header = fm.horizontalAdvance(
64                        "extraveryveryverylongsitename")
65                except AttributeError:
66                    header = fm.width(
67                        "extraveryveryverylongsitename")
68            elif section == 1:
69                try:
70                    header = fm.horizontalAdvance("averagelongzoomvalue")
71                except AttributeError:
72                    header = fm.width("averagelongzoomvalue")
73            try:
74                buffer = fm.width("mm")
75            except AttributeError:
76                buffer = fm.width("mm")
77            header += buffer
78            self.zoomValuesTable.horizontalHeader().resizeSection(
79                section, header)
80        self.zoomValuesTable.horizontalHeader().setStretchLastSection(True)
81