Modernize Xray asset viewer actions

Signed-off-by: Loren Eteval <loren.eteval@proton.me>
This commit is contained in:
Loren Eteval
2026-08-20 19:17:55 +08:00
parent eb47358f67
commit 6239e40026
2 changed files with 46 additions and 38 deletions
+2 -20
View File
@@ -85,20 +85,7 @@ class XrayAssetListWidget(Mixins.ThemeAware, AppQListView):
logger.info(f'Xray-core asset dir is \'{XRAY_ASSET_DIR}\'')
contextMenuActions = [
AppQAction(
_('Delete'),
callback=lambda: self.deleteSelectedItem(),
),
]
self.contextMenu = AppQMenu(*contextMenuActions)
# Add actions to self in order to activate shortcuts
self.addActions(self.contextMenu.actions())
self.setContextMenuPolicy(QtCore.Qt.ContextMenuPolicy.CustomContextMenu)
self.customContextMenuRequested.connect(self.handleCustomContextMenuRequested)
self.setContextMenuPolicy(QtCore.Qt.ContextMenuPolicy.NoContextMenu)
def showEvent(self, event):
"""Recalculate item geometry after the view receives its display style."""
@@ -106,11 +93,6 @@ class XrayAssetListWidget(Mixins.ThemeAware, AppQListView):
self.scheduleDelayedItemsLayout()
@QtCore.Slot(QtCore.QPoint)
def handleCustomContextMenuRequested(self, point):
"""Handle custom context menu requested."""
self.contextMenu.exec(self.viewport().mapToGlobal(point))
def flushItemByTheme(self, theme: str):
"""Refresh item by theme."""
self.assetModel.clear()
@@ -135,7 +117,7 @@ class XrayAssetListWidget(Mixins.ThemeAware, AppQListView):
'%Y-%m-%d %H:%M:%S'
)
item = QStandardItem(f'{filename:{maxlen + 6}}{mdate}')
item = QStandardItem(f'{filename:{maxlen + 5}}{mdate}')
item.setData(filename, QtCore.Qt.ItemDataRole.UserRole)
item.setFont(QFont(AppFontName()))
+44 -18
View File
@@ -45,8 +45,9 @@ class XrayAssetWindow(AppQMainWindow):
self.setWindowTitle(_('Xray-core Asset File'))
self.xrayAssetViewerWidget = XrayAssetListWidget(parent=self)
self.setCentralWidget(self.xrayAssetViewerWidget)
centralWidget = QWidget(parent=self)
self.xrayAssetViewerWidget = XrayAssetListWidget(parent=centralWidget)
if versionToValue(PYSIDE6_VERSION) <= versionToValue('6.1.3'):
openAssetDirectoryActions = []
@@ -55,22 +56,16 @@ class XrayAssetWindow(AppQMainWindow):
openAssetDirectoryActions = [
AppQAction(
_('Open Asset Directory'),
icon=bootstrapIcon('folder2-open.svg'),
callback=lambda: self.openAssetDirectory(),
shortcut=QtCore.QKeyCombination(
QtCore.Qt.KeyboardModifier.ControlModifier,
QtCore.Qt.Key.Key_O,
),
),
AppQSeparator(),
]
self.fileMenu = AppQMenu(
AppQAction(
_('Refresh'),
callback=lambda: self.flushItem(),
shortcut=QtCore.QKeyCombination(
QtCore.Qt.KeyboardModifier.ControlModifier,
QtCore.Qt.Key.Key_R,
),
),
AppQSeparator(),
*openAssetDirectoryActions,
@@ -78,25 +73,56 @@ class XrayAssetWindow(AppQMainWindow):
_('Import From File...'),
callback=lambda: self.appendNewItem(),
),
AppQSeparator(),
AppQAction(
_('Exit'),
callback=lambda: self.close(),
),
title=_('File'),
parent=self.menuBar(),
parent=self,
)
self.menuBar().addMenu(self.fileMenu)
self.fileButton = AppQMenuPushButton(
_('File'),
icon=bootstrapIcon('file-earmark.svg'),
popupMenu=self.fileMenu,
)
self.deleteButton = AppQPushButton(
_('Delete'),
icon=bootstrapIcon('trash.svg'),
)
self.deleteButton.clicked.connect(self.deleteSelectedItem)
self.closeWindowButton = AppQPushButton(
_('Close Window'),
icon=bootstrapIcon('window-x.svg'),
)
self.closeWindowButton.clicked.connect(self.close)
actionLayout = QHBoxLayout()
actionLayout.setContentsMargins(0, 0, 0, 0)
actionLayout.setSpacing(8)
actionLayout.addWidget(self.fileButton)
actionLayout.addWidget(self.deleteButton)
actionLayout.addStretch(1)
actionLayout.addWidget(self.closeWindowButton)
contentLayout = QVBoxLayout(centralWidget)
contentLayout.setContentsMargins(10, 10, 10, 8)
contentLayout.setSpacing(10)
contentLayout.addLayout(actionLayout)
contentLayout.addWidget(self.xrayAssetViewerWidget, 1)
self.setCentralWidget(centralWidget)
self.menuBar().hide()
def setWidthAndHeight(self):
"""Apply the default size for the Xray asset viewer window."""
self.resize(360, 360 * GOLDEN_RATIO)
self.resize(380, 380 * GOLDEN_RATIO)
def flushItem(self):
"""Refresh item."""
self.xrayAssetViewerWidget.flushItem()
def deleteSelectedItem(self):
self.xrayAssetViewerWidget.deleteSelectedItem()
@staticmethod
def openAssetDirectory():
"""Open asset directory."""