145 lines
5.3 KiB
Python
145 lines
5.3 KiB
Python
import os
|
|
|
|
from PyQt5 import QtCore, QtWidgets
|
|
from mod import image_list_manager as imglistmgr
|
|
from mod import utils
|
|
from mod import ui_addclassifydialog
|
|
from mod import ui_renameclassifydialog
|
|
|
|
|
|
class ClassifyUiContext(QtCore.QObject):
|
|
# 分类界面相关业务
|
|
selected = QtCore.pyqtSignal(str) # 选择分类信号
|
|
|
|
def __init__(self, ui: QtWidgets.QListView, parent: QtWidgets.QMainWindow,
|
|
image_list_mgr: imglistmgr.ImageListManager):
|
|
super(ClassifyUiContext, self).__init__()
|
|
self.__ui = ui
|
|
self.__parent = parent
|
|
self.__imageListMgr = image_list_mgr
|
|
self.__menu = QtWidgets.QMenu()
|
|
self.__initMenu()
|
|
self.__initUi()
|
|
self.__connectSignal()
|
|
|
|
@property
|
|
def ui(self):
|
|
return self.__ui
|
|
|
|
@property
|
|
def parent(self):
|
|
return self.__parent
|
|
|
|
@property
|
|
def imageListManager(self):
|
|
return self.__imageListMgr
|
|
|
|
@property
|
|
def menu(self):
|
|
return self.__menu
|
|
|
|
def __initUi(self):
|
|
"""初始化分类界面"""
|
|
self.__ui.setEditTriggers(QtWidgets.QAbstractItemView.NoEditTriggers)
|
|
|
|
def __connectSignal(self):
|
|
"""连接信号"""
|
|
self.__ui.clicked.connect(self.uiClicked)
|
|
self.__ui.doubleClicked.connect(self.uiDoubleClicked)
|
|
|
|
def __initMenu(self):
|
|
"""初始化分类界面菜单"""
|
|
utils.setMenu(self.__menu, "添加分类", self.addClassify)
|
|
utils.setMenu(self.__menu, "移除分类", self.removeClassify)
|
|
utils.setMenu(self.__menu, "重命名分类", self.renemeClassify)
|
|
|
|
self.__ui.setContextMenuPolicy(QtCore.Qt.CustomContextMenu)
|
|
self.__ui.customContextMenuRequested.connect(self.__showMenu)
|
|
|
|
def __showMenu(self, pos):
|
|
"""显示分类界面菜单"""
|
|
if len(self.__imageListMgr.filePath) > 0:
|
|
self.__menu.exec_(self.__ui.mapToGlobal(pos))
|
|
|
|
def setClassifyList(self, classify_list):
|
|
"""设置分类列表"""
|
|
list_model = QtCore.QStringListModel(classify_list)
|
|
self.__ui.setModel(list_model)
|
|
|
|
def uiClicked(self, index):
|
|
"""分类列表点击"""
|
|
if not self.__ui.currentIndex().isValid():
|
|
return
|
|
txt = index.data()
|
|
self.selected.emit(txt)
|
|
|
|
def uiDoubleClicked(self, index):
|
|
"""分类列表双击"""
|
|
if not self.__ui.currentIndex().isValid():
|
|
return
|
|
ole_name = index.data()
|
|
dlg = QtWidgets.QDialog(parent=self.parent)
|
|
ui = ui_renameclassifydialog.Ui_RenameClassifyDialog()
|
|
ui.setupUi(dlg)
|
|
ui.oldNameLineEdit.setText(ole_name)
|
|
result = dlg.exec_()
|
|
new_name = ui.newNameLineEdit.text()
|
|
if result == QtWidgets.QDialog.Accepted:
|
|
mgr_result = self.__imageListMgr.renameClassify(ole_name, new_name)
|
|
if not mgr_result:
|
|
QtWidgets.QMessageBox.warning(self.parent, "重命名分类", "重命名分类错误")
|
|
else:
|
|
self.setClassifyList(self.__imageListMgr.classifyList)
|
|
self.__imageListMgr.writeFile()
|
|
|
|
def addClassify(self):
|
|
"""添加分类"""
|
|
if not os.path.exists(self.__imageListMgr.filePath):
|
|
QtWidgets.QMessageBox.information(self.__parent, "提示",
|
|
"请先打开正确的图像库")
|
|
return
|
|
dlg = QtWidgets.QDialog(parent=self.parent)
|
|
ui = ui_addclassifydialog.Ui_AddClassifyDialog()
|
|
ui.setupUi(dlg)
|
|
result = dlg.exec_()
|
|
txt = ui.lineEdit.text()
|
|
if result == QtWidgets.QDialog.Accepted:
|
|
mgr_result = self.__imageListMgr.addClassify(txt)
|
|
if not mgr_result:
|
|
QtWidgets.QMessageBox.warning(self.parent, "添加分类", "添加分类错误")
|
|
else:
|
|
self.setClassifyList(self.__imageListMgr.classifyList)
|
|
|
|
def removeClassify(self):
|
|
"""移除分类"""
|
|
if not os.path.exists(self.__imageListMgr.filePath):
|
|
QtWidgets.QMessageBox.information(self.__parent, "提示",
|
|
"请先打开正确的图像库")
|
|
return
|
|
if not self.__ui.currentIndex().isValid():
|
|
return
|
|
classify = self.__ui.currentIndex().data()
|
|
result = QtWidgets.QMessageBox.information(
|
|
self.parent,
|
|
"移除分类",
|
|
"确定移除分类: {}".format(classify),
|
|
buttons=QtWidgets.QMessageBox.Ok | QtWidgets.QMessageBox.Cancel,
|
|
defaultButton=QtWidgets.QMessageBox.Cancel)
|
|
if result == QtWidgets.QMessageBox.Ok:
|
|
if len(self.__imageListMgr.imageList(classify)) > 0:
|
|
QtWidgets.QMessageBox.warning(self.parent, "移除分类",
|
|
"分类下存在图片,请先移除图片")
|
|
else:
|
|
self.__imageListMgr.removeClassify(classify)
|
|
self.setClassifyList(self.__imageListMgr.classifyList)
|
|
|
|
def renemeClassify(self):
|
|
"""重命名分类"""
|
|
idx = self.__ui.currentIndex()
|
|
if idx.isValid():
|
|
self.uiDoubleClicked(idx)
|
|
|
|
def searchClassify(self, classify):
|
|
"""查找分类"""
|
|
self.setClassifyList(self.__imageListMgr.findLikeClassify(classify))
|