mirror of
https://github.com/arsenetar/dupeguru.git
synced 2025-03-10 05:34:36 +00:00
First pass code cleanup in qt/qtlib
This commit is contained in:
parent
d576a7043c
commit
f9085386a6
@ -68,7 +68,7 @@ except ImportError:
|
|||||||
try:
|
try:
|
||||||
from PyQt5.QtCore import QUrl, QStandardPaths
|
from PyQt5.QtCore import QUrl, QStandardPaths
|
||||||
from PyQt5.QtGui import QDesktopServices
|
from PyQt5.QtGui import QDesktopServices
|
||||||
from qtlib.util import getAppData
|
from qtlib.util import get_appdata
|
||||||
from core.util import executable_folder
|
from core.util import executable_folder
|
||||||
from hscommon.plat import ISWINDOWS, ISOSX
|
from hscommon.plat import ISWINDOWS, ISOSX
|
||||||
import subprocess
|
import subprocess
|
||||||
@ -95,7 +95,7 @@ except ImportError:
|
|||||||
else:
|
else:
|
||||||
folder = QStandardPaths.standardLocations(QStandardPaths.CacheLocation)[0]
|
folder = QStandardPaths.standardLocations(QStandardPaths.CacheLocation)[0]
|
||||||
else:
|
else:
|
||||||
folder = getAppData(portable)
|
folder = get_appdata(portable)
|
||||||
return folder
|
return folder
|
||||||
|
|
||||||
except ImportError:
|
except ImportError:
|
||||||
|
@ -16,7 +16,7 @@ from hscommon import desktop
|
|||||||
|
|
||||||
from qtlib.about_box import AboutBox
|
from qtlib.about_box import AboutBox
|
||||||
from qtlib.recent import Recent
|
from qtlib.recent import Recent
|
||||||
from qtlib.util import createActions
|
from qtlib.util import create_actions
|
||||||
from qtlib.progress_window import ProgressWindow
|
from qtlib.progress_window import ProgressWindow
|
||||||
|
|
||||||
from core.app import AppMode, DupeGuru as DupeGuruModel
|
from core.app import AppMode, DupeGuru as DupeGuruModel
|
||||||
@ -152,7 +152,7 @@ class DupeGuru(QObject):
|
|||||||
self.openDebugLogTriggered,
|
self.openDebugLogTriggered,
|
||||||
),
|
),
|
||||||
]
|
]
|
||||||
createActions(ACTIONS, self)
|
create_actions(ACTIONS, self)
|
||||||
|
|
||||||
def _update_options(self):
|
def _update_options(self):
|
||||||
self.model.options["mix_file_kind"] = self.prefs.mix_file_kind
|
self.model.options["mix_file_kind"] = self.prefs.mix_file_kind
|
||||||
@ -314,8 +314,8 @@ class DupeGuru(QObject):
|
|||||||
self.main_window.setCurrentIndex(index)
|
self.main_window.setCurrentIndex(index)
|
||||||
|
|
||||||
def openDebugLogTriggered(self):
|
def openDebugLogTriggered(self):
|
||||||
debugLogPath = op.join(self.model.appdata, "debug.log")
|
debug_log_path = op.join(self.model.appdata, "debug.log")
|
||||||
desktop.open_path(debugLogPath)
|
desktop.open_path(debug_log_path)
|
||||||
|
|
||||||
def preferencesTriggered(self):
|
def preferencesTriggered(self):
|
||||||
preferences_dialog = self._get_preferences_dialog_class()(
|
preferences_dialog = self._get_preferences_dialog_class()(
|
||||||
|
@ -28,7 +28,7 @@ from hscommon.trans import trget
|
|||||||
from core.app import AppMode
|
from core.app import AppMode
|
||||||
from qtlib.radio_box import RadioBox
|
from qtlib.radio_box import RadioBox
|
||||||
from qtlib.recent import Recent
|
from qtlib.recent import Recent
|
||||||
from qtlib.util import moveToScreenCenter, createActions
|
from qtlib.util import move_to_screen_center, create_actions
|
||||||
|
|
||||||
from . import platform
|
from . import platform
|
||||||
from .directories_model import DirectoriesModel, DirectoriesDelegate
|
from .directories_model import DirectoriesModel, DirectoriesDelegate
|
||||||
@ -93,7 +93,7 @@ class DirectoriesDialog(QMainWindow):
|
|||||||
("actionLoadDirectories", "", "", tr("Load Directories..."), self.loadDirectoriesTriggered),
|
("actionLoadDirectories", "", "", tr("Load Directories..."), self.loadDirectoriesTriggered),
|
||||||
("actionSaveDirectories", "", "", tr("Save Directories..."), self.saveDirectoriesTriggered),
|
("actionSaveDirectories", "", "", tr("Save Directories..."), self.saveDirectoriesTriggered),
|
||||||
]
|
]
|
||||||
createActions(ACTIONS, self)
|
create_actions(ACTIONS, self)
|
||||||
if self.app.use_tabs:
|
if self.app.use_tabs:
|
||||||
# Keep track of actions which should only be accessible from this window
|
# Keep track of actions which should only be accessible from this window
|
||||||
self.specific_actions.add(self.actionLoadDirectories)
|
self.specific_actions.add(self.actionLoadDirectories)
|
||||||
@ -206,8 +206,8 @@ class DirectoriesDialog(QMainWindow):
|
|||||||
self.addFolderButton = QPushButton(self.centralwidget)
|
self.addFolderButton = QPushButton(self.centralwidget)
|
||||||
self.addFolderButton.setIcon(QIcon(QPixmap(":/plus")))
|
self.addFolderButton.setIcon(QIcon(QPixmap(":/plus")))
|
||||||
self.horizontalLayout.addWidget(self.addFolderButton)
|
self.horizontalLayout.addWidget(self.addFolderButton)
|
||||||
spacerItem1 = QSpacerItem(40, 20, QSizePolicy.Expanding, QSizePolicy.Minimum)
|
spacer_item = QSpacerItem(40, 20, QSizePolicy.Expanding, QSizePolicy.Minimum)
|
||||||
self.horizontalLayout.addItem(spacerItem1)
|
self.horizontalLayout.addItem(spacer_item)
|
||||||
self.loadResultsButton = QPushButton(self.centralwidget)
|
self.loadResultsButton = QPushButton(self.centralwidget)
|
||||||
self.loadResultsButton.setText(tr("Load Results"))
|
self.loadResultsButton.setText(tr("Load Results"))
|
||||||
self.horizontalLayout.addWidget(self.loadResultsButton)
|
self.horizontalLayout.addWidget(self.loadResultsButton)
|
||||||
@ -224,7 +224,7 @@ class DirectoriesDialog(QMainWindow):
|
|||||||
if self.app.prefs.directoriesWindowRect is not None:
|
if self.app.prefs.directoriesWindowRect is not None:
|
||||||
self.setGeometry(self.app.prefs.directoriesWindowRect)
|
self.setGeometry(self.app.prefs.directoriesWindowRect)
|
||||||
else:
|
else:
|
||||||
moveToScreenCenter(self)
|
move_to_screen_center(self)
|
||||||
|
|
||||||
def _setupColumns(self):
|
def _setupColumns(self):
|
||||||
header = self.treeView.header()
|
header = self.treeView.header()
|
||||||
|
@ -104,12 +104,12 @@ class DirectoriesModel(TreeModel):
|
|||||||
return QBrush(Qt.red)
|
return QBrush(Qt.red)
|
||||||
return None
|
return None
|
||||||
|
|
||||||
def dropMimeData(self, mimeData, action, row, column, parentIndex):
|
def dropMimeData(self, mime_data, action, row, column, parent_index):
|
||||||
# the data in mimeData is urlencoded **in utf-8**!!! What we do is to decode, the mime data
|
# the data in mimeData is urlencoded **in utf-8**!!! What we do is to decode, the mime data
|
||||||
# with 'ascii', which works since it's urlencoded. Then, we pass that to urllib.
|
# with 'ascii', which works since it's urlencoded. Then, we pass that to urllib.
|
||||||
if not mimeData.hasFormat("text/uri-list"):
|
if not mime_data.hasFormat("text/uri-list"):
|
||||||
return False
|
return False
|
||||||
data = bytes(mimeData.data("text/uri-list")).decode("ascii")
|
data = bytes(mime_data.data("text/uri-list")).decode("ascii")
|
||||||
unquoted = urllib.parse.unquote(data)
|
unquoted = urllib.parse.unquote(data)
|
||||||
urls = unquoted.split("\r\n")
|
urls = unquoted.split("\r\n")
|
||||||
paths = [QUrl(url).toLocalFile() for url in urls if url]
|
paths = [QUrl(url).toLocalFile() for url in urls if url]
|
||||||
@ -128,8 +128,7 @@ class DirectoriesModel(TreeModel):
|
|||||||
return result
|
return result
|
||||||
|
|
||||||
def headerData(self, section, orientation, role):
|
def headerData(self, section, orientation, role):
|
||||||
if orientation == Qt.Horizontal:
|
if orientation == Qt.Horizontal and role == Qt.DisplayRole and section < len(HEADERS):
|
||||||
if role == Qt.DisplayRole and section < len(HEADERS):
|
|
||||||
return HEADERS[section]
|
return HEADERS[section]
|
||||||
return None
|
return None
|
||||||
|
|
||||||
@ -151,8 +150,8 @@ class DirectoriesModel(TreeModel):
|
|||||||
|
|
||||||
# --- Events
|
# --- Events
|
||||||
def selectionChanged(self, selected, deselected):
|
def selectionChanged(self, selected, deselected):
|
||||||
newNodes = [modelIndex.internalPointer().ref for modelIndex in self.view.selectionModel().selectedRows()]
|
new_nodes = [modelIndex.internalPointer().ref for modelIndex in self.view.selectionModel().selectedRows()]
|
||||||
self.model.selected_nodes = newNodes
|
self.model.selected_nodes = new_nodes
|
||||||
|
|
||||||
# --- Signals
|
# --- Signals
|
||||||
foldersAdded = pyqtSignal(list)
|
foldersAdded = pyqtSignal(list)
|
||||||
|
@ -25,7 +25,6 @@ class ExcludeListTable(Table):
|
|||||||
view.setFont(font)
|
view.setFont(font)
|
||||||
fm = QFontMetrics(font)
|
fm = QFontMetrics(font)
|
||||||
view.verticalHeader().setDefaultSectionSize(fm.height() + 2)
|
view.verticalHeader().setDefaultSectionSize(fm.height() + 2)
|
||||||
# app.willSavePrefs.connect(self.appWillSavePrefs)
|
|
||||||
|
|
||||||
def _getData(self, row, column, role):
|
def _getData(self, row, column, role):
|
||||||
if column.name == "marked":
|
if column.name == "marked":
|
||||||
@ -43,8 +42,7 @@ class ExcludeListTable(Table):
|
|||||||
elif role == Qt.BackgroundRole and column.name == "regex":
|
elif role == Qt.BackgroundRole and column.name == "regex":
|
||||||
if row.highlight:
|
if row.highlight:
|
||||||
return QColor(10, 200, 10) # green
|
return QColor(10, 200, 10) # green
|
||||||
elif role == Qt.EditRole:
|
elif role == Qt.EditRole and column.name == "regex":
|
||||||
if column.name == "regex":
|
|
||||||
return row.data[column.name]
|
return row.data[column.name]
|
||||||
return None
|
return None
|
||||||
|
|
||||||
@ -62,15 +60,6 @@ class ExcludeListTable(Table):
|
|||||||
if column.name == "marked":
|
if column.name == "marked":
|
||||||
row.marked = bool(value)
|
row.marked = bool(value)
|
||||||
return True
|
return True
|
||||||
elif role == Qt.EditRole:
|
elif role == Qt.EditRole and column.name == "regex":
|
||||||
if column.name == "regex":
|
|
||||||
return self.model.rename_selected(value)
|
return self.model.rename_selected(value)
|
||||||
return False
|
return False
|
||||||
|
|
||||||
# def sort(self, column, order):
|
|
||||||
# column = self.model.COLUMNS[column]
|
|
||||||
# self.model.sort(column.name, order == Qt.AscendingOrder)
|
|
||||||
|
|
||||||
# # --- Events
|
|
||||||
# def appWillSavePrefs(self):
|
|
||||||
# self.model.columns.save_columns()
|
|
||||||
|
@ -16,7 +16,7 @@ from PyQt5.QtWidgets import (
|
|||||||
)
|
)
|
||||||
|
|
||||||
from hscommon.trans import trget
|
from hscommon.trans import trget
|
||||||
from qtlib.util import horizontalWrap
|
from qtlib.util import horizontal_wrap
|
||||||
from .ignore_list_table import IgnoreListTable
|
from .ignore_list_table import IgnoreListTable
|
||||||
|
|
||||||
tr = trget("ui")
|
tr = trget("ui")
|
||||||
@ -56,7 +56,7 @@ class IgnoreListDialog(QDialog):
|
|||||||
self.clearButton = QPushButton(tr("Clear"))
|
self.clearButton = QPushButton(tr("Clear"))
|
||||||
self.closeButton = QPushButton(tr("Close"))
|
self.closeButton = QPushButton(tr("Close"))
|
||||||
self.verticalLayout.addLayout(
|
self.verticalLayout.addLayout(
|
||||||
horizontalWrap([self.removeSelectedButton, self.clearButton, None, self.closeButton])
|
horizontal_wrap([self.removeSelectedButton, self.clearButton, None, self.closeButton])
|
||||||
)
|
)
|
||||||
|
|
||||||
# --- model --> view
|
# --- model --> view
|
||||||
|
@ -37,8 +37,8 @@ class PreferencesDialog(PreferencesDialogBase):
|
|||||||
self.verticalLayout_4.addWidget(self.label_6)
|
self.verticalLayout_4.addWidget(self.label_6)
|
||||||
self.horizontalLayout_2 = QHBoxLayout()
|
self.horizontalLayout_2 = QHBoxLayout()
|
||||||
self.horizontalLayout_2.setSpacing(0)
|
self.horizontalLayout_2.setSpacing(0)
|
||||||
spacerItem1 = QSpacerItem(15, 20, QSizePolicy.Fixed, QSizePolicy.Minimum)
|
spacer_item = QSpacerItem(15, 20, QSizePolicy.Fixed, QSizePolicy.Minimum)
|
||||||
self.horizontalLayout_2.addItem(spacerItem1)
|
self.horizontalLayout_2.addItem(spacer_item)
|
||||||
self._setupAddCheckbox("tagTrackBox", tr("Track"), self.widget)
|
self._setupAddCheckbox("tagTrackBox", tr("Track"), self.widget)
|
||||||
self.horizontalLayout_2.addWidget(self.tagTrackBox)
|
self.horizontalLayout_2.addWidget(self.tagTrackBox)
|
||||||
self._setupAddCheckbox("tagArtistBox", tr("Artist"), self.widget)
|
self._setupAddCheckbox("tagArtistBox", tr("Artist"), self.widget)
|
||||||
|
@ -57,12 +57,10 @@ class DetailsDialog(DetailsDialogBase):
|
|||||||
self.splitter.setStretchFactor(0, 8)
|
self.splitter.setStretchFactor(0, 8)
|
||||||
|
|
||||||
self.tableView = DetailsTable(self)
|
self.tableView = DetailsTable(self)
|
||||||
sizePolicy = QSizePolicy(QSizePolicy.Expanding, QSizePolicy.Maximum)
|
size_policy = QSizePolicy(QSizePolicy.Expanding, QSizePolicy.Maximum)
|
||||||
sizePolicy.setHorizontalStretch(0)
|
size_policy.setHorizontalStretch(0)
|
||||||
sizePolicy.setVerticalStretch(0)
|
size_policy.setVerticalStretch(0)
|
||||||
self.tableView.setSizePolicy(sizePolicy)
|
self.tableView.setSizePolicy(size_policy)
|
||||||
# self.tableView.setMinimumSize(QSize(0, 190))
|
|
||||||
# self.tableView.setMaximumSize(QSize(16777215, 190))
|
|
||||||
self.tableView.setAlternatingRowColors(True)
|
self.tableView.setAlternatingRowColors(True)
|
||||||
self.tableView.setSelectionBehavior(QAbstractItemView.SelectRows)
|
self.tableView.setSelectionBehavior(QAbstractItemView.SelectRows)
|
||||||
self.tableView.setShowGrid(False)
|
self.tableView.setShowGrid(False)
|
||||||
|
@ -26,8 +26,8 @@ MAX_SCALE = 12.0
|
|||||||
MIN_SCALE = 0.1
|
MIN_SCALE = 0.1
|
||||||
|
|
||||||
|
|
||||||
def createActions(actions, target):
|
def create_actions(actions, target):
|
||||||
# actions = [(name, shortcut, icon, desc, func)]
|
# actions are list of (name, shortcut, icon, desc, func)
|
||||||
for name, shortcut, icon, desc, func in actions:
|
for name, shortcut, icon, desc, func in actions:
|
||||||
action = QAction(target)
|
action = QAction(target)
|
||||||
if icon:
|
if icon:
|
||||||
@ -53,7 +53,7 @@ class ViewerToolBar(QToolBar):
|
|||||||
self.buttonBestFit.setEnabled(False)
|
self.buttonBestFit.setEnabled(False)
|
||||||
|
|
||||||
def setupActions(self, controller):
|
def setupActions(self, controller):
|
||||||
# actions = [(name, shortcut, icon, desc, func)]
|
# actions are list of (name, shortcut, icon, desc, func)
|
||||||
ACTIONS = [
|
ACTIONS = [
|
||||||
(
|
(
|
||||||
"actionZoomIn",
|
"actionZoomIn",
|
||||||
@ -94,7 +94,7 @@ class ViewerToolBar(QToolBar):
|
|||||||
]
|
]
|
||||||
# TODO try with QWidgetAction() instead in order to have
|
# TODO try with QWidgetAction() instead in order to have
|
||||||
# the popup menu work in the toolbar (if resized below minimum height)
|
# the popup menu work in the toolbar (if resized below minimum height)
|
||||||
createActions(ACTIONS, self)
|
create_actions(ACTIONS, self)
|
||||||
|
|
||||||
def createButtons(self):
|
def createButtons(self):
|
||||||
self.buttonImgSwap = QToolButton(self)
|
self.buttonImgSwap = QToolButton(self)
|
||||||
@ -112,29 +112,21 @@ class ViewerToolBar(QToolBar):
|
|||||||
self.buttonZoomIn = QToolButton(self)
|
self.buttonZoomIn = QToolButton(self)
|
||||||
self.buttonZoomIn.setToolButtonStyle(Qt.ToolButtonIconOnly)
|
self.buttonZoomIn.setToolButtonStyle(Qt.ToolButtonIconOnly)
|
||||||
self.buttonZoomIn.setDefaultAction(self.actionZoomIn)
|
self.buttonZoomIn.setDefaultAction(self.actionZoomIn)
|
||||||
# self.buttonZoomIn.setText('ZoomIn')
|
|
||||||
# self.buttonZoomIn.setIcon(QIcon.fromTheme('zoom-in'))
|
|
||||||
self.buttonZoomIn.setEnabled(False)
|
self.buttonZoomIn.setEnabled(False)
|
||||||
|
|
||||||
self.buttonZoomOut = QToolButton(self)
|
self.buttonZoomOut = QToolButton(self)
|
||||||
self.buttonZoomOut.setToolButtonStyle(Qt.ToolButtonIconOnly)
|
self.buttonZoomOut.setToolButtonStyle(Qt.ToolButtonIconOnly)
|
||||||
self.buttonZoomOut.setDefaultAction(self.actionZoomOut)
|
self.buttonZoomOut.setDefaultAction(self.actionZoomOut)
|
||||||
# self.buttonZoomOut.setText('ZoomOut')
|
|
||||||
# self.buttonZoomOut.setIcon(QIcon.fromTheme('zoom-out'))
|
|
||||||
self.buttonZoomOut.setEnabled(False)
|
self.buttonZoomOut.setEnabled(False)
|
||||||
|
|
||||||
self.buttonNormalSize = QToolButton(self)
|
self.buttonNormalSize = QToolButton(self)
|
||||||
self.buttonNormalSize.setToolButtonStyle(Qt.ToolButtonIconOnly)
|
self.buttonNormalSize.setToolButtonStyle(Qt.ToolButtonIconOnly)
|
||||||
self.buttonNormalSize.setDefaultAction(self.actionNormalSize)
|
self.buttonNormalSize.setDefaultAction(self.actionNormalSize)
|
||||||
# self.buttonNormalSize.setText('Normal Size')
|
|
||||||
# self.buttonNormalSize.setIcon(QIcon.fromTheme('zoom-original'))
|
|
||||||
self.buttonNormalSize.setEnabled(True)
|
self.buttonNormalSize.setEnabled(True)
|
||||||
|
|
||||||
self.buttonBestFit = QToolButton(self)
|
self.buttonBestFit = QToolButton(self)
|
||||||
self.buttonBestFit.setToolButtonStyle(Qt.ToolButtonIconOnly)
|
self.buttonBestFit.setToolButtonStyle(Qt.ToolButtonIconOnly)
|
||||||
self.buttonBestFit.setDefaultAction(self.actionBestFit)
|
self.buttonBestFit.setDefaultAction(self.actionBestFit)
|
||||||
# self.buttonBestFit.setText('BestFit')
|
|
||||||
# self.buttonBestFit.setIcon(QIcon.fromTheme('zoom-best-fit'))
|
|
||||||
self.buttonBestFit.setEnabled(False)
|
self.buttonBestFit.setEnabled(False)
|
||||||
|
|
||||||
self.addWidget(self.buttonImgSwap)
|
self.addWidget(self.buttonImgSwap)
|
||||||
@ -164,9 +156,9 @@ class BaseController(QObject):
|
|||||||
self.cached_group = None
|
self.cached_group = None
|
||||||
self.same_dimensions = True
|
self.same_dimensions = True
|
||||||
|
|
||||||
def setupViewers(self, selectedViewer, referenceViewer):
|
def setupViewers(self, selected_viewer, reference_viewer):
|
||||||
self.selectedViewer = selectedViewer
|
self.selectedViewer = selected_viewer
|
||||||
self.referenceViewer = referenceViewer
|
self.referenceViewer = reference_viewer
|
||||||
self.selectedViewer.controller = self
|
self.selectedViewer.controller = self
|
||||||
self.referenceViewer.controller = self
|
self.referenceViewer.controller = self
|
||||||
self._setupConnections()
|
self._setupConnections()
|
||||||
@ -187,7 +179,6 @@ class BaseController(QObject):
|
|||||||
|
|
||||||
self.selectedPixmap = QPixmap(str(dupe.path))
|
self.selectedPixmap = QPixmap(str(dupe.path))
|
||||||
if ref is dupe: # currently selected file is the actual reference file
|
if ref is dupe: # currently selected file is the actual reference file
|
||||||
# self.same_dimensions = False
|
|
||||||
self.referencePixmap = QPixmap()
|
self.referencePixmap = QPixmap()
|
||||||
self.scaledReferencePixmap = QPixmap()
|
self.scaledReferencePixmap = QPixmap()
|
||||||
self.parent.verticalToolBar.buttonImgSwap.setEnabled(False)
|
self.parent.verticalToolBar.buttonImgSwap.setEnabled(False)
|
||||||
@ -536,14 +527,14 @@ class GraphicsViewController(BaseController):
|
|||||||
self.referenceViewer.setCenter(self.selectedViewer._centerPoint)
|
self.referenceViewer.setCenter(self.selectedViewer._centerPoint)
|
||||||
|
|
||||||
@pyqtSlot(float, QPointF)
|
@pyqtSlot(float, QPointF)
|
||||||
def onMouseWheel(self, factor, newCenter):
|
def onMouseWheel(self, factor, new_center):
|
||||||
self.current_scale *= factor
|
self.current_scale *= factor
|
||||||
if self.sender() is self.referenceViewer:
|
if self.sender() is self.referenceViewer:
|
||||||
self.selectedViewer.scaleBy(factor)
|
self.selectedViewer.scaleBy(factor)
|
||||||
self.selectedViewer.setCenter(newCenter)
|
self.selectedViewer.setCenter(new_center)
|
||||||
else:
|
else:
|
||||||
self.referenceViewer.scaleBy(factor)
|
self.referenceViewer.scaleBy(factor)
|
||||||
self.referenceViewer.setCenter(newCenter)
|
self.referenceViewer.setCenter(new_center)
|
||||||
|
|
||||||
@pyqtSlot(int)
|
@pyqtSlot(int)
|
||||||
def onVScrollBarChanged(self, value):
|
def onVScrollBarChanged(self, value):
|
||||||
@ -613,8 +604,6 @@ class GraphicsViewController(BaseController):
|
|||||||
if ref.dimensions != dupe.dimensions:
|
if ref.dimensions != dupe.dimensions:
|
||||||
self.same_dimensions = False
|
self.same_dimensions = False
|
||||||
self.parent.verticalToolBar.buttonNormalSize.setEnabled(True)
|
self.parent.verticalToolBar.buttonNormalSize.setEnabled(True)
|
||||||
# self.selectedViewer.setImage(self.selectedPixmap)
|
|
||||||
# self.referenceViewer.setImage(self.referencePixmap)
|
|
||||||
self.updateButtonsAsPerDimensions(previous_same_dimensions)
|
self.updateButtonsAsPerDimensions(previous_same_dimensions)
|
||||||
self.updateBothImages(same_group)
|
self.updateBothImages(same_group)
|
||||||
|
|
||||||
@ -634,7 +623,6 @@ class GraphicsViewController(BaseController):
|
|||||||
# If not same_group, we need full update"""
|
# If not same_group, we need full update"""
|
||||||
viewer.setImage(pixmap)
|
viewer.setImage(pixmap)
|
||||||
if pixmap.isNull():
|
if pixmap.isNull():
|
||||||
# viewer._item = None
|
|
||||||
return
|
return
|
||||||
if viewer.bestFit:
|
if viewer.bestFit:
|
||||||
viewer.fitScale()
|
viewer.fitScale()
|
||||||
@ -920,12 +908,12 @@ class ScrollAreaImageViewer(QScrollArea):
|
|||||||
def __repr__(self):
|
def __repr__(self):
|
||||||
return f"{self._instance_name}"
|
return f"{self._instance_name}"
|
||||||
|
|
||||||
def toggleScrollBars(self, forceOn=False):
|
def toggleScrollBars(self, force_on=False):
|
||||||
if not self.prefs.details_dialog_viewers_show_scrollbars:
|
if not self.prefs.details_dialog_viewers_show_scrollbars:
|
||||||
return
|
return
|
||||||
# Ensure that it's off on the first run
|
# Ensure that it's off on the first run
|
||||||
if self.horizontalScrollBarPolicy() == Qt.ScrollBarAsNeeded:
|
if self.horizontalScrollBarPolicy() == Qt.ScrollBarAsNeeded:
|
||||||
if forceOn:
|
if force_on:
|
||||||
return
|
return
|
||||||
self.setVerticalScrollBarPolicy(Qt.ScrollBarAlwaysOff)
|
self.setVerticalScrollBarPolicy(Qt.ScrollBarAlwaysOff)
|
||||||
self.setHorizontalScrollBarPolicy(Qt.ScrollBarAlwaysOff)
|
self.setHorizontalScrollBarPolicy(Qt.ScrollBarAlwaysOff)
|
||||||
@ -998,18 +986,18 @@ class ScrollAreaImageViewer(QScrollArea):
|
|||||||
if self.bestFit or not self.controller.same_dimensions:
|
if self.bestFit or not self.controller.same_dimensions:
|
||||||
event.ignore()
|
event.ignore()
|
||||||
return
|
return
|
||||||
oldScale = self.current_scale
|
old_scale = self.current_scale
|
||||||
if event.angleDelta().y() > 0: # zoom-in
|
if event.angleDelta().y() > 0: # zoom-in
|
||||||
if oldScale < MAX_SCALE:
|
if old_scale < MAX_SCALE:
|
||||||
self.current_scale *= 1.25
|
self.current_scale *= 1.25
|
||||||
else:
|
else:
|
||||||
if oldScale > MIN_SCALE: # zoom-out
|
if old_scale > MIN_SCALE: # zoom-out
|
||||||
self.current_scale *= 0.8
|
self.current_scale *= 0.8
|
||||||
if oldScale == self.current_scale:
|
if old_scale == self.current_scale:
|
||||||
return
|
return
|
||||||
|
|
||||||
deltaToPos = (event.position() / oldScale) - (self.label.pos() / oldScale)
|
delta_to_pos = (event.position() / old_scale) - (self.label.pos() / old_scale)
|
||||||
delta = (deltaToPos * self.current_scale) - (deltaToPos * oldScale)
|
delta = (delta_to_pos * self.current_scale) - (delta_to_pos * old_scale)
|
||||||
self.mouseWheeled.emit(self.current_scale, delta)
|
self.mouseWheeled.emit(self.current_scale, delta)
|
||||||
|
|
||||||
def setImage(self, pixmap):
|
def setImage(self, pixmap):
|
||||||
@ -1104,13 +1092,6 @@ class ScrollAreaImageViewer(QScrollArea):
|
|||||||
# Signal from scrollbars had already synced the values here
|
# Signal from scrollbars had already synced the values here
|
||||||
self.adjustScrollBarsAuto()
|
self.adjustScrollBarsAuto()
|
||||||
|
|
||||||
# def viewportSizeHint(self):
|
|
||||||
# return self.viewport().rect().size()
|
|
||||||
|
|
||||||
# def changeEvent(self, event):
|
|
||||||
# if event.type() == QEvent.EnabledChange:
|
|
||||||
# print(f"{self} is now {'enabled' if self.isEnabled() else 'disabled'}")
|
|
||||||
|
|
||||||
|
|
||||||
class GraphicsViewViewer(QGraphicsView):
|
class GraphicsViewViewer(QGraphicsView):
|
||||||
"""Re-Implementation a full-fledged GraphicsView but is a bit buggy."""
|
"""Re-Implementation a full-fledged GraphicsView but is a bit buggy."""
|
||||||
@ -1148,7 +1129,6 @@ class GraphicsViewViewer(QGraphicsView):
|
|||||||
self.setScene(self._scene)
|
self.setScene(self._scene)
|
||||||
self._scene.addItem(self._item)
|
self._scene.addItem(self._item)
|
||||||
self.setDragMode(QGraphicsView.DragMode.ScrollHandDrag)
|
self.setDragMode(QGraphicsView.DragMode.ScrollHandDrag)
|
||||||
# self.matrix = QTransform()
|
|
||||||
self._horizontalScrollBar = self.horizontalScrollBar()
|
self._horizontalScrollBar = self.horizontalScrollBar()
|
||||||
self._verticalScrollBar = self.verticalScrollBar()
|
self._verticalScrollBar = self.verticalScrollBar()
|
||||||
self.ignore_signal = False
|
self.ignore_signal = False
|
||||||
@ -1184,12 +1164,12 @@ class GraphicsViewViewer(QGraphicsView):
|
|||||||
self._verticalScrollBar.valueChanged.connect(self.controller.onVScrollBarChanged, Qt.UniqueConnection)
|
self._verticalScrollBar.valueChanged.connect(self.controller.onVScrollBarChanged, Qt.UniqueConnection)
|
||||||
self._horizontalScrollBar.valueChanged.connect(self.controller.onHScrollBarChanged, Qt.UniqueConnection)
|
self._horizontalScrollBar.valueChanged.connect(self.controller.onHScrollBarChanged, Qt.UniqueConnection)
|
||||||
|
|
||||||
def toggleScrollBars(self, forceOn=False):
|
def toggleScrollBars(self, force_on=False):
|
||||||
if not self.prefs.details_dialog_viewers_show_scrollbars:
|
if not self.prefs.details_dialog_viewers_show_scrollbars:
|
||||||
return
|
return
|
||||||
# Ensure that it's off on the first run
|
# Ensure that it's off on the first run
|
||||||
if self.horizontalScrollBarPolicy() == Qt.ScrollBarAsNeeded:
|
if self.horizontalScrollBarPolicy() == Qt.ScrollBarAsNeeded:
|
||||||
if forceOn:
|
if force_on:
|
||||||
return
|
return
|
||||||
self.setVerticalScrollBarPolicy(Qt.ScrollBarAlwaysOff)
|
self.setVerticalScrollBarPolicy(Qt.ScrollBarAlwaysOff)
|
||||||
self.setHorizontalScrollBarPolicy(Qt.ScrollBarAlwaysOff)
|
self.setHorizontalScrollBarPolicy(Qt.ScrollBarAlwaysOff)
|
||||||
@ -1245,9 +1225,9 @@ class GraphicsViewViewer(QGraphicsView):
|
|||||||
if self.bestFit or MIN_SCALE > self.current_scale > MAX_SCALE or not self.controller.same_dimensions:
|
if self.bestFit or MIN_SCALE > self.current_scale > MAX_SCALE or not self.controller.same_dimensions:
|
||||||
event.ignore()
|
event.ignore()
|
||||||
return
|
return
|
||||||
pointBeforeScale = QPointF(self.mapToScene(self.mapFromGlobal(QCursor.pos())))
|
point_before_scale = QPointF(self.mapToScene(self.mapFromGlobal(QCursor.pos())))
|
||||||
# Get the original screen centerpoint
|
# Get the original screen centerpoint
|
||||||
screenCenter = QPointF(self.mapToScene(self.rect().center()))
|
screen_center = QPointF(self.mapToScene(self.rect().center()))
|
||||||
if event.angleDelta().y() > 0:
|
if event.angleDelta().y() > 0:
|
||||||
factor = self.zoomInFactor
|
factor = self.zoomInFactor
|
||||||
else:
|
else:
|
||||||
@ -1255,13 +1235,13 @@ class GraphicsViewViewer(QGraphicsView):
|
|||||||
# Avoid scrollbars conflict:
|
# Avoid scrollbars conflict:
|
||||||
self.other_viewer.ignore_signal = True
|
self.other_viewer.ignore_signal = True
|
||||||
self.scaleBy(factor)
|
self.scaleBy(factor)
|
||||||
pointAfterScale = QPointF(self.mapToScene(self.mapFromGlobal(QCursor.pos())))
|
point_after_scale = QPointF(self.mapToScene(self.mapFromGlobal(QCursor.pos())))
|
||||||
# Get the offset of how the screen moved
|
# Get the offset of how the screen moved
|
||||||
offset = pointBeforeScale - pointAfterScale
|
offset = point_before_scale - point_after_scale
|
||||||
# Adjust to the new center for correct zooming
|
# Adjust to the new center for correct zooming
|
||||||
newCenter = screenCenter + offset
|
new_center = screen_center + offset
|
||||||
self.setCenter(newCenter)
|
self.setCenter(new_center)
|
||||||
self.mouseWheeled.emit(factor, newCenter)
|
self.mouseWheeled.emit(factor, new_center)
|
||||||
self.other_viewer.ignore_signal = False
|
self.other_viewer.ignore_signal = False
|
||||||
|
|
||||||
def setImage(self, pixmap):
|
def setImage(self, pixmap):
|
||||||
@ -1296,7 +1276,6 @@ class GraphicsViewViewer(QGraphicsView):
|
|||||||
self._item.update()
|
self._item.update()
|
||||||
|
|
||||||
def scaleAt(self, scale):
|
def scaleAt(self, scale):
|
||||||
# self.current_scale = scale
|
|
||||||
if scale == 1.0:
|
if scale == 1.0:
|
||||||
self.resetScale()
|
self.resetScale()
|
||||||
# self.setTransform( QTransform() )
|
# self.setTransform( QTransform() )
|
||||||
|
@ -32,7 +32,7 @@ from PyQt5.QtGui import QPixmap, QIcon
|
|||||||
|
|
||||||
from hscommon.trans import trget
|
from hscommon.trans import trget
|
||||||
from hscommon.plat import ISLINUX
|
from hscommon.plat import ISLINUX
|
||||||
from qtlib.util import horizontalWrap
|
from qtlib.util import horizontal_wrap
|
||||||
from qtlib.preferences import get_langnames
|
from qtlib.preferences import get_langnames
|
||||||
from enum import Flag, auto
|
from enum import Flag, auto
|
||||||
|
|
||||||
@ -95,11 +95,11 @@ class PreferencesDialogBase(QDialog):
|
|||||||
self.filterHardnessHLayoutSub1 = QHBoxLayout()
|
self.filterHardnessHLayoutSub1 = QHBoxLayout()
|
||||||
self.filterHardnessHLayoutSub1.setSpacing(12)
|
self.filterHardnessHLayoutSub1.setSpacing(12)
|
||||||
self.filterHardnessSlider = QSlider(self)
|
self.filterHardnessSlider = QSlider(self)
|
||||||
sizePolicy = QSizePolicy(QSizePolicy.Expanding, QSizePolicy.Fixed)
|
size_policy = QSizePolicy(QSizePolicy.Expanding, QSizePolicy.Fixed)
|
||||||
sizePolicy.setHorizontalStretch(0)
|
size_policy.setHorizontalStretch(0)
|
||||||
sizePolicy.setVerticalStretch(0)
|
size_policy.setVerticalStretch(0)
|
||||||
sizePolicy.setHeightForWidth(self.filterHardnessSlider.sizePolicy().hasHeightForWidth())
|
size_policy.setHeightForWidth(self.filterHardnessSlider.sizePolicy().hasHeightForWidth())
|
||||||
self.filterHardnessSlider.setSizePolicy(sizePolicy)
|
self.filterHardnessSlider.setSizePolicy(size_policy)
|
||||||
self.filterHardnessSlider.setMinimum(1)
|
self.filterHardnessSlider.setMinimum(1)
|
||||||
self.filterHardnessSlider.setMaximum(100)
|
self.filterHardnessSlider.setMaximum(100)
|
||||||
self.filterHardnessSlider.setTracking(True)
|
self.filterHardnessSlider.setTracking(True)
|
||||||
@ -115,8 +115,8 @@ class PreferencesDialogBase(QDialog):
|
|||||||
self.moreResultsLabel = QLabel(self)
|
self.moreResultsLabel = QLabel(self)
|
||||||
self.moreResultsLabel.setText(tr("More Results"))
|
self.moreResultsLabel.setText(tr("More Results"))
|
||||||
self.filterHardnessHLayoutSub2.addWidget(self.moreResultsLabel)
|
self.filterHardnessHLayoutSub2.addWidget(self.moreResultsLabel)
|
||||||
spacerItem = QSpacerItem(40, 20, QSizePolicy.Expanding, QSizePolicy.Minimum)
|
spacer_item = QSpacerItem(40, 20, QSizePolicy.Expanding, QSizePolicy.Minimum)
|
||||||
self.filterHardnessHLayoutSub2.addItem(spacerItem)
|
self.filterHardnessHLayoutSub2.addItem(spacer_item)
|
||||||
self.fewerResultsLabel = QLabel(self)
|
self.fewerResultsLabel = QLabel(self)
|
||||||
self.fewerResultsLabel.setText(tr("Fewer Results"))
|
self.fewerResultsLabel.setText(tr("Fewer Results"))
|
||||||
self.filterHardnessHLayoutSub2.addWidget(self.fewerResultsLabel)
|
self.filterHardnessHLayoutSub2.addWidget(self.fewerResultsLabel)
|
||||||
@ -146,7 +146,7 @@ class PreferencesDialogBase(QDialog):
|
|||||||
self.languageComboBox = QComboBox(self)
|
self.languageComboBox = QComboBox(self)
|
||||||
for lang in self.supportedLanguages:
|
for lang in self.supportedLanguages:
|
||||||
self.languageComboBox.addItem(get_langnames()[lang])
|
self.languageComboBox.addItem(get_langnames()[lang])
|
||||||
layout.addLayout(horizontalWrap([self.languageLabel, self.languageComboBox, None]))
|
layout.addLayout(horizontal_wrap([self.languageLabel, self.languageComboBox, None]))
|
||||||
self._setupAddCheckbox(
|
self._setupAddCheckbox(
|
||||||
"tabs_default_pos",
|
"tabs_default_pos",
|
||||||
tr("Use default position for tab bar (requires restart)"),
|
tr("Use default position for tab bar (requires restart)"),
|
||||||
|
@ -25,7 +25,7 @@ from PyQt5.QtWidgets import (
|
|||||||
|
|
||||||
from hscommon.trans import trget
|
from hscommon.trans import trget
|
||||||
from qtlib.selectable_list import ComboboxModel, ListviewModel
|
from qtlib.selectable_list import ComboboxModel, ListviewModel
|
||||||
from qtlib.util import verticalSpacer
|
from qtlib.util import vertical_spacer
|
||||||
from core.gui.prioritize_dialog import PrioritizeDialog as PrioritizeDialogModel
|
from core.gui.prioritize_dialog import PrioritizeDialog as PrioritizeDialogModel
|
||||||
|
|
||||||
tr = trget("ui")
|
tr = trget("ui")
|
||||||
@ -40,12 +40,12 @@ class PrioritizationList(ListviewModel):
|
|||||||
return Qt.ItemIsEnabled | Qt.ItemIsSelectable | Qt.ItemIsDragEnabled
|
return Qt.ItemIsEnabled | Qt.ItemIsSelectable | Qt.ItemIsDragEnabled
|
||||||
|
|
||||||
# --- Drag & Drop
|
# --- Drag & Drop
|
||||||
def dropMimeData(self, mimeData, action, row, column, parentIndex):
|
def dropMimeData(self, mime_data, action, row, column, parent_index):
|
||||||
if not mimeData.hasFormat(MIME_INDEXES):
|
if not mime_data.hasFormat(MIME_INDEXES):
|
||||||
return False
|
return False
|
||||||
# Since we only drop in between items, parentIndex must be invalid, and we use the row arg
|
# Since we only drop in between items, parentIndex must be invalid, and we use the row arg
|
||||||
# to know where the drop took place.
|
# to know where the drop took place.
|
||||||
if parentIndex.isValid():
|
if parent_index.isValid():
|
||||||
return False
|
return False
|
||||||
# "When row and column are -1 it means that the dropped data should be considered as
|
# "When row and column are -1 it means that the dropped data should be considered as
|
||||||
# dropped directly on parent."
|
# dropped directly on parent."
|
||||||
@ -53,8 +53,8 @@ class PrioritizationList(ListviewModel):
|
|||||||
# dragged items after the last item.
|
# dragged items after the last item.
|
||||||
if row < 0:
|
if row < 0:
|
||||||
row = len(self.model) - 1
|
row = len(self.model) - 1
|
||||||
strMimeData = bytes(mimeData.data(MIME_INDEXES)).decode()
|
str_mime_data = bytes(mime_data.data(MIME_INDEXES)).decode()
|
||||||
indexes = list(map(int, strMimeData.split(",")))
|
indexes = list(map(int, str_mime_data.split(",")))
|
||||||
self.model.move_indexes(indexes, row)
|
self.model.move_indexes(indexes, row)
|
||||||
self.view.selectionModel().clearSelection()
|
self.view.selectionModel().clearSelection()
|
||||||
return True
|
return True
|
||||||
@ -62,9 +62,9 @@ class PrioritizationList(ListviewModel):
|
|||||||
def mimeData(self, indexes):
|
def mimeData(self, indexes):
|
||||||
rows = {str(index.row()) for index in indexes}
|
rows = {str(index.row()) for index in indexes}
|
||||||
data = ",".join(rows)
|
data = ",".join(rows)
|
||||||
mimeData = QMimeData()
|
mime_data = QMimeData()
|
||||||
mimeData.setData(MIME_INDEXES, QByteArray(data.encode()))
|
mime_data.setData(MIME_INDEXES, QByteArray(data.encode()))
|
||||||
return mimeData
|
return mime_data
|
||||||
|
|
||||||
def mimeTypes(self):
|
def mimeTypes(self):
|
||||||
return [MIME_INDEXES]
|
return [MIME_INDEXES]
|
||||||
@ -135,10 +135,10 @@ class PrioritizeDialog(QDialog):
|
|||||||
self.rightSide = QWidget()
|
self.rightSide = QWidget()
|
||||||
self.rightWidgetsLayout = QHBoxLayout()
|
self.rightWidgetsLayout = QHBoxLayout()
|
||||||
self.addRemoveButtonsLayout = QVBoxLayout()
|
self.addRemoveButtonsLayout = QVBoxLayout()
|
||||||
self.addRemoveButtonsLayout.addItem(verticalSpacer())
|
self.addRemoveButtonsLayout.addItem(vertical_spacer())
|
||||||
self.addRemoveButtonsLayout.addWidget(self.addCriteriaButton)
|
self.addRemoveButtonsLayout.addWidget(self.addCriteriaButton)
|
||||||
self.addRemoveButtonsLayout.addWidget(self.removeCriteriaButton)
|
self.addRemoveButtonsLayout.addWidget(self.removeCriteriaButton)
|
||||||
self.addRemoveButtonsLayout.addItem(verticalSpacer())
|
self.addRemoveButtonsLayout.addItem(vertical_spacer())
|
||||||
self.rightWidgetsLayout.addLayout(self.addRemoveButtonsLayout)
|
self.rightWidgetsLayout.addLayout(self.addRemoveButtonsLayout)
|
||||||
self.rightWidgetsLayout.addWidget(self.prioritizationListView)
|
self.rightWidgetsLayout.addWidget(self.prioritizationListView)
|
||||||
self.rightSide.setLayout(self.rightWidgetsLayout)
|
self.rightSide.setLayout(self.rightWidgetsLayout)
|
||||||
|
@ -63,8 +63,8 @@ class ProblemDialog(QDialog):
|
|||||||
self.revealButton = QPushButton(self)
|
self.revealButton = QPushButton(self)
|
||||||
self.revealButton.setText(tr("Reveal Selected"))
|
self.revealButton.setText(tr("Reveal Selected"))
|
||||||
self.horizontalLayout.addWidget(self.revealButton)
|
self.horizontalLayout.addWidget(self.revealButton)
|
||||||
spacerItem = QSpacerItem(40, 20, QSizePolicy.Expanding, QSizePolicy.Minimum)
|
spacer_item = QSpacerItem(40, 20, QSizePolicy.Expanding, QSizePolicy.Minimum)
|
||||||
self.horizontalLayout.addItem(spacerItem)
|
self.horizontalLayout.addItem(spacer_item)
|
||||||
self.closeButton = QPushButton(self)
|
self.closeButton = QPushButton(self)
|
||||||
self.closeButton.setText(tr("Close"))
|
self.closeButton.setText(tr("Close"))
|
||||||
self.closeButton.setDefault(True)
|
self.closeButton.setDefault(True)
|
||||||
|
@ -24,7 +24,7 @@ from PyQt5.QtWidgets import (
|
|||||||
)
|
)
|
||||||
|
|
||||||
from hscommon.trans import trget
|
from hscommon.trans import trget
|
||||||
from qtlib.util import moveToScreenCenter, horizontalWrap, createActions
|
from qtlib.util import move_to_screen_center, horizontal_wrap, create_actions
|
||||||
from qtlib.search_edit import SearchEdit
|
from qtlib.search_edit import SearchEdit
|
||||||
|
|
||||||
from core.app import AppMode
|
from core.app import AppMode
|
||||||
@ -204,7 +204,7 @@ class ResultWindow(QMainWindow):
|
|||||||
self.app.invokeCustomCommand,
|
self.app.invokeCustomCommand,
|
||||||
),
|
),
|
||||||
]
|
]
|
||||||
createActions(ACTIONS, self)
|
create_actions(ACTIONS, self)
|
||||||
self.actionDelta.setCheckable(True)
|
self.actionDelta.setCheckable(True)
|
||||||
self.actionPowerMarker.setCheckable(True)
|
self.actionPowerMarker.setCheckable(True)
|
||||||
|
|
||||||
@ -306,21 +306,21 @@ class ResultWindow(QMainWindow):
|
|||||||
action.item_index = -1
|
action.item_index = -1
|
||||||
|
|
||||||
# Action menu
|
# Action menu
|
||||||
actionMenu = QMenu(tr("Actions"), menubar)
|
action_menu = QMenu(tr("Actions"), menubar)
|
||||||
actionMenu.addAction(self.actionDeleteMarked)
|
action_menu.addAction(self.actionDeleteMarked)
|
||||||
actionMenu.addAction(self.actionMoveMarked)
|
action_menu.addAction(self.actionMoveMarked)
|
||||||
actionMenu.addAction(self.actionCopyMarked)
|
action_menu.addAction(self.actionCopyMarked)
|
||||||
actionMenu.addAction(self.actionRemoveMarked)
|
action_menu.addAction(self.actionRemoveMarked)
|
||||||
actionMenu.addSeparator()
|
action_menu.addSeparator()
|
||||||
actionMenu.addAction(self.actionRemoveSelected)
|
action_menu.addAction(self.actionRemoveSelected)
|
||||||
actionMenu.addAction(self.actionIgnoreSelected)
|
action_menu.addAction(self.actionIgnoreSelected)
|
||||||
actionMenu.addAction(self.actionMakeSelectedReference)
|
action_menu.addAction(self.actionMakeSelectedReference)
|
||||||
actionMenu.addSeparator()
|
action_menu.addSeparator()
|
||||||
actionMenu.addAction(self.actionOpenSelected)
|
action_menu.addAction(self.actionOpenSelected)
|
||||||
actionMenu.addAction(self.actionRevealSelected)
|
action_menu.addAction(self.actionRevealSelected)
|
||||||
actionMenu.addAction(self.actionInvokeCustomCommand)
|
action_menu.addAction(self.actionInvokeCustomCommand)
|
||||||
actionMenu.addAction(self.actionRenameSelected)
|
action_menu.addAction(self.actionRenameSelected)
|
||||||
self.actionActions.setMenu(actionMenu)
|
self.actionActions.setMenu(action_menu)
|
||||||
self.actionsButton.setMenu(self.actionActions.menu())
|
self.actionsButton.setMenu(self.actionActions.menu())
|
||||||
|
|
||||||
def _setupUi(self):
|
def _setupUi(self):
|
||||||
@ -336,7 +336,7 @@ class ResultWindow(QMainWindow):
|
|||||||
self.deltaValuesCheckBox = QCheckBox(tr("Delta Values"))
|
self.deltaValuesCheckBox = QCheckBox(tr("Delta Values"))
|
||||||
self.searchEdit = SearchEdit()
|
self.searchEdit = SearchEdit()
|
||||||
self.searchEdit.setMaximumWidth(300)
|
self.searchEdit.setMaximumWidth(300)
|
||||||
self.horizontalLayout = horizontalWrap(
|
self.horizontalLayout = horizontal_wrap(
|
||||||
[
|
[
|
||||||
self.actionsButton,
|
self.actionsButton,
|
||||||
self.detailsButton,
|
self.detailsButton,
|
||||||
@ -379,12 +379,12 @@ class ResultWindow(QMainWindow):
|
|||||||
# moves to center of closest screen if partially off screen
|
# moves to center of closest screen if partially off screen
|
||||||
frame = self.frameGeometry()
|
frame = self.frameGeometry()
|
||||||
if QDesktopWidget().screenNumber(self) == -1:
|
if QDesktopWidget().screenNumber(self) == -1:
|
||||||
moveToScreenCenter(self)
|
move_to_screen_center(self)
|
||||||
elif QDesktopWidget().availableGeometry(self).contains(frame) is False:
|
elif QDesktopWidget().availableGeometry(self).contains(frame) is False:
|
||||||
frame.moveCenter(QDesktopWidget().availableGeometry(self).center())
|
frame.moveCenter(QDesktopWidget().availableGeometry(self).center())
|
||||||
self.move(frame.topLeft())
|
self.move(frame.topLeft())
|
||||||
else:
|
else:
|
||||||
moveToScreenCenter(self)
|
move_to_screen_center(self)
|
||||||
|
|
||||||
# --- Private
|
# --- Private
|
||||||
def _update_column_actions_status(self):
|
def _update_column_actions_status(self):
|
||||||
|
@ -50,8 +50,7 @@ class ResultsModel(Table):
|
|||||||
if self.prefs.reference_bold_font:
|
if self.prefs.reference_bold_font:
|
||||||
font.setBold(row.isref)
|
font.setBold(row.isref)
|
||||||
return font
|
return font
|
||||||
elif role == Qt.EditRole:
|
elif role == Qt.EditRole and column.name == "name":
|
||||||
if column.name == "name":
|
|
||||||
return row.data[column.name]
|
return row.data[column.name]
|
||||||
return None
|
return None
|
||||||
|
|
||||||
@ -69,8 +68,7 @@ class ResultsModel(Table):
|
|||||||
if column.name == "marked":
|
if column.name == "marked":
|
||||||
row.marked = bool(value)
|
row.marked = bool(value)
|
||||||
return True
|
return True
|
||||||
elif role == Qt.EditRole:
|
elif role == Qt.EditRole and column.name == "name":
|
||||||
if column.name == "name":
|
|
||||||
return self.model.rename_selected(value)
|
return self.model.rename_selected(value)
|
||||||
return False
|
return False
|
||||||
|
|
||||||
|
@ -50,19 +50,19 @@ class PreferencesDialog(PreferencesDialogBase):
|
|||||||
self._setupAddCheckbox("ignoreSmallFilesBox", tr("Ignore files smaller than"), self.widget)
|
self._setupAddCheckbox("ignoreSmallFilesBox", tr("Ignore files smaller than"), self.widget)
|
||||||
self.horizontalLayout_2.addWidget(self.ignoreSmallFilesBox)
|
self.horizontalLayout_2.addWidget(self.ignoreSmallFilesBox)
|
||||||
self.sizeThresholdSpinBox = QSpinBox(self.widget)
|
self.sizeThresholdSpinBox = QSpinBox(self.widget)
|
||||||
sizePolicy = QSizePolicy(QSizePolicy.Maximum, QSizePolicy.Fixed)
|
size_policy = QSizePolicy(QSizePolicy.Maximum, QSizePolicy.Fixed)
|
||||||
sizePolicy.setHorizontalStretch(0)
|
size_policy.setHorizontalStretch(0)
|
||||||
sizePolicy.setVerticalStretch(0)
|
size_policy.setVerticalStretch(0)
|
||||||
sizePolicy.setHeightForWidth(self.sizeThresholdSpinBox.sizePolicy().hasHeightForWidth())
|
size_policy.setHeightForWidth(self.sizeThresholdSpinBox.sizePolicy().hasHeightForWidth())
|
||||||
self.sizeThresholdSpinBox.setSizePolicy(sizePolicy)
|
self.sizeThresholdSpinBox.setSizePolicy(size_policy)
|
||||||
self.sizeThresholdSpinBox.setMaximumSize(QSize(100, 16777215))
|
self.sizeThresholdSpinBox.setMaximumSize(QSize(100, 16777215))
|
||||||
self.sizeThresholdSpinBox.setRange(0, 1000000)
|
self.sizeThresholdSpinBox.setRange(0, 1000000)
|
||||||
self.horizontalLayout_2.addWidget(self.sizeThresholdSpinBox)
|
self.horizontalLayout_2.addWidget(self.sizeThresholdSpinBox)
|
||||||
self.label_6 = QLabel(self.widget)
|
self.label_6 = QLabel(self.widget)
|
||||||
self.label_6.setText(tr("KB"))
|
self.label_6.setText(tr("KB"))
|
||||||
self.horizontalLayout_2.addWidget(self.label_6)
|
self.horizontalLayout_2.addWidget(self.label_6)
|
||||||
spacerItem1 = QSpacerItem(40, 20, QSizePolicy.Expanding, QSizePolicy.Minimum)
|
spacer_item1 = QSpacerItem(40, 20, QSizePolicy.Expanding, QSizePolicy.Minimum)
|
||||||
self.horizontalLayout_2.addItem(spacerItem1)
|
self.horizontalLayout_2.addItem(spacer_item1)
|
||||||
self.verticalLayout_4.addLayout(self.horizontalLayout_2)
|
self.verticalLayout_4.addLayout(self.horizontalLayout_2)
|
||||||
self.horizontalLayout_2b = QHBoxLayout()
|
self.horizontalLayout_2b = QHBoxLayout()
|
||||||
self._setupAddCheckbox(
|
self._setupAddCheckbox(
|
||||||
@ -72,15 +72,15 @@ class PreferencesDialog(PreferencesDialogBase):
|
|||||||
)
|
)
|
||||||
self.horizontalLayout_2b.addWidget(self.bigFilePartialHashesBox)
|
self.horizontalLayout_2b.addWidget(self.bigFilePartialHashesBox)
|
||||||
self.bigSizeThresholdSpinBox = QSpinBox(self.widget)
|
self.bigSizeThresholdSpinBox = QSpinBox(self.widget)
|
||||||
self.bigSizeThresholdSpinBox.setSizePolicy(sizePolicy)
|
self.bigSizeThresholdSpinBox.setSizePolicy(size_policy)
|
||||||
self.bigSizeThresholdSpinBox.setMaximumSize(QSize(100, 16777215))
|
self.bigSizeThresholdSpinBox.setMaximumSize(QSize(100, 16777215))
|
||||||
self.bigSizeThresholdSpinBox.setRange(0, 1000000)
|
self.bigSizeThresholdSpinBox.setRange(0, 1000000)
|
||||||
self.horizontalLayout_2b.addWidget(self.bigSizeThresholdSpinBox)
|
self.horizontalLayout_2b.addWidget(self.bigSizeThresholdSpinBox)
|
||||||
self.label_6b = QLabel(self.widget)
|
self.label_6b = QLabel(self.widget)
|
||||||
self.label_6b.setText(tr("MB"))
|
self.label_6b.setText(tr("MB"))
|
||||||
self.horizontalLayout_2b.addWidget(self.label_6b)
|
self.horizontalLayout_2b.addWidget(self.label_6b)
|
||||||
spacerItem2 = QSpacerItem(40, 20, QSizePolicy.Expanding, QSizePolicy.Minimum)
|
spacer_item2 = QSpacerItem(40, 20, QSizePolicy.Expanding, QSizePolicy.Minimum)
|
||||||
self.horizontalLayout_2b.addItem(spacerItem2)
|
self.horizontalLayout_2b.addItem(spacer_item2)
|
||||||
self.verticalLayout_4.addLayout(self.horizontalLayout_2b)
|
self.verticalLayout_4.addLayout(self.horizontalLayout_2b)
|
||||||
self._setupAddCheckbox(
|
self._setupAddCheckbox(
|
||||||
"ignoreHardlinkMatches",
|
"ignoreHardlinkMatches",
|
||||||
|
@ -14,7 +14,7 @@ from PyQt5.QtWidgets import (
|
|||||||
QStackedWidget,
|
QStackedWidget,
|
||||||
)
|
)
|
||||||
from hscommon.trans import trget
|
from hscommon.trans import trget
|
||||||
from qtlib.util import moveToScreenCenter, createActions
|
from qtlib.util import move_to_screen_center, create_actions
|
||||||
from .directories_dialog import DirectoriesDialog
|
from .directories_dialog import DirectoriesDialog
|
||||||
from .result_window import ResultWindow
|
from .result_window import ResultWindow
|
||||||
from .ignore_list_dialog import IgnoreListDialog
|
from .ignore_list_dialog import IgnoreListDialog
|
||||||
@ -46,7 +46,7 @@ class TabWindow(QMainWindow):
|
|||||||
self.toggleTabBar,
|
self.toggleTabBar,
|
||||||
),
|
),
|
||||||
]
|
]
|
||||||
createActions(ACTIONS, self)
|
create_actions(ACTIONS, self)
|
||||||
self.actionToggleTabs.setCheckable(True)
|
self.actionToggleTabs.setCheckable(True)
|
||||||
self.actionToggleTabs.setChecked(True)
|
self.actionToggleTabs.setChecked(True)
|
||||||
|
|
||||||
@ -78,7 +78,7 @@ class TabWindow(QMainWindow):
|
|||||||
if self.app.prefs.mainWindowRect is not None:
|
if self.app.prefs.mainWindowRect is not None:
|
||||||
self.setGeometry(self.app.prefs.mainWindowRect)
|
self.setGeometry(self.app.prefs.mainWindowRect)
|
||||||
else:
|
else:
|
||||||
moveToScreenCenter(self)
|
move_to_screen_center(self)
|
||||||
|
|
||||||
def _setupMenu(self):
|
def _setupMenu(self):
|
||||||
"""Setup the menubar boiler plates which will be filled by the underlying
|
"""Setup the menubar boiler plates which will be filled by the underlying
|
||||||
@ -174,7 +174,6 @@ class TabWindow(QMainWindow):
|
|||||||
def addTab(self, page, title, switch=False):
|
def addTab(self, page, title, switch=False):
|
||||||
# Warning: this supposedly takes ownership of the page
|
# Warning: this supposedly takes ownership of the page
|
||||||
index = self.tabWidget.addTab(page, title)
|
index = self.tabWidget.addTab(page, title)
|
||||||
# index = self.tabWidget.insertTab(-1, page, title)
|
|
||||||
if isinstance(page, DirectoriesDialog):
|
if isinstance(page, DirectoriesDialog):
|
||||||
self.tabWidget.tabBar().setTabButton(index, QTabBar.RightSide, None)
|
self.tabWidget.tabBar().setTabButton(index, QTabBar.RightSide, None)
|
||||||
if switch:
|
if switch:
|
||||||
|
@ -36,11 +36,11 @@ class AboutBox(QDialog):
|
|||||||
def _setupUi(self):
|
def _setupUi(self):
|
||||||
self.setWindowTitle(tr("About {}").format(QCoreApplication.instance().applicationName()))
|
self.setWindowTitle(tr("About {}").format(QCoreApplication.instance().applicationName()))
|
||||||
self.resize(400, 290)
|
self.resize(400, 290)
|
||||||
sizePolicy = QSizePolicy(QSizePolicy.Fixed, QSizePolicy.Fixed)
|
size_policy = QSizePolicy(QSizePolicy.Fixed, QSizePolicy.Fixed)
|
||||||
sizePolicy.setHorizontalStretch(0)
|
size_policy.setHorizontalStretch(0)
|
||||||
sizePolicy.setVerticalStretch(0)
|
size_policy.setVerticalStretch(0)
|
||||||
sizePolicy.setHeightForWidth(self.sizePolicy().hasHeightForWidth())
|
size_policy.setHeightForWidth(self.sizePolicy().hasHeightForWidth())
|
||||||
self.setSizePolicy(sizePolicy)
|
self.setSizePolicy(size_policy)
|
||||||
self.horizontalLayout = QHBoxLayout(self)
|
self.horizontalLayout = QHBoxLayout(self)
|
||||||
self.logoLabel = QLabel(self)
|
self.logoLabel = QLabel(self)
|
||||||
self.logoLabel.setPixmap(QPixmap(":/%s_big" % self.app.LOGO_NAME))
|
self.logoLabel.setPixmap(QPixmap(":/%s_big" % self.app.LOGO_NAME))
|
||||||
|
@ -22,7 +22,7 @@ from PyQt5.QtWidgets import (
|
|||||||
|
|
||||||
from hscommon.trans import trget
|
from hscommon.trans import trget
|
||||||
from hscommon.desktop import open_url
|
from hscommon.desktop import open_url
|
||||||
from .util import horizontalSpacer
|
from .util import horizontal_spacer
|
||||||
|
|
||||||
tr = trget("qtlib")
|
tr = trget("qtlib")
|
||||||
|
|
||||||
@ -34,10 +34,10 @@ class ErrorReportDialog(QDialog):
|
|||||||
self._setupUi()
|
self._setupUi()
|
||||||
name = QCoreApplication.applicationName()
|
name = QCoreApplication.applicationName()
|
||||||
version = QCoreApplication.applicationVersion()
|
version = QCoreApplication.applicationVersion()
|
||||||
errorText = "Application Name: {}\nVersion: {}\n\n{}".format(name, version, error)
|
error_text = "Application Name: {}\nVersion: {}\n\n{}".format(name, version, error)
|
||||||
# Under windows, we end up with an error report without linesep if we don't mangle it
|
# Under windows, we end up with an error report without linesep if we don't mangle it
|
||||||
errorText = errorText.replace("\n", os.linesep)
|
error_text = error_text.replace("\n", os.linesep)
|
||||||
self.errorTextEdit.setPlainText(errorText)
|
self.errorTextEdit.setPlainText(error_text)
|
||||||
self.github_url = github_url
|
self.github_url = github_url
|
||||||
|
|
||||||
self.sendButton.clicked.connect(self.goToGithub)
|
self.sendButton.clicked.connect(self.goToGithub)
|
||||||
@ -68,7 +68,7 @@ class ErrorReportDialog(QDialog):
|
|||||||
self.label2.setWordWrap(True)
|
self.label2.setWordWrap(True)
|
||||||
self.verticalLayout.addWidget(self.label2)
|
self.verticalLayout.addWidget(self.label2)
|
||||||
self.horizontalLayout = QHBoxLayout()
|
self.horizontalLayout = QHBoxLayout()
|
||||||
self.horizontalLayout.addItem(horizontalSpacer())
|
self.horizontalLayout.addItem(horizontal_spacer())
|
||||||
self.dontSendButton = QPushButton(self)
|
self.dontSendButton = QPushButton(self)
|
||||||
self.dontSendButton.setText(tr("Close"))
|
self.dontSendButton.setText(tr("Close"))
|
||||||
self.dontSendButton.setMinimumSize(QSize(110, 0))
|
self.dontSendButton.setMinimumSize(QSize(110, 0))
|
||||||
|
@ -8,7 +8,7 @@
|
|||||||
from PyQt5.QtCore import pyqtSignal
|
from PyQt5.QtCore import pyqtSignal
|
||||||
from PyQt5.QtWidgets import QWidget, QHBoxLayout, QRadioButton
|
from PyQt5.QtWidgets import QWidget, QHBoxLayout, QRadioButton
|
||||||
|
|
||||||
from .util import horizontalSpacer
|
from .util import horizontal_spacer
|
||||||
|
|
||||||
|
|
||||||
class RadioBox(QWidget):
|
class RadioBox(QWidget):
|
||||||
@ -21,7 +21,7 @@ class RadioBox(QWidget):
|
|||||||
self._buttons = []
|
self._buttons = []
|
||||||
self._labels = items
|
self._labels = items
|
||||||
self._selected_index = 0
|
self._selected_index = 0
|
||||||
self._spacer = horizontalSpacer() if not spread else None
|
self._spacer = horizontal_spacer() if not spread else None
|
||||||
self._layout = QHBoxLayout(self)
|
self._layout = QHBoxLayout(self)
|
||||||
self._update_buttons()
|
self._update_buttons()
|
||||||
|
|
||||||
|
@ -20,12 +20,12 @@ MenuEntry = namedtuple("MenuEntry", "menu fixedItemCount")
|
|||||||
|
|
||||||
|
|
||||||
class Recent(QObject):
|
class Recent(QObject):
|
||||||
def __init__(self, app, prefName, maxItemCount=10, **kwargs):
|
def __init__(self, app, pref_name, max_item_count=10, **kwargs):
|
||||||
super().__init__(**kwargs)
|
super().__init__(**kwargs)
|
||||||
self._app = app
|
self._app = app
|
||||||
self._menuEntries = []
|
self._menuEntries = []
|
||||||
self._prefName = prefName
|
self._prefName = pref_name
|
||||||
self._maxItemCount = maxItemCount
|
self._maxItemCount = max_item_count
|
||||||
self._items = []
|
self._items = []
|
||||||
self._loadFromPrefs()
|
self._loadFromPrefs()
|
||||||
|
|
||||||
@ -41,9 +41,9 @@ class Recent(QObject):
|
|||||||
def _insertItem(self, item):
|
def _insertItem(self, item):
|
||||||
self._items = dedupe([item] + self._items)[: self._maxItemCount]
|
self._items = dedupe([item] + self._items)[: self._maxItemCount]
|
||||||
|
|
||||||
def _refreshMenu(self, menuEntry):
|
def _refreshMenu(self, menu_entry):
|
||||||
menu, fixedItemCount = menuEntry
|
menu, fixed_item_count = menu_entry
|
||||||
for action in menu.actions()[fixedItemCount:]:
|
for action in menu.actions()[fixed_item_count:]:
|
||||||
menu.removeAction(action)
|
menu.removeAction(action)
|
||||||
for item in self._items:
|
for item in self._items:
|
||||||
action = QAction(item, menu)
|
action = QAction(item, menu)
|
||||||
@ -56,17 +56,17 @@ class Recent(QObject):
|
|||||||
menu.addAction(action)
|
menu.addAction(action)
|
||||||
|
|
||||||
def _refreshAllMenus(self):
|
def _refreshAllMenus(self):
|
||||||
for menuEntry in self._menuEntries:
|
for menu_entry in self._menuEntries:
|
||||||
self._refreshMenu(menuEntry)
|
self._refreshMenu(menu_entry)
|
||||||
|
|
||||||
def _saveToPrefs(self):
|
def _saveToPrefs(self):
|
||||||
setattr(self._app.prefs, self._prefName, self._items)
|
setattr(self._app.prefs, self._prefName, self._items)
|
||||||
|
|
||||||
# --- Public
|
# --- Public
|
||||||
def addMenu(self, menu):
|
def addMenu(self, menu):
|
||||||
menuEntry = MenuEntry(menu, len(menu.actions()))
|
menu_entry = MenuEntry(menu, len(menu.actions()))
|
||||||
self._menuEntries.append(menuEntry)
|
self._menuEntries.append(menu_entry)
|
||||||
self._refreshMenu(menuEntry)
|
self._refreshMenu(menu_entry)
|
||||||
|
|
||||||
def clear(self):
|
def clear(self):
|
||||||
self._items = []
|
self._items = []
|
||||||
|
@ -36,9 +36,9 @@ class ClearableEdit(QLineEdit):
|
|||||||
self._is_clearable = is_clearable
|
self._is_clearable = is_clearable
|
||||||
if is_clearable:
|
if is_clearable:
|
||||||
self._clearButton = LineEditButton(self)
|
self._clearButton = LineEditButton(self)
|
||||||
frameWidth = self.style().pixelMetric(QStyle.PM_DefaultFrameWidth)
|
frame_width = self.style().pixelMetric(QStyle.PM_DefaultFrameWidth)
|
||||||
paddingRight = self._clearButton.sizeHint().width() + frameWidth + 1
|
padding_right = self._clearButton.sizeHint().width() + frame_width + 1
|
||||||
stylesheet = "QLineEdit {{ padding-right:{0}px; }}".format(paddingRight)
|
stylesheet = "QLineEdit {{ padding-right:{0}px; }}".format(padding_right)
|
||||||
self.setStyleSheet(stylesheet)
|
self.setStyleSheet(stylesheet)
|
||||||
self._updateClearButton()
|
self._updateClearButton()
|
||||||
|
|
||||||
@ -58,12 +58,12 @@ class ClearableEdit(QLineEdit):
|
|||||||
# --- QLineEdit overrides
|
# --- QLineEdit overrides
|
||||||
def resizeEvent(self, event):
|
def resizeEvent(self, event):
|
||||||
if self._is_clearable:
|
if self._is_clearable:
|
||||||
frameWidth = self.style().pixelMetric(QStyle.PM_DefaultFrameWidth)
|
frame_width = self.style().pixelMetric(QStyle.PM_DefaultFrameWidth)
|
||||||
rect = self.rect()
|
rect = self.rect()
|
||||||
rightHint = self._clearButton.sizeHint()
|
right_hint = self._clearButton.sizeHint()
|
||||||
rightX = rect.right() - frameWidth - rightHint.width()
|
right_x = rect.right() - frame_width - right_hint.width()
|
||||||
rightY = (rect.bottom() - rightHint.height()) // 2
|
right_y = (rect.bottom() - right_hint.height()) // 2
|
||||||
self._clearButton.move(rightX, rightY)
|
self._clearButton.move(right_x, right_y)
|
||||||
|
|
||||||
# --- Event Handlers
|
# --- Event Handlers
|
||||||
def _textChanged(self, text):
|
def _textChanged(self, text):
|
||||||
@ -102,14 +102,14 @@ class SearchEdit(ClearableEdit):
|
|||||||
if not bool(self.text()) and self.inactiveText and not self.hasFocus():
|
if not bool(self.text()) and self.inactiveText and not self.hasFocus():
|
||||||
panel = QStyleOptionFrame()
|
panel = QStyleOptionFrame()
|
||||||
self.initStyleOption(panel)
|
self.initStyleOption(panel)
|
||||||
textRect = self.style().subElementRect(QStyle.SE_LineEditContents, panel, self)
|
text_rect = self.style().subElementRect(QStyle.SE_LineEditContents, panel, self)
|
||||||
leftMargin = 2
|
left_margin = 2
|
||||||
rightMargin = self._clearButton.iconSize().width()
|
right_margin = self._clearButton.iconSize().width()
|
||||||
textRect.adjust(leftMargin, 0, -rightMargin, 0)
|
text_rect.adjust(left_margin, 0, -right_margin, 0)
|
||||||
painter = QPainter(self)
|
painter = QPainter(self)
|
||||||
disabledColor = self.palette().brush(QPalette.Disabled, QPalette.Text).color()
|
disabled_color = self.palette().brush(QPalette.Disabled, QPalette.Text).color()
|
||||||
painter.setPen(disabledColor)
|
painter.setPen(disabled_color)
|
||||||
painter.drawText(textRect, Qt.AlignLeft | Qt.AlignVCenter, self.inactiveText)
|
painter.drawText(text_rect, Qt.AlignLeft | Qt.AlignVCenter, self.inactiveText)
|
||||||
|
|
||||||
# --- Event Handlers
|
# --- Event Handlers
|
||||||
def _returnPressed(self):
|
def _returnPressed(self):
|
||||||
|
@ -80,19 +80,19 @@ class ListviewModel(SelectableList):
|
|||||||
|
|
||||||
# --- Override
|
# --- Override
|
||||||
def _updateSelection(self):
|
def _updateSelection(self):
|
||||||
newIndexes = [modelIndex.row() for modelIndex in self.view.selectionModel().selectedRows()]
|
new_indexes = [modelIndex.row() for modelIndex in self.view.selectionModel().selectedRows()]
|
||||||
if newIndexes != self.model.selected_indexes:
|
if new_indexes != self.model.selected_indexes:
|
||||||
self.model.select(newIndexes)
|
self.model.select(new_indexes)
|
||||||
|
|
||||||
def _restoreSelection(self):
|
def _restoreSelection(self):
|
||||||
newSelection = QItemSelection()
|
new_selection = QItemSelection()
|
||||||
for index in self.model.selected_indexes:
|
for index in self.model.selected_indexes:
|
||||||
newSelection.select(self.createIndex(index, 0), self.createIndex(index, 0))
|
new_selection.select(self.createIndex(index, 0), self.createIndex(index, 0))
|
||||||
self.view.selectionModel().select(newSelection, QItemSelectionModel.ClearAndSelect)
|
self.view.selectionModel().select(new_selection, QItemSelectionModel.ClearAndSelect)
|
||||||
if len(newSelection.indexes()):
|
if len(new_selection.indexes()):
|
||||||
currentIndex = newSelection.indexes()[0]
|
current_index = new_selection.indexes()[0]
|
||||||
self.view.selectionModel().setCurrentIndex(currentIndex, QItemSelectionModel.Current)
|
self.view.selectionModel().setCurrentIndex(current_index, QItemSelectionModel.Current)
|
||||||
self.view.scrollTo(currentIndex)
|
self.view.scrollTo(current_index)
|
||||||
|
|
||||||
# --- Events
|
# --- Events
|
||||||
def selectionChanged(self, index):
|
def selectionChanged(self, index):
|
||||||
|
@ -38,21 +38,21 @@ class Table(QAbstractTableModel):
|
|||||||
# an _updateViewSelection() call will normally result in an _updateModelSelection() call.
|
# an _updateViewSelection() call will normally result in an _updateModelSelection() call.
|
||||||
# to avoid infinite loops, we check that the selection will actually change before calling
|
# to avoid infinite loops, we check that the selection will actually change before calling
|
||||||
# model.select()
|
# model.select()
|
||||||
newIndexes = [modelIndex.row() for modelIndex in self.view.selectionModel().selectedRows()]
|
new_indexes = [modelIndex.row() for modelIndex in self.view.selectionModel().selectedRows()]
|
||||||
if newIndexes != self.model.selected_indexes:
|
if new_indexes != self.model.selected_indexes:
|
||||||
self.model.select(newIndexes)
|
self.model.select(new_indexes)
|
||||||
|
|
||||||
def _updateViewSelection(self):
|
def _updateViewSelection(self):
|
||||||
# Takes the selection on the model's side and update the view with it.
|
# Takes the selection on the model's side and update the view with it.
|
||||||
newSelection = QItemSelection()
|
new_selection = QItemSelection()
|
||||||
columnCount = self.columnCount(QModelIndex())
|
column_count = self.columnCount(QModelIndex())
|
||||||
for index in self.model.selected_indexes:
|
for index in self.model.selected_indexes:
|
||||||
newSelection.select(self.createIndex(index, 0), self.createIndex(index, columnCount - 1))
|
new_selection.select(self.createIndex(index, 0), self.createIndex(index, column_count - 1))
|
||||||
self.view.selectionModel().select(newSelection, QItemSelectionModel.ClearAndSelect)
|
self.view.selectionModel().select(new_selection, QItemSelectionModel.ClearAndSelect)
|
||||||
if len(newSelection.indexes()):
|
if len(new_selection.indexes()):
|
||||||
currentIndex = newSelection.indexes()[0]
|
current_index = new_selection.indexes()[0]
|
||||||
self.view.selectionModel().setCurrentIndex(currentIndex, QItemSelectionModel.Current)
|
self.view.selectionModel().setCurrentIndex(current_index, QItemSelectionModel.Current)
|
||||||
self.view.scrollTo(currentIndex)
|
self.view.scrollTo(current_index)
|
||||||
|
|
||||||
# --- Data Model methods
|
# --- Data Model methods
|
||||||
# Virtual
|
# Virtual
|
||||||
|
@ -26,27 +26,27 @@ from PyQt5.QtWidgets import (
|
|||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
def moveToScreenCenter(widget):
|
def move_to_screen_center(widget):
|
||||||
frame = widget.frameGeometry()
|
frame = widget.frameGeometry()
|
||||||
frame.moveCenter(QDesktopWidget().availableGeometry().center())
|
frame.moveCenter(QDesktopWidget().availableGeometry().center())
|
||||||
widget.move(frame.topLeft())
|
widget.move(frame.topLeft())
|
||||||
|
|
||||||
|
|
||||||
def verticalSpacer(size=None):
|
def vertical_spacer(size=None):
|
||||||
if size:
|
if size:
|
||||||
return QSpacerItem(1, size, QSizePolicy.Fixed, QSizePolicy.Fixed)
|
return QSpacerItem(1, size, QSizePolicy.Fixed, QSizePolicy.Fixed)
|
||||||
else:
|
else:
|
||||||
return QSpacerItem(1, 1, QSizePolicy.Fixed, QSizePolicy.MinimumExpanding)
|
return QSpacerItem(1, 1, QSizePolicy.Fixed, QSizePolicy.MinimumExpanding)
|
||||||
|
|
||||||
|
|
||||||
def horizontalSpacer(size=None):
|
def horizontal_spacer(size=None):
|
||||||
if size:
|
if size:
|
||||||
return QSpacerItem(size, 1, QSizePolicy.Fixed, QSizePolicy.Fixed)
|
return QSpacerItem(size, 1, QSizePolicy.Fixed, QSizePolicy.Fixed)
|
||||||
else:
|
else:
|
||||||
return QSpacerItem(1, 1, QSizePolicy.MinimumExpanding, QSizePolicy.Fixed)
|
return QSpacerItem(1, 1, QSizePolicy.MinimumExpanding, QSizePolicy.Fixed)
|
||||||
|
|
||||||
|
|
||||||
def horizontalWrap(widgets):
|
def horizontal_wrap(widgets):
|
||||||
"""Wrap all widgets in `widgets` in a horizontal layout.
|
"""Wrap all widgets in `widgets` in a horizontal layout.
|
||||||
|
|
||||||
If, instead of placing a widget in your list, you place an int or None, an horizontal spacer
|
If, instead of placing a widget in your list, you place an int or None, an horizontal spacer
|
||||||
@ -55,14 +55,14 @@ def horizontalWrap(widgets):
|
|||||||
layout = QHBoxLayout()
|
layout = QHBoxLayout()
|
||||||
for widget in widgets:
|
for widget in widgets:
|
||||||
if widget is None or isinstance(widget, int):
|
if widget is None or isinstance(widget, int):
|
||||||
layout.addItem(horizontalSpacer(size=widget))
|
layout.addItem(horizontal_spacer(size=widget))
|
||||||
else:
|
else:
|
||||||
layout.addWidget(widget)
|
layout.addWidget(widget)
|
||||||
return layout
|
return layout
|
||||||
|
|
||||||
|
|
||||||
def createActions(actions, target):
|
def create_actions(actions, target):
|
||||||
# actions = [(name, shortcut, icon, desc, func)]
|
# actions are list of (name, shortcut, icon, desc, func)
|
||||||
for name, shortcut, icon, desc, func in actions:
|
for name, shortcut, icon, desc, func in actions:
|
||||||
action = QAction(target)
|
action = QAction(target)
|
||||||
if icon:
|
if icon:
|
||||||
@ -74,7 +74,7 @@ def createActions(actions, target):
|
|||||||
setattr(target, name, action)
|
setattr(target, name, action)
|
||||||
|
|
||||||
|
|
||||||
def setAccelKeys(menu):
|
def set_accel_keys(menu):
|
||||||
actions = menu.actions()
|
actions = menu.actions()
|
||||||
titles = [a.text() for a in actions]
|
titles = [a.text() for a in actions]
|
||||||
available_characters = {c.lower() for s in titles for c in s if c.isalpha()}
|
available_characters = {c.lower() for s in titles for c in s if c.isalpha()}
|
||||||
@ -89,7 +89,7 @@ def setAccelKeys(menu):
|
|||||||
action.setText(newtext)
|
action.setText(newtext)
|
||||||
|
|
||||||
|
|
||||||
def getAppData(portable=False):
|
def get_appdata(portable=False):
|
||||||
if portable:
|
if portable:
|
||||||
return op.join(executable_folder(), "data")
|
return op.join(executable_folder(), "data")
|
||||||
else:
|
else:
|
||||||
@ -102,11 +102,11 @@ class SysWrapper(io.IOBase):
|
|||||||
logging.warning(s)
|
logging.warning(s)
|
||||||
|
|
||||||
|
|
||||||
def setupQtLogging(level=logging.WARNING, log_to_stdout=False):
|
def setup_qt_logging(level=logging.WARNING, log_to_stdout=False):
|
||||||
# Under Qt, we log in "debug.log" in appdata. Moreover, when under cx_freeze, we have a
|
# Under Qt, we log in "debug.log" in appdata. Moreover, when under cx_freeze, we have a
|
||||||
# problem because sys.stdout and sys.stderr are None, so we need to replace them with a
|
# problem because sys.stdout and sys.stderr are None, so we need to replace them with a
|
||||||
# wrapper that logs with the logging module.
|
# wrapper that logs with the logging module.
|
||||||
appdata = getAppData()
|
appdata = get_appdata()
|
||||||
if not op.exists(appdata):
|
if not op.exists(appdata):
|
||||||
os.makedirs(appdata)
|
os.makedirs(appdata)
|
||||||
# Setup logging
|
# Setup logging
|
||||||
@ -123,7 +123,7 @@ def setupQtLogging(level=logging.WARNING, log_to_stdout=False):
|
|||||||
sys.stdout = SysWrapper()
|
sys.stdout = SysWrapper()
|
||||||
|
|
||||||
|
|
||||||
def escapeamp(s):
|
def escape_amp(s):
|
||||||
# Returns `s` with escaped ampersand (& --> &&). QAction text needs to have & escaped because
|
# Returns `s` with escaped ampersand (& --> &&). QAction text needs to have & escaped because
|
||||||
# that character is used to define "accel keys".
|
# that character is used to define "accel keys".
|
||||||
return s.replace("&", "&&")
|
return s.replace("&", "&&")
|
||||||
|
16
run.py
16
run.py
@ -15,7 +15,7 @@ from PyQt5.QtWidgets import QApplication
|
|||||||
|
|
||||||
from hscommon.trans import install_gettext_trans_under_qt
|
from hscommon.trans import install_gettext_trans_under_qt
|
||||||
from qtlib.error_report_dialog import install_excepthook
|
from qtlib.error_report_dialog import install_excepthook
|
||||||
from qtlib.util import setupQtLogging
|
from qtlib.util import setup_qt_logging
|
||||||
from qtlib.preferences import create_qsettings
|
from qtlib.preferences import create_qsettings
|
||||||
from qt import dg_rc # noqa: F401
|
from qt import dg_rc # noqa: F401
|
||||||
from qt.platform import BASE_PATH
|
from qt.platform import BASE_PATH
|
||||||
@ -33,7 +33,7 @@ global dgapp
|
|||||||
dgapp = None
|
dgapp = None
|
||||||
|
|
||||||
|
|
||||||
def signalHandler(sig, frame):
|
def signal_handler(sig, frame):
|
||||||
global dgapp
|
global dgapp
|
||||||
if dgapp is None:
|
if dgapp is None:
|
||||||
return
|
return
|
||||||
@ -41,10 +41,10 @@ def signalHandler(sig, frame):
|
|||||||
dgapp.SIGTERM.emit()
|
dgapp.SIGTERM.emit()
|
||||||
|
|
||||||
|
|
||||||
def setUpSignals():
|
def setup_signals():
|
||||||
signal(SIGINT, signalHandler)
|
signal(SIGINT, signal_handler)
|
||||||
signal(SIGTERM, signalHandler)
|
signal(SIGTERM, signal_handler)
|
||||||
signal(SIGQUIT, signalHandler)
|
signal(SIGQUIT, signal_handler)
|
||||||
|
|
||||||
|
|
||||||
def main():
|
def main():
|
||||||
@ -52,13 +52,13 @@ def main():
|
|||||||
QCoreApplication.setOrganizationName("Hardcoded Software")
|
QCoreApplication.setOrganizationName("Hardcoded Software")
|
||||||
QCoreApplication.setApplicationName(__appname__)
|
QCoreApplication.setApplicationName(__appname__)
|
||||||
QCoreApplication.setApplicationVersion(__version__)
|
QCoreApplication.setApplicationVersion(__version__)
|
||||||
setupQtLogging()
|
setup_qt_logging()
|
||||||
settings = create_qsettings()
|
settings = create_qsettings()
|
||||||
lang = settings.value("Language")
|
lang = settings.value("Language")
|
||||||
locale_folder = op.join(BASE_PATH, "locale")
|
locale_folder = op.join(BASE_PATH, "locale")
|
||||||
install_gettext_trans_under_qt(locale_folder, lang)
|
install_gettext_trans_under_qt(locale_folder, lang)
|
||||||
# Handle OS signals
|
# Handle OS signals
|
||||||
setUpSignals()
|
setup_signals()
|
||||||
# Let the Python interpreter runs every 500ms to handle signals. This is
|
# Let the Python interpreter runs every 500ms to handle signals. This is
|
||||||
# required because Python cannot handle signals while the Qt event loop is
|
# required because Python cannot handle signals while the Qt event loop is
|
||||||
# running.
|
# running.
|
||||||
|
Loading…
x
Reference in New Issue
Block a user