168 lines
5.8 KiB
Python
168 lines
5.8 KiB
Python
import sys
|
|
import os
|
|
import shutil
|
|
import UtilPack as util
|
|
|
|
|
|
from PyQt5.QtCore import Qt, QSettings, QRect
|
|
from PyQt5.QtWidgets import QApplication, QWidget, QMainWindow, QPushButton, QVBoxLayout, QLineEdit, \
|
|
QHBoxLayout, QTableWidget, QTableWidgetItem, QAbstractItemView, QHeaderView, QFileDialog, \
|
|
QListWidget, QListWidgetItem, QMessageBox
|
|
from PyQt5.QtGui import QResizeEvent, QCloseEvent, QColor
|
|
|
|
class MyApp(QMainWindow):
|
|
|
|
def __init__(self):
|
|
super().__init__()
|
|
self.initUI()
|
|
self.loadINI()
|
|
self.initDB()
|
|
|
|
#
|
|
def closeEvent(self, a0: 'QCloseEvent | None'):
|
|
filenameLog = f"{util.GetCurrentTime()}_DbgLog.txt"
|
|
pathDbgLog = os.path.join( self.pathLog, filenameLog)
|
|
util.SaveDbgMessages(pathDbgLog)
|
|
self.saveINI()
|
|
super().closeEvent(a0)
|
|
|
|
#
|
|
def resizeEvent(self, a0: 'QResizeEvent | None'):
|
|
pass
|
|
|
|
#
|
|
def loadINI(self):
|
|
pass
|
|
|
|
#
|
|
def saveINI(self):
|
|
pass
|
|
|
|
#
|
|
def initDB(self):
|
|
pass
|
|
|
|
#
|
|
def MakeUI_Left(self):
|
|
layout = QVBoxLayout()
|
|
|
|
layout_top = QHBoxLayout()
|
|
self.listWidget_Folders = QListWidget()
|
|
self.listWidget_Folders.setFixedHeight(100)
|
|
|
|
layout_Btns = QVBoxLayout()
|
|
btn_FolderAdd = QPushButton("폴더 추가")
|
|
btn_FolderAdd.clicked.connect(self.on_btnFolderAdd_clicked)
|
|
btn_FolderDel = QPushButton("폴더 삭제")
|
|
btn_FolderDel.clicked.connect(self.on_btnFolderDel_clicked)
|
|
btn_FolderParss = QPushButton("폴더 파싱")
|
|
btn_FolderParss.clicked.connect(self.on_btnFolderParse_clicked)
|
|
|
|
layout_Btns.addWidget(btn_FolderAdd)
|
|
layout_Btns.addWidget(btn_FolderDel)
|
|
layout_Btns.addWidget(btn_FolderParss)
|
|
|
|
layout_top.addWidget(self.listWidget_Folders)
|
|
layout_top.addLayout(layout_Btns)
|
|
|
|
self.tableWidget_Src = QTableWidget()
|
|
self.tableWidget_Src.verticalHeader().setVisible(False)
|
|
self.tableWidget_Src.setEditTriggers(QAbstractItemView.NoEditTriggers)
|
|
self.tableWidget_Src.setSortingEnabled(True)
|
|
self.tableWidget_Src.setColumnCount(5)
|
|
self.tableWidget_Src.setHorizontalHeaderLabels(["Path", "Title", "H.ID", "Img Cnt", "Dw Cnt"])
|
|
self.tableWidget_Src.horizontalHeader().setSectionResizeMode(QHeaderView.Stretch)
|
|
self.tableWidget_Src.horizontalHeader().sectionClicked.connect(self.on_tableWidget_Src_headerClicked)
|
|
self.tableWidget_Src.setSelectionBehavior(QAbstractItemView.SelectRows)
|
|
self.tableWidget_Src.setSelectionMode(QAbstractItemView.SingleSelection)
|
|
self.tableWidget_Src.itemSelectionChanged.connect(self.on_tableWidget_Src_itemSelectionChanged)
|
|
|
|
layout.addLayout(layout_top)
|
|
layout.addWidget(self.tableWidget_Src)
|
|
|
|
return layout
|
|
|
|
#
|
|
def MakeUI_Center(self):
|
|
layout = QVBoxLayout()
|
|
|
|
btn_Emptyfolder = QPushButton("빈 폴더 이동")
|
|
btn_Emptyfolder.clicked.connect(self.on_btn_Emptyfolder_clicked)
|
|
btn_ChkDuplicate = QPushButton("중복 검사 및 제거")
|
|
btn_ChkDuplicate.clicked.connect(self.on_btn_ChkDuplicate_clicked)
|
|
btn_Archive = QPushButton("압축 및 데이터 저장")
|
|
btn_Archive.clicked.connect(self.on_btn_Archive_clicked)
|
|
btn_EnterCalibre = QPushButton("컬리버에 삽입")
|
|
btn_EnterCalibre.clicked.connect(self.on_btn_EnterCalibre_clicked)
|
|
|
|
layout.addWidget(btn_Emptyfolder)
|
|
layout.addWidget(btn_ChkDuplicate)
|
|
layout.addWidget(btn_Archive)
|
|
layout.addWidget(btn_EnterCalibre)
|
|
|
|
return layout
|
|
|
|
#
|
|
def MakeUI_Right(self):
|
|
layout_top = QHBoxLayout()
|
|
self.edit_DB = QLineEdit(self)
|
|
self.edit_DB.setReadOnly(True)
|
|
self.edit_DB.setText("...")
|
|
btn_DB = QPushButton("...")
|
|
btn_DB.setFixedWidth(50)
|
|
btn_DB.clicked.connect(self.on_btnDB_clicked)
|
|
layout_top.addWidget(self.edit_DB)
|
|
layout_top.addWidget(btn_DB)
|
|
|
|
self.tableWidget_DB = QTableWidget()
|
|
self.tableWidget_DB.verticalHeader().setVisible(False)
|
|
self.tableWidget_DB.setColumnCount(5)
|
|
self.tableWidget_DB.setHorizontalHeaderLabels(["Title", "Author", "Cover", "Exts", "ID"])
|
|
self.tableWidget_DB.horizontalHeader().setSectionResizeMode(QHeaderView.Stretch)
|
|
self.tableWidget_DB.setSelectionBehavior(QAbstractItemView.SelectRows)
|
|
self.tableWidget_DB.setSelectionMode(QAbstractItemView.SingleSelection)
|
|
self.tableWidget_DB.itemSelectionChanged.connect(self.on_tableWidget_DB_itemSelectionChanged)
|
|
|
|
layout = QVBoxLayout()
|
|
layout.addLayout(layout_top)
|
|
layout.addWidget(self.tableWidget_DB)
|
|
|
|
return layout
|
|
|
|
#
|
|
def MakeUI(self):
|
|
layout_L = self.MakeUI_Left()
|
|
layout_C = self.MakeUI_Center()
|
|
layout_R = self.MakeUI_Right()
|
|
|
|
# 레이아웃 설정
|
|
layout = QHBoxLayout()
|
|
layout.addLayout(layout_L, stretch = 10)
|
|
layout.addLayout(layout_C, stretch = 1)
|
|
layout.addLayout(layout_R, stretch = 10)
|
|
|
|
return layout
|
|
|
|
#
|
|
def initUI(self):
|
|
layout = self.MakeUI()
|
|
|
|
# 레이아웃을 윈도우에 적용
|
|
central_widget = QWidget()
|
|
central_widget.setLayout(layout)
|
|
self.setCentralWidget(central_widget)
|
|
self.setWindowTitle('Manga Database')
|
|
self.resize(800, 600)
|
|
self.show()
|
|
|
|
# 테이블의 특정 행에 배경색을 설정한다
|
|
# nRow: 배경색을 설정할 행 번호, color: 배경색 (Qt.GlobalColor)
|
|
def SrcTableRowBgColor(self, nRow:int, color:Qt.GlobalColor) -> None:
|
|
for col in range(self.tableWidget_Src.columnCount()):
|
|
item = self.tableWidget_Src.item(nRow, col)
|
|
if item:
|
|
item.setBackground(Qt.GlobalColor(color))
|
|
|
|
|
|
|