You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
179 lines
6.0 KiB
179 lines
6.0 KiB
import sys
|
|
|
|
from PySide6.QtCore import Signal
|
|
from PySide6.QtGui import Qt
|
|
from PySide6.QtWidgets import QLabel, QFrame, QPushButton, QVBoxLayout, QHBoxLayout, QApplication
|
|
|
|
from app.common.Manager import UserManager
|
|
from qfluentwidgets import FluentStyleSheet, PrimaryPushButton, TextWrap, LineEdit, InfoBar, InfoBarPosition
|
|
|
|
from qfluentwidgets.components.dialog_box.dialog import Ui_MessageBox
|
|
from qframelesswindow import FramelessDialog
|
|
|
|
|
|
class AddBookInstance:
|
|
yesSignal = Signal()
|
|
cancelSignal = Signal()
|
|
|
|
def __init__(self, *args, **kwargs):
|
|
pass
|
|
|
|
def _setUpUi(self, title, parent):
|
|
self.titleLabel = QLabel(title, parent)
|
|
|
|
self.ISBN = LineEdit()
|
|
self.ISBNBox = QHBoxLayout()
|
|
self.ISBN_text = QLabel('ISBN', parent)
|
|
self.ISBNBox.addWidget(self.ISBN_text)
|
|
self.ISBNBox.addWidget(self.ISBN)
|
|
|
|
self.location = LineEdit()
|
|
self.locationBox = QHBoxLayout()
|
|
self.location_text = QLabel('藏书位置', parent)
|
|
self.locationBox.addWidget(self.location_text)
|
|
self.locationBox.addWidget(self.location)
|
|
|
|
self.buttonGroup = QFrame(parent)
|
|
self.yesButton = PrimaryPushButton(self.tr('OK'), self.buttonGroup)
|
|
self.cancelButton = QPushButton(self.tr('Cancel'), self.buttonGroup)
|
|
|
|
self.vBoxLayout = QVBoxLayout(parent)
|
|
self.textLayout = QVBoxLayout()
|
|
self.buttonLayout = QHBoxLayout(self.buttonGroup)
|
|
|
|
self.__initWidget()
|
|
|
|
def __initWidget(self):
|
|
self.__setQss()
|
|
self.__initLayout()
|
|
|
|
# fixes https://github.com/zhiyiYo/PyQt-Fluent-Widgets/issues/19
|
|
self.yesButton.setAttribute(Qt.WA_LayoutUsesWidgetRect)
|
|
self.cancelButton.setAttribute(Qt.WA_LayoutUsesWidgetRect)
|
|
|
|
self.yesButton.setFocus()
|
|
self.buttonGroup.setFixedHeight(81)
|
|
|
|
self._adjustText()
|
|
|
|
#self.yesButton.clicked.connect(self.__onYesButtonClicked)
|
|
self.cancelButton.clicked.connect(self.__onCancelButtonClicked)
|
|
|
|
def _adjustText(self):
|
|
if self.isWindow():
|
|
if self.parent():
|
|
w = max(self.titleLabel.width(), self.parent().width())
|
|
chars = max(min(w / 9, 140), 30)
|
|
else:
|
|
chars = 100
|
|
else:
|
|
w = max(self.titleLabel.width(), self.window().width())
|
|
chars = max(min(w / 9, 100), 30)
|
|
|
|
#self.contentLabel.setText(TextWrap.wrap(self.content, chars, False)[0])
|
|
|
|
def __initLayout(self):
|
|
self.vBoxLayout.setSpacing(0)
|
|
self.vBoxLayout.setContentsMargins(0, 0, 0, 0)
|
|
self.vBoxLayout.addLayout(self.textLayout, 1)
|
|
|
|
self.vBoxLayout.addLayout(self.ISBNBox)
|
|
self.vBoxLayout.addLayout(self.locationBox)
|
|
|
|
self.vBoxLayout.addWidget(self.buttonGroup, 0, Qt.AlignBottom)
|
|
self.vBoxLayout.setSizeConstraint(QVBoxLayout.SetMinimumSize)
|
|
|
|
self.textLayout.setSpacing(12)
|
|
self.textLayout.setContentsMargins(24, 24, 24, 24)
|
|
self.textLayout.addWidget(self.titleLabel, 0, Qt.AlignTop)
|
|
|
|
|
|
self.ISBNBox.setContentsMargins(24, 24, 24, 24)
|
|
self.locationBox.setContentsMargins(24, 24, 24, 24)
|
|
|
|
self.buttonLayout.setSpacing(12)
|
|
self.buttonLayout.setContentsMargins(24, 24, 24, 24)
|
|
self.buttonLayout.addWidget(self.yesButton, 1, Qt.AlignVCenter)
|
|
self.buttonLayout.addWidget(self.cancelButton, 1, Qt.AlignVCenter)
|
|
|
|
def __onCancelButtonClicked(self):
|
|
self.reject()
|
|
self.cancelSignal.emit()
|
|
|
|
def __onYesButtonClicked(self):
|
|
self.accept()
|
|
self.yesSignal.emit()
|
|
|
|
def __setQss(self):
|
|
self.titleLabel.setObjectName("titleLabel")
|
|
self.buttonGroup.setObjectName('buttonGroup')
|
|
self.cancelButton.setObjectName('cancelButton')
|
|
|
|
FluentStyleSheet.DIALOG.apply(self)
|
|
|
|
self.yesButton.adjustSize()
|
|
self.cancelButton.adjustSize()
|
|
|
|
|
|
class AddBookInstanceDialog(FramelessDialog, AddBookInstance):
|
|
yesSignal = Signal()
|
|
cancelSignal = Signal()
|
|
|
|
def __init__(self, parent=None):
|
|
super().__init__(parent=parent)
|
|
self._setUpUi("图书添加", self)
|
|
|
|
self.windowTitleLabel = QLabel("图书添加", self)
|
|
|
|
self.setResizeEnabled(False)
|
|
self.resize(540, 192)
|
|
self.titleBar.hide()
|
|
|
|
self.vBoxLayout.insertWidget(0, self.windowTitleLabel, 0, Qt.AlignTop)
|
|
self.windowTitleLabel.setObjectName('windowTitleLabel')
|
|
FluentStyleSheet.DIALOG.apply(self)
|
|
self.setFixedSize(self.size())
|
|
|
|
self.yesButton.clicked.connect(self.addBook)
|
|
|
|
def setTitleBarVisible(self, isVisible: bool):
|
|
self.windowTitleLabel.setVisible(isVisible)
|
|
|
|
def addBook(self):
|
|
isbn = self.ISBN.text()
|
|
location = self.location.text()
|
|
|
|
if isbn == '' or location == '':
|
|
InfoBar.warning(
|
|
title='操作失败',
|
|
content="你填写的内容不够完全!",
|
|
orient=Qt.Horizontal,
|
|
isClosable=False, # disable close button
|
|
position=InfoBarPosition.TOP_LEFT,
|
|
duration=2000,
|
|
parent=self
|
|
)
|
|
else:
|
|
true = UserManager.addBookInstance(isbn, location)
|
|
if true:
|
|
self.ISBN.clear()
|
|
InfoBar.success(
|
|
title='添加书籍信息成功',
|
|
content="添加书籍信息成功,你可以继续添加书籍或退出此界面.",
|
|
orient=Qt.Horizontal,
|
|
isClosable=True,
|
|
position=InfoBarPosition.TOP,
|
|
duration=2000,
|
|
parent=self
|
|
)
|
|
else:
|
|
InfoBar.error(
|
|
title='操作失败',
|
|
content="也许你还未录入该书籍信息",
|
|
orient=Qt.Horizontal,
|
|
isClosable=True,
|
|
position=InfoBarPosition.BOTTOM_RIGHT,
|
|
duration=-1, # won't disappear automatically
|
|
parent=self
|
|
)
|