mirror of
https://gitee.com/vnotex/vnote.git
synced 2025-07-05 13:59:52 +08:00
support not deleting files from disk when deleting notebook
This commit is contained in:
parent
29b27b1ecd
commit
1b52cd3362
106
src/dialog/vdeletenotebookdialog.cpp
Normal file
106
src/dialog/vdeletenotebookdialog.cpp
Normal file
@ -0,0 +1,106 @@
|
||||
#include <QtWidgets>
|
||||
#include "vdeletenotebookdialog.h"
|
||||
|
||||
VDeleteNotebookDialog::VDeleteNotebookDialog(const QString &p_title, const QString &p_name,
|
||||
const QString &p_path, QWidget *p_parent)
|
||||
: QDialog(p_parent), m_path(p_path)
|
||||
{
|
||||
setupUI(p_title, p_name);
|
||||
}
|
||||
|
||||
void VDeleteNotebookDialog::setupUI(const QString &p_title, const QString &p_name)
|
||||
{
|
||||
QLabel *infoLabel = new QLabel(tr("Are you sure to delete notebook: %1 ?").arg(p_name));
|
||||
m_warningLabel = new QLabel();
|
||||
|
||||
m_notDeleteCheck = new QCheckBox(tr("Do not delete files from disk."), this);
|
||||
m_notDeleteCheck->setChecked(false);
|
||||
m_notDeleteCheck->setToolTip(tr("When checked, VNote just removes the notebook instead of deleting files from disk"));
|
||||
connect(m_notDeleteCheck, &QCheckBox::stateChanged, this, &VDeleteNotebookDialog::notDeleteCheckChanged);
|
||||
|
||||
notDeleteCheckChanged(false);
|
||||
|
||||
// Ok is the default button.
|
||||
m_btnBox = new QDialogButtonBox(QDialogButtonBox::Ok | QDialogButtonBox::Cancel);
|
||||
connect(m_btnBox, &QDialogButtonBox::accepted, this, &QDialog::accept);
|
||||
connect(m_btnBox, &QDialogButtonBox::rejected, this, &QDialog::reject);
|
||||
|
||||
// Standard Warning icon.
|
||||
QLabel *iconLabel = new QLabel();
|
||||
QPixmap pixmap = standardIcon(QMessageBox::Warning);
|
||||
if (pixmap.isNull()) {
|
||||
iconLabel->hide();
|
||||
} else {
|
||||
iconLabel->setPixmap(pixmap);
|
||||
}
|
||||
|
||||
QVBoxLayout *iconLayout = new QVBoxLayout();
|
||||
iconLayout->addStretch();
|
||||
iconLayout->addWidget(iconLabel);
|
||||
iconLayout->addStretch();
|
||||
|
||||
QVBoxLayout *infoLayout = new QVBoxLayout();
|
||||
infoLayout->addWidget(infoLabel);
|
||||
infoLayout->addWidget(m_warningLabel);
|
||||
infoLayout->addWidget(m_notDeleteCheck);
|
||||
|
||||
QHBoxLayout *topLayout = new QHBoxLayout();
|
||||
topLayout->addLayout(iconLayout);
|
||||
topLayout->addLayout(infoLayout);
|
||||
|
||||
QVBoxLayout *mainLayout = new QVBoxLayout();
|
||||
mainLayout->addLayout(topLayout);
|
||||
mainLayout->addWidget(m_btnBox);
|
||||
|
||||
setLayout(mainLayout);
|
||||
mainLayout->setSizeConstraint(QLayout::SetFixedSize);
|
||||
setWindowTitle(p_title);
|
||||
}
|
||||
|
||||
bool VDeleteNotebookDialog::getDeleteFiles() const
|
||||
{
|
||||
return !m_notDeleteCheck->isChecked();
|
||||
}
|
||||
|
||||
QPixmap VDeleteNotebookDialog::standardIcon(QMessageBox::Icon p_icon)
|
||||
{
|
||||
QStyle *style = this->style();
|
||||
int iconSize = style->pixelMetric(QStyle::PM_MessageBoxIconSize, 0, this);
|
||||
QIcon tmpIcon;
|
||||
switch (p_icon) {
|
||||
case QMessageBox::Information:
|
||||
tmpIcon = style->standardIcon(QStyle::SP_MessageBoxInformation, 0, this);
|
||||
break;
|
||||
case QMessageBox::Warning:
|
||||
tmpIcon = style->standardIcon(QStyle::SP_MessageBoxWarning, 0, this);
|
||||
break;
|
||||
case QMessageBox::Critical:
|
||||
tmpIcon = style->standardIcon(QStyle::SP_MessageBoxCritical, 0, this);
|
||||
break;
|
||||
case QMessageBox::Question:
|
||||
tmpIcon = style->standardIcon(QStyle::SP_MessageBoxQuestion, 0, this);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
if (!tmpIcon.isNull()) {
|
||||
QWindow *window = this->windowHandle();
|
||||
if (!window) {
|
||||
if (const QWidget *nativeParent = this->nativeParentWidget()) {
|
||||
window = nativeParent->windowHandle();
|
||||
}
|
||||
}
|
||||
return tmpIcon.pixmap(window, QSize(iconSize, iconSize));
|
||||
}
|
||||
return QPixmap();
|
||||
}
|
||||
|
||||
void VDeleteNotebookDialog::notDeleteCheckChanged(int p_state)
|
||||
{
|
||||
if (p_state) {
|
||||
m_warningLabel->setText(tr("VNote won't delete files under this directory: %1 .").arg(m_path));
|
||||
} else {
|
||||
m_warningLabel->setText(tr("This will delete any files under this directory: %1 !").arg(m_path));
|
||||
}
|
||||
}
|
34
src/dialog/vdeletenotebookdialog.h
Normal file
34
src/dialog/vdeletenotebookdialog.h
Normal file
@ -0,0 +1,34 @@
|
||||
#ifndef VDELETENOTEBOOKDIALOG_H
|
||||
#define VDELETENOTEBOOKDIALOG_H
|
||||
|
||||
#include <QDialog>
|
||||
#include <QMessageBox>
|
||||
|
||||
class QLabel;
|
||||
class QLineEdit;
|
||||
class QString;
|
||||
class QCheckBox;
|
||||
class QDialogButtonBox;
|
||||
|
||||
class VDeleteNotebookDialog : public QDialog
|
||||
{
|
||||
Q_OBJECT
|
||||
public:
|
||||
VDeleteNotebookDialog(const QString &p_title, const QString &p_name, const QString &p_path,
|
||||
QWidget *p_parent = 0);
|
||||
bool getDeleteFiles() const;
|
||||
|
||||
private slots:
|
||||
void notDeleteCheckChanged(int p_state);
|
||||
|
||||
private:
|
||||
void setupUI(const QString &p_title, const QString &p_name);
|
||||
QPixmap standardIcon(QMessageBox::Icon p_icon);
|
||||
|
||||
QString m_path;
|
||||
QLabel *m_warningLabel;
|
||||
QCheckBox *m_notDeleteCheck;
|
||||
QDialogButtonBox *m_btnBox;
|
||||
};
|
||||
|
||||
#endif // VDELETENOTEBOOKDIALOG_H
|
@ -53,7 +53,8 @@ SOURCES += main.cpp\
|
||||
vavatar.cpp \
|
||||
vmdedit.cpp \
|
||||
dialog/vfindreplacedialog.cpp \
|
||||
dialog/vsettingsdialog.cpp
|
||||
dialog/vsettingsdialog.cpp \
|
||||
dialog/vdeletenotebookdialog.cpp
|
||||
|
||||
HEADERS += vmainwindow.h \
|
||||
vdirectorytree.h \
|
||||
@ -92,7 +93,8 @@ HEADERS += vmainwindow.h \
|
||||
vavatar.h \
|
||||
vmdedit.h \
|
||||
dialog/vfindreplacedialog.h \
|
||||
dialog/vsettingsdialog.h
|
||||
dialog/vsettingsdialog.h \
|
||||
dialog/vdeletenotebookdialog.h
|
||||
|
||||
RESOURCES += \
|
||||
vnote.qrc \
|
||||
|
Binary file not shown.
@ -1,6 +1,34 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!DOCTYPE TS>
|
||||
<TS version="2.1" language="zh_CN">
|
||||
<context>
|
||||
<name>VDeleteNotebookDialog</name>
|
||||
<message>
|
||||
<location filename="../dialog/vdeletenotebookdialog.cpp" line="13"/>
|
||||
<source>Are you sure to delete notebook: %1 ?</source>
|
||||
<translation>确认删除笔记本: %1 ?</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../dialog/vdeletenotebookdialog.cpp" line="16"/>
|
||||
<source>Do not delete files from disk.</source>
|
||||
<translation>不要从磁盘中删除文件。</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../dialog/vdeletenotebookdialog.cpp" line="18"/>
|
||||
<source>When checked, VNote just removes the notebook instead of deleting files from disk</source>
|
||||
<translation>启用时,VNote只会移除该笔记本,不会从磁盘中删除文件</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../dialog/vdeletenotebookdialog.cpp" line="102"/>
|
||||
<source>VNote won't delete files under this directory: %1 .</source>
|
||||
<translation>VNote不会删除该目录下的文件: %1 。</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../dialog/vdeletenotebookdialog.cpp" line="104"/>
|
||||
<source>This will delete any files under this directory: %1 !</source>
|
||||
<translation>该操作会删除该目录下的所有文件: %1 !</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>VDirInfoDialog</name>
|
||||
<message>
|
||||
@ -1065,58 +1093,48 @@ Visit https://github.com/tamlok/vnote.git for more information.</source>
|
||||
<context>
|
||||
<name>VNotebookSelector</name>
|
||||
<message>
|
||||
<location filename="../vnotebookselector.cpp" line="48"/>
|
||||
<location filename="../vnotebookselector.cpp" line="49"/>
|
||||
<source>&Delete</source>
|
||||
<translation>删除 (&D)</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../vnotebookselector.cpp" line="49"/>
|
||||
<location filename="../vnotebookselector.cpp" line="50"/>
|
||||
<source>Delete current notebook</source>
|
||||
<translation>删除当前笔记本</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../vnotebookselector.cpp" line="54"/>
|
||||
<location filename="../vnotebookselector.cpp" line="55"/>
|
||||
<source>&Info</source>
|
||||
<translation>信息 (&I)</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../vnotebookselector.cpp" line="55"/>
|
||||
<location filename="../vnotebookselector.cpp" line="56"/>
|
||||
<source>View and edit current notebook's information</source>
|
||||
<translation>查看并编辑当前笔记本的信息</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../vnotebookselector.cpp" line="103"/>
|
||||
<location filename="../vnotebookselector.cpp" line="104"/>
|
||||
<source>Create or import a notebook</source>
|
||||
<translation>新建或导入一个笔记本</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../vnotebookselector.cpp" line="99"/>
|
||||
<location filename="../vnotebookselector.cpp" line="161"/>
|
||||
<location filename="../vnotebookselector.cpp" line="214"/>
|
||||
<source>Delete Notebook</source>
|
||||
<translation>删除笔记本</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../vnotebookselector.cpp" line="100"/>
|
||||
<location filename="../vnotebookselector.cpp" line="162"/>
|
||||
<source>Add Notebook</source>
|
||||
<translation>添加笔记本</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../vnotebookselector.cpp" line="167"/>
|
||||
<location filename="../vnotebookselector.cpp" line="168"/>
|
||||
<source>Name already exists. Please choose another name.</source>
|
||||
<translation>该笔记本名已存在。请选择另一个名字。</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../vnotebookselector.cpp" line="215"/>
|
||||
<source>Warning</source>
|
||||
<translation>警告</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../vnotebookselector.cpp" line="216"/>
|
||||
<source>Are you sure to delete notebook %1?</source>
|
||||
<translation>确认删除笔记本: %1?</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../vnotebookselector.cpp" line="217"/>
|
||||
<source>This will delete any files in this notebook (%1).</source>
|
||||
<translation>该操作会删除该笔记本中的所有文件 (%1)。</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../vnotebookselector.cpp" line="264"/>
|
||||
<location filename="../vnotebookselector.cpp" line="261"/>
|
||||
<source>Notebook Information</source>
|
||||
<translation>笔记本信息</translation>
|
||||
</message>
|
||||
|
@ -60,7 +60,7 @@ VNotebook *VNotebook::createNotebook(const QString &p_name, const QString &p_pat
|
||||
return nb;
|
||||
}
|
||||
|
||||
void VNotebook::deleteNotebook(VNotebook *p_notebook)
|
||||
void VNotebook::deleteNotebook(VNotebook *p_notebook, bool p_deleteFiles)
|
||||
{
|
||||
if (!p_notebook) {
|
||||
return;
|
||||
@ -70,11 +70,13 @@ void VNotebook::deleteNotebook(VNotebook *p_notebook)
|
||||
p_notebook->close();
|
||||
delete p_notebook;
|
||||
|
||||
if (p_deleteFiles) {
|
||||
QDir dir(path);
|
||||
if (!dir.removeRecursively()) {
|
||||
qWarning() << "fail to delete" << path;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void VNotebook::rename(const QString &p_name)
|
||||
{
|
||||
|
@ -28,7 +28,7 @@ public:
|
||||
|
||||
static VNotebook *createNotebook(const QString &p_name, const QString &p_path, bool p_import,
|
||||
QObject *p_parent = 0);
|
||||
static void deleteNotebook(VNotebook *p_notebook);
|
||||
static void deleteNotebook(VNotebook *p_notebook, bool p_deleteFiles);
|
||||
|
||||
signals:
|
||||
void contentChanged();
|
||||
|
@ -8,6 +8,7 @@
|
||||
#include "vconfigmanager.h"
|
||||
#include "dialog/vnewnotebookdialog.h"
|
||||
#include "dialog/vnotebookinfodialog.h"
|
||||
#include "dialog/vdeletenotebookdialog.h"
|
||||
#include "vnotebook.h"
|
||||
#include "vdirectory.h"
|
||||
#include "utils/vutils.h"
|
||||
@ -209,20 +210,16 @@ void VNotebookSelector::deleteNotebook()
|
||||
|
||||
VNotebook *notebook = getNotebookFromComboIndex(index);
|
||||
Q_ASSERT(notebook);
|
||||
QString curName = notebook->getName();
|
||||
QString curPath = notebook->getPath();
|
||||
|
||||
int ret = VUtils::showMessage(QMessageBox::Warning, tr("Warning"),
|
||||
tr("Are you sure to delete notebook %1?").arg(curName),
|
||||
tr("This will delete any files in this notebook (%1).").arg(curPath),
|
||||
QMessageBox::Ok | QMessageBox::Cancel, QMessageBox::Ok, this);
|
||||
if (ret == QMessageBox::Ok) {
|
||||
VDeleteNotebookDialog dialog(tr("Delete Notebook"), notebook->getName(), notebook->getPath(), this);
|
||||
if (dialog.exec() == QDialog::Accepted) {
|
||||
bool deleteFiles = dialog.getDeleteFiles();
|
||||
m_editArea->closeFile(notebook, true);
|
||||
deleteNotebook(notebook);
|
||||
deleteNotebook(notebook, deleteFiles);
|
||||
}
|
||||
}
|
||||
|
||||
void VNotebookSelector::deleteNotebook(VNotebook *p_notebook)
|
||||
void VNotebookSelector::deleteNotebook(VNotebook *p_notebook, bool p_deleteFiles)
|
||||
{
|
||||
int idx = indexOfNotebook(p_notebook);
|
||||
|
||||
@ -231,7 +228,7 @@ void VNotebookSelector::deleteNotebook(VNotebook *p_notebook)
|
||||
|
||||
removeNotebookItem(idx);
|
||||
|
||||
VNotebook::deleteNotebook(p_notebook);
|
||||
VNotebook::deleteNotebook(p_notebook, p_deleteFiles);
|
||||
}
|
||||
|
||||
int VNotebookSelector::indexOfNotebook(const VNotebook *p_notebook)
|
||||
|
@ -30,8 +30,6 @@ signals:
|
||||
|
||||
public slots:
|
||||
bool newNotebook();
|
||||
void deleteNotebook();
|
||||
void editNotebookInfo();
|
||||
|
||||
protected:
|
||||
bool eventFilter(QObject *watched, QEvent *event) Q_DECL_OVERRIDE;
|
||||
@ -40,6 +38,8 @@ private slots:
|
||||
void handleCurIndexChanged(int p_index);
|
||||
void handleItemActivated(int p_index);
|
||||
void requestPopupListContextMenu(QPoint p_pos);
|
||||
void deleteNotebook();
|
||||
void editNotebookInfo();
|
||||
|
||||
private:
|
||||
void initActions();
|
||||
@ -49,7 +49,7 @@ private:
|
||||
int indexOfNotebook(const VNotebook *p_notebook);
|
||||
// if @p_import is true, we will use the existing config file.
|
||||
void createNotebook(const QString &p_name, const QString &p_path, bool p_import);
|
||||
void deleteNotebook(VNotebook *p_notebook);
|
||||
void deleteNotebook(VNotebook *p_notebook, bool p_deleteFiles);
|
||||
void addNotebookItem(const QString &p_name);
|
||||
// @p_index is the index of m_notebooks, NOT of QComboBox.
|
||||
void removeNotebookItem(int p_index);
|
||||
|
Loading…
x
Reference in New Issue
Block a user