mirror of
https://gitee.com/vnotex/vnote.git
synced 2025-07-05 13:59:52 +08:00
164 lines
4.6 KiB
C++
164 lines
4.6 KiB
C++
#include "vconfirmdeletiondialog.h"
|
|
|
|
#include <QtWidgets>
|
|
|
|
#include "utils/vutils.h"
|
|
#include "vconfigmanager.h"
|
|
|
|
extern VConfigManager *g_config;
|
|
|
|
class ConfirmItemWidget : public QWidget
|
|
{
|
|
public:
|
|
explicit ConfirmItemWidget(QWidget *p_parent = NULL)
|
|
: QWidget(p_parent)
|
|
{
|
|
setupUI();
|
|
}
|
|
|
|
ConfirmItemWidget(bool p_checked, const QString &p_file, QWidget *p_parent = NULL)
|
|
: QWidget(p_parent)
|
|
{
|
|
setupUI();
|
|
|
|
m_checkBox->setChecked(p_checked);
|
|
m_fileLabel->setText(p_file);
|
|
}
|
|
|
|
bool isChecked() const
|
|
{
|
|
return m_checkBox->isChecked();
|
|
}
|
|
|
|
QString getFile() const
|
|
{
|
|
return m_fileLabel->text();
|
|
}
|
|
|
|
private:
|
|
void setupUI()
|
|
{
|
|
m_checkBox = new QCheckBox;
|
|
m_fileLabel = new QLabel;
|
|
QHBoxLayout *mainLayout = new QHBoxLayout;
|
|
mainLayout->addWidget(m_checkBox);
|
|
mainLayout->addWidget(m_fileLabel);
|
|
mainLayout->addStretch();
|
|
mainLayout->setContentsMargins(3, 0, 0, 0);
|
|
|
|
setLayout(mainLayout);
|
|
}
|
|
|
|
QCheckBox *m_checkBox;
|
|
QLabel *m_fileLabel;
|
|
};
|
|
|
|
VConfirmDeletionDialog::VConfirmDeletionDialog(const QString &p_title,
|
|
const QString &p_info,
|
|
const QVector<QString> &p_files,
|
|
QWidget *p_parent)
|
|
: QDialog(p_parent)
|
|
{
|
|
setupUI(p_title, p_info);
|
|
|
|
initFileItems(p_files);
|
|
}
|
|
|
|
void VConfirmDeletionDialog::setupUI(const QString &p_title, const QString &p_info)
|
|
{
|
|
QLabel *infoLabel = new QLabel(p_info);
|
|
m_listWidget = new QListWidget();
|
|
connect(m_listWidget, &QListWidget::currentRowChanged,
|
|
this, &VConfirmDeletionDialog::currentFileChanged);
|
|
|
|
m_previewer = new QLabel();
|
|
|
|
m_askAgainCB = new QCheckBox(tr("Just delete them and do not ask for confirmation again"));
|
|
m_askAgainCB->setChecked(!g_config->getConfirmImagesCleanUp());
|
|
|
|
// Ok is the default button.
|
|
m_btnBox = new QDialogButtonBox(QDialogButtonBox::Ok | QDialogButtonBox::Cancel);
|
|
connect(m_btnBox, &QDialogButtonBox::accepted,
|
|
this, [this]() {
|
|
g_config->setConfirmImagesCleanUp(!m_askAgainCB->isChecked());
|
|
QDialog::accept();
|
|
});
|
|
connect(m_btnBox, &QDialogButtonBox::rejected, this, &QDialog::reject);
|
|
|
|
QHBoxLayout *midLayout = new QHBoxLayout;
|
|
midLayout->addWidget(m_listWidget);
|
|
midLayout->addStretch();
|
|
midLayout->addWidget(m_previewer);
|
|
midLayout->addStretch();
|
|
|
|
QVBoxLayout *mainLayout = new QVBoxLayout;
|
|
mainLayout->addWidget(infoLabel);
|
|
mainLayout->addWidget(m_askAgainCB);
|
|
mainLayout->addWidget(m_btnBox);
|
|
mainLayout->addLayout(midLayout);
|
|
|
|
setLayout(mainLayout);
|
|
setWindowTitle(p_title);
|
|
}
|
|
|
|
QVector<QString> VConfirmDeletionDialog::getConfirmedFiles() const
|
|
{
|
|
QVector<QString> files;
|
|
|
|
for (int i = 0; i < m_listWidget->count(); ++i) {
|
|
ConfirmItemWidget *widget = getItemWidget(m_listWidget->item(i));
|
|
if (widget->isChecked()) {
|
|
files.push_back(widget->getFile());
|
|
}
|
|
}
|
|
|
|
return files;
|
|
}
|
|
|
|
void VConfirmDeletionDialog::initFileItems(const QVector<QString> &p_files)
|
|
{
|
|
m_listWidget->clear();
|
|
|
|
for (int i = 0; i < p_files.size(); ++i) {
|
|
ConfirmItemWidget *itemWidget = new ConfirmItemWidget(true,
|
|
p_files[i],
|
|
this);
|
|
QListWidgetItem *item = new QListWidgetItem();
|
|
QSize size = itemWidget->sizeHint();
|
|
size.setHeight(size.height() * 2);
|
|
item->setSizeHint(size);
|
|
|
|
m_listWidget->addItem(item);
|
|
m_listWidget->setItemWidget(item, itemWidget);
|
|
}
|
|
|
|
m_listWidget->setMinimumSize(m_listWidget->sizeHint());
|
|
m_listWidget->setCurrentRow(-1);
|
|
m_listWidget->setCurrentRow(0);
|
|
}
|
|
|
|
void VConfirmDeletionDialog::currentFileChanged(int p_row)
|
|
{
|
|
bool succeed = false;
|
|
if (p_row > -1) {
|
|
ConfirmItemWidget *widget = getItemWidget(m_listWidget->item(p_row));
|
|
if (widget) {
|
|
QPixmap image(widget->getFile());
|
|
if (!image.isNull()) {
|
|
int width = 512 * VUtils::calculateScaleFactor();
|
|
QSize previewSize(width, width);
|
|
m_previewer->setPixmap(image.scaled(previewSize));
|
|
succeed = true;
|
|
}
|
|
}
|
|
}
|
|
|
|
m_previewer->setVisible(succeed);
|
|
}
|
|
|
|
ConfirmItemWidget *VConfirmDeletionDialog::getItemWidget(QListWidgetItem *p_item) const
|
|
{
|
|
QWidget *wid = m_listWidget->itemWidget(p_item);
|
|
return dynamic_cast<ConfirmItemWidget *>(wid);
|
|
}
|