|
|
@ -12,7 +12,7 @@ from functools import partial, lru_cache |
|
|
|
from typing import NamedTuple, Callable, Optional, TYPE_CHECKING, Union, List, Dict, Any |
|
|
|
|
|
|
|
from PyQt5.QtGui import (QFont, QColor, QCursor, QPixmap, QStandardItem, |
|
|
|
QPalette, QIcon, QFontMetrics) |
|
|
|
QPalette, QIcon, QFontMetrics, QShowEvent) |
|
|
|
from PyQt5.QtCore import (Qt, QPersistentModelIndex, QModelIndex, pyqtSignal, |
|
|
|
QCoreApplication, QItemSelectionModel, QThread, |
|
|
|
QSortFilterProxyModel, QSize, QLocale) |
|
|
@ -513,6 +513,9 @@ class MyTreeView(QTreeView): |
|
|
|
# only look at as many rows as currently visible. |
|
|
|
self.header().setResizeContentsPrecision(0) |
|
|
|
|
|
|
|
self._pending_update = False |
|
|
|
self._forced_update = False |
|
|
|
|
|
|
|
def set_editability(self, items): |
|
|
|
for idx, i in enumerate(items): |
|
|
|
i.setEditable(idx in self.editable_columns) |
|
|
@ -664,6 +667,20 @@ class MyTreeView(QTreeView): |
|
|
|
def place_text_on_clipboard(self, text: str, *, title: str = None) -> None: |
|
|
|
self.parent.do_copy(text, title=title) |
|
|
|
|
|
|
|
def showEvent(self, e: 'QShowEvent'): |
|
|
|
super().showEvent(e) |
|
|
|
if e.isAccepted() and self._pending_update: |
|
|
|
self._forced_update = True |
|
|
|
self.update() |
|
|
|
self._forced_update = False |
|
|
|
|
|
|
|
def maybe_defer_update(self) -> bool: |
|
|
|
"""Returns whether we should defer an update/refresh.""" |
|
|
|
defer = not self.isVisible() and not self._forced_update |
|
|
|
# side-effect: if we decide to defer update, the state will become stale: |
|
|
|
self._pending_update = defer |
|
|
|
return defer |
|
|
|
|
|
|
|
|
|
|
|
class ButtonsWidget(QWidget): |
|
|
|
|
|
|
|