123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169 |
- #include "FolderListSettingCard.h"
- #include "Layout/VBoxLayout.h"
- #include "DialogBox/Dialog.h"
- #include <QFileDialog>
- #include <QPainter>
- FToolButton::FToolButton(FluentIconBase *icon, const QSize &size, const QSize &iconSize, QWidget *parent)
- : QToolButton(parent), m_isPressed(false), m_icon(icon), m_iconSize(iconSize)
- {
- setFixedSize(size);
- }
- void FToolButton::mousePressEvent(QMouseEvent *event)
- {
- m_isPressed = true;
- QToolButton::mousePressEvent(event);
- }
- void FToolButton::mouseReleaseEvent(QMouseEvent *event)
- {
- m_isPressed = false;
- QToolButton::mouseReleaseEvent(event);
- }
- void FToolButton::paintEvent(QPaintEvent *event)
- {
- QToolButton::paintEvent(event);
- QPainter painter(this);
- painter.setRenderHints(QPainter::Antialiasing | QPainter::SmoothPixmapTransform);
- if (m_isPressed) {
- painter.setOpacity(0.63);
- } else {
- painter.setOpacity(1);
- }
- int w = m_iconSize.width();
- int h = m_iconSize.height();
- m_icon->render(&painter, QRectF((this->width() - w) / 2, (this->height() - h) / 2, w, h).toRect());
- }
- FPushButton::FPushButton(FluentIconBase *icon, const QString &text, QWidget *parent)
- : QPushButton(parent), m_isPressed(false), m_icon(icon)
- {
- setText(text);
- }
- void FPushButton::mousePressEvent(QMouseEvent *event)
- {
- m_isPressed = true;
- QPushButton::mousePressEvent(event);
- }
- void FPushButton::mouseReleaseEvent(QMouseEvent *event)
- {
- m_isPressed = false;
- QPushButton::mouseReleaseEvent(event);
- }
- void FPushButton::paintEvent(QPaintEvent *event)
- {
- QPushButton::paintEvent(event);
- QPainter painter(this);
- painter.setRenderHints(QPainter::Antialiasing);
- if (m_isPressed) {
- painter.setOpacity(0.63);
- } else {
- painter.setOpacity(1);
- }
- m_icon->render(&painter, QRectF(12, 8, 16, 16).toRect());
- }
- FolderItem::FolderItem(const QString &folder, QWidget *parent) : QWidget(parent), m_folder(folder)
- {
- hBoxLayout = new QHBoxLayout(this);
- m_folderLabel = new QLabel(folder, this);
- m_removeButton = new FToolButton(NEWFLICON(FluentIcon, CLOSE), QSize(39, 29), QSize(12, 12), this);
- setFixedHeight(53);
- hBoxLayout->setContentsMargins(48, 0, 60, 0);
- hBoxLayout->addWidget(m_folderLabel, 0, Qt::AlignLeft);
- hBoxLayout->addSpacing(16);
- hBoxLayout->addStretch(1);
- hBoxLayout->addWidget(m_removeButton, 0, Qt::AlignRight);
- hBoxLayout->setAlignment(Qt::AlignVCenter);
- connect(m_removeButton, &FToolButton::clicked, [=]() { emit removed(this); });
- }
- QString FolderItem::folder() const
- {
- return m_folder;
- }
- FolderListSettingCard::FolderListSettingCard(const QVariant &configItem, const QString &title, const QString &content,
- const QString &directory, QWidget *parent)
- : ExpandSettingCard(NEWFLICON(FluentIcon, FOLDER_ADD), title, content, parent),
- m_configItem(configItem),
- m_dialogDirectory(directory)
- {
- m_addFolderButton = new FPushButton(NEWFLICON(FluentIcon, FOLDER_ADD), tr("Add folder"), this);
- m_folders = m_configItem.toStringList();
- initWidget();
- }
- void FolderListSettingCard::initWidget()
- {
- addWidget(m_addFolderButton);
- // initialize layout
- viewLayout->setSpacing(0);
- viewLayout->setAlignment(Qt::AlignTop);
- viewLayout->setContentsMargins(0, 0, 0, 0);
- for (const auto &f : m_folders) {
- addFolderItem(f);
- }
- connect(m_addFolderButton, &FPushButton::clicked, this, &FolderListSettingCard::showFolderDialog);
- }
- void FolderListSettingCard::addFolderItem(const QString &folder)
- {
- FolderItem *item = new FolderItem(folder, view());
- connect(item, &FolderItem::removed, this, &FolderListSettingCard::showConfirmDialog);
- viewLayout->addWidget(item);
- adjustViewSize();
- }
- void FolderListSettingCard::showFolderDialog()
- {
- QString folder = QFileDialog::getExistingDirectory(this, tr("Choose folder"), m_dialogDirectory);
- if (folder.isEmpty() || m_folders.contains(folder)) {
- return;
- }
- addFolderItem(folder);
- m_folders.append(folder);
- // qconfig.set(self.configItem, self.folders)
- emit folderChanged(m_folders);
- }
- void FolderListSettingCard::showConfirmDialog(FolderItem *item)
- {
- QFileInfo fi(item->folder());
- QString name = fi.baseName();
- QString title = tr("Are you sure you want to delete the folder?");
- QString content = tr("If you delete the ") + name
- + tr(" folder and remove it from the list, the folder will no "
- "longer appear in the list, but will not be deleted.");
- QScopedPointer<Dialog> w(new Dialog(title, content, this->window()));
- connect(w.data(), &Dialog::yesSignal, [=]() { removeFolder(item); });
- w->exec();
- }
- void FolderListSettingCard::removeFolder(FolderItem *item)
- {
- if (!m_folders.contains(item->folder())) {
- return;
- }
- m_folders.removeAll(item->folder());
- viewLayout->deleteWidget(item);
- adjustViewSize();
- emit folderChanged(m_folders);
- // qconfig.set(self.configItem, self.folders)
- }
|