|
|
@ -1,3 +1,4 @@
|
|
|
|
|
|
|
|
// 包含头文件
|
|
|
|
#include "treeviewlogic.h"
|
|
|
|
#include "treeviewlogic.h"
|
|
|
|
#include "nodetreeview.h"
|
|
|
|
#include "nodetreeview.h"
|
|
|
|
#include "nodetreemodel.h"
|
|
|
|
#include "nodetreemodel.h"
|
|
|
@ -11,6 +12,7 @@
|
|
|
|
#include <QApplication>
|
|
|
|
#include <QApplication>
|
|
|
|
#include "customapplicationstyle.h"
|
|
|
|
#include "customapplicationstyle.h"
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// TreeViewLogic 类的构造函数
|
|
|
|
TreeViewLogic::TreeViewLogic(NodeTreeView *treeView, NodeTreeModel *treeModel, DBManager *dbManager,
|
|
|
|
TreeViewLogic::TreeViewLogic(NodeTreeView *treeView, NodeTreeModel *treeModel, DBManager *dbManager,
|
|
|
|
NoteListView *listView, QObject *parent)
|
|
|
|
NoteListView *listView, QObject *parent)
|
|
|
|
: QObject(parent),
|
|
|
|
: QObject(parent),
|
|
|
@ -24,12 +26,16 @@ TreeViewLogic::TreeViewLogic(NodeTreeView *treeView, NodeTreeModel *treeModel, D
|
|
|
|
m_lastSelectTags{},
|
|
|
|
m_lastSelectTags{},
|
|
|
|
m_expandedFolder{}
|
|
|
|
m_expandedFolder{}
|
|
|
|
{
|
|
|
|
{
|
|
|
|
|
|
|
|
// 初始化树视图代理
|
|
|
|
m_treeDelegate = new NodeTreeDelegate(m_treeView, m_treeView, m_listView);
|
|
|
|
m_treeDelegate = new NodeTreeDelegate(m_treeView, m_treeView, m_listView);
|
|
|
|
m_treeView->setItemDelegate(m_treeDelegate);
|
|
|
|
m_treeView->setItemDelegate(m_treeDelegate);
|
|
|
|
|
|
|
|
// 连接数据库管理器信号
|
|
|
|
connect(m_dbManager, &DBManager::nodesTagTreeReceived, this, &TreeViewLogic::loadTreeModel,
|
|
|
|
connect(m_dbManager, &DBManager::nodesTagTreeReceived, this, &TreeViewLogic::loadTreeModel,
|
|
|
|
Qt::QueuedConnection);
|
|
|
|
Qt::QueuedConnection);
|
|
|
|
|
|
|
|
// 连接树模型信号
|
|
|
|
connect(m_treeModel, &NodeTreeModel::topLevelItemLayoutChanged, this,
|
|
|
|
connect(m_treeModel, &NodeTreeModel::topLevelItemLayoutChanged, this,
|
|
|
|
&TreeViewLogic::updateTreeViewSeparator);
|
|
|
|
&TreeViewLogic::updateTreeViewSeparator);
|
|
|
|
|
|
|
|
// 连接树视图信号
|
|
|
|
connect(m_treeView, &NodeTreeView::addFolderRequested, this,
|
|
|
|
connect(m_treeView, &NodeTreeView::addFolderRequested, this,
|
|
|
|
[this] { onAddFolderRequested(false); });
|
|
|
|
[this] { onAddFolderRequested(false); });
|
|
|
|
connect(m_treeDelegate, &NodeTreeDelegate::addFolderRequested, this,
|
|
|
|
connect(m_treeDelegate, &NodeTreeDelegate::addFolderRequested, this,
|
|
|
@ -78,19 +84,23 @@ TreeViewLogic::TreeViewLogic(NodeTreeView *treeView, NodeTreeModel *treeModel, D
|
|
|
|
&TreeViewLogic::onChildNoteCountChangedFolder);
|
|
|
|
&TreeViewLogic::onChildNoteCountChangedFolder);
|
|
|
|
connect(m_dbManager, &DBManager::childNotesCountUpdatedTag, this,
|
|
|
|
connect(m_dbManager, &DBManager::childNotesCountUpdatedTag, this,
|
|
|
|
&TreeViewLogic::onChildNotesCountChangedTag);
|
|
|
|
&TreeViewLogic::onChildNotesCountChangedTag);
|
|
|
|
|
|
|
|
// 设置应用样式
|
|
|
|
m_style = new CustomApplicationStyle();
|
|
|
|
m_style = new CustomApplicationStyle();
|
|
|
|
qApp->setStyle(m_style);
|
|
|
|
qApp->setStyle(m_style);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// 更新树视图分隔符
|
|
|
|
void TreeViewLogic::updateTreeViewSeparator()
|
|
|
|
void TreeViewLogic::updateTreeViewSeparator()
|
|
|
|
{
|
|
|
|
{
|
|
|
|
m_treeView->setTreeSeparator(m_treeModel->getSeparatorIndex(),
|
|
|
|
m_treeView->setTreeSeparator(m_treeModel->getSeparatorIndex(),
|
|
|
|
m_treeModel->getDefaultNotesIndex());
|
|
|
|
m_treeModel->getDefaultNotesIndex());
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// 加载树模型
|
|
|
|
void TreeViewLogic::loadTreeModel(const NodeTagTreeData &treeData)
|
|
|
|
void TreeViewLogic::loadTreeModel(const NodeTagTreeData &treeData)
|
|
|
|
{
|
|
|
|
{
|
|
|
|
m_treeModel->setTreeData(treeData);
|
|
|
|
m_treeModel->setTreeData(treeData);
|
|
|
|
|
|
|
|
// 获取根节点的子节点数量
|
|
|
|
{
|
|
|
|
{
|
|
|
|
NodeData node;
|
|
|
|
NodeData node;
|
|
|
|
QMetaObject::invokeMethod(m_dbManager, "getChildNotesCountFolder",
|
|
|
|
QMetaObject::invokeMethod(m_dbManager, "getChildNotesCountFolder",
|
|
|
@ -101,6 +111,7 @@ void TreeViewLogic::loadTreeModel(const NodeTagTreeData &treeData)
|
|
|
|
m_treeModel->setData(index, node.childNotesCount(), NodeItem::Roles::ChildCount);
|
|
|
|
m_treeModel->setData(index, node.childNotesCount(), NodeItem::Roles::ChildCount);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
// 获取垃圾箱节点的子节点数量
|
|
|
|
{
|
|
|
|
{
|
|
|
|
NodeData node;
|
|
|
|
NodeData node;
|
|
|
|
QMetaObject::invokeMethod(m_dbManager, "getChildNotesCountFolder",
|
|
|
|
QMetaObject::invokeMethod(m_dbManager, "getChildNotesCountFolder",
|
|
|
@ -111,6 +122,7 @@ void TreeViewLogic::loadTreeModel(const NodeTagTreeData &treeData)
|
|
|
|
m_treeModel->setData(index, node.childNotesCount(), NodeItem::Roles::ChildCount);
|
|
|
|
m_treeModel->setData(index, node.childNotesCount(), NodeItem::Roles::ChildCount);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
// 加载保存的状态
|
|
|
|
if (m_needLoadSavedState) {
|
|
|
|
if (m_needLoadSavedState) {
|
|
|
|
m_needLoadSavedState = false;
|
|
|
|
m_needLoadSavedState = false;
|
|
|
|
m_treeView->reExpandC(m_expandedFolder);
|
|
|
|
m_treeView->reExpandC(m_expandedFolder);
|
|
|
@ -142,6 +154,7 @@ void TreeViewLogic::loadTreeModel(const NodeTagTreeData &treeData)
|
|
|
|
updateTreeViewSeparator();
|
|
|
|
updateTreeViewSeparator();
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// 处理添加文件夹请求
|
|
|
|
void TreeViewLogic::onAddFolderRequested(bool fromPlusButton)
|
|
|
|
void TreeViewLogic::onAddFolderRequested(bool fromPlusButton)
|
|
|
|
{
|
|
|
|
{
|
|
|
|
QModelIndex currentIndex;
|
|
|
|
QModelIndex currentIndex;
|
|
|
@ -162,7 +175,7 @@ void TreeViewLogic::onAddFolderRequested(bool fromPlusButton)
|
|
|
|
static_cast<NodeItem::Type>(currentIndex.data(NodeItem::Roles::ItemType).toInt());
|
|
|
|
static_cast<NodeItem::Type>(currentIndex.data(NodeItem::Roles::ItemType).toInt());
|
|
|
|
if (type == NodeItem::FolderItem) {
|
|
|
|
if (type == NodeItem::FolderItem) {
|
|
|
|
parentId = currentIndex.data(NodeItem::Roles::NodeId).toInt();
|
|
|
|
parentId = currentIndex.data(NodeItem::Roles::NodeId).toInt();
|
|
|
|
// we don't allow subfolder under default notes folder
|
|
|
|
// 不允许在默认笔记文件夹下创建子文件夹
|
|
|
|
if (parentId == SpecialNodeID::DefaultNotesFolder) {
|
|
|
|
if (parentId == SpecialNodeID::DefaultNotesFolder) {
|
|
|
|
parentId = SpecialNodeID::RootFolder;
|
|
|
|
parentId = SpecialNodeID::RootFolder;
|
|
|
|
}
|
|
|
|
}
|
|
|
@ -235,12 +248,13 @@ void TreeViewLogic::onAddFolderRequested(bool fromPlusButton)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// 处理添加标签请求
|
|
|
|
void TreeViewLogic::onAddTagRequested()
|
|
|
|
void TreeViewLogic::onAddTagRequested()
|
|
|
|
{
|
|
|
|
{
|
|
|
|
int newlyCreatedTagId;
|
|
|
|
int newlyCreatedTagId;
|
|
|
|
TagData newTag;
|
|
|
|
TagData newTag;
|
|
|
|
newTag.setName(m_treeModel->getNewTagPlaceholderName());
|
|
|
|
newTag.setName(m_treeModel->getNewTagPlaceholderName());
|
|
|
|
// random color generator
|
|
|
|
// 随机颜色生成器
|
|
|
|
const double lower_bound = 0;
|
|
|
|
const double lower_bound = 0;
|
|
|
|
const double upper_bound = 1;
|
|
|
|
const double upper_bound = 1;
|
|
|
|
static std::uniform_real_distribution<double> unif(lower_bound, upper_bound);
|
|
|
|
static std::uniform_real_distribution<double> unif(lower_bound, upper_bound);
|
|
|
@ -264,6 +278,7 @@ void TreeViewLogic::onAddTagRequested()
|
|
|
|
m_treeModel->appendChildNodeToParent(m_treeModel->rootIndex(), hs);
|
|
|
|
m_treeModel->appendChildNodeToParent(m_treeModel->rootIndex(), hs);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// 处理重命名节点请求
|
|
|
|
void TreeViewLogic::onRenameNodeRequestedFromTreeView(const QModelIndex &index,
|
|
|
|
void TreeViewLogic::onRenameNodeRequestedFromTreeView(const QModelIndex &index,
|
|
|
|
const QString &newName)
|
|
|
|
const QString &newName)
|
|
|
|
{
|
|
|
|
{
|
|
|
@ -272,6 +287,7 @@ void TreeViewLogic::onRenameNodeRequestedFromTreeView(const QModelIndex &index,
|
|
|
|
emit requestRenameNodeInDB(id, newName);
|
|
|
|
emit requestRenameNodeInDB(id, newName);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// 处理删除文件夹请求
|
|
|
|
void TreeViewLogic::onDeleteFolderRequested(const QModelIndex &index)
|
|
|
|
void TreeViewLogic::onDeleteFolderRequested(const QModelIndex &index)
|
|
|
|
{
|
|
|
|
{
|
|
|
|
auto btn = QMessageBox::question(nullptr, "Are you sure you want to delete this folder",
|
|
|
|
auto btn = QMessageBox::question(nullptr, "Are you sure you want to delete this folder",
|
|
|
@ -303,6 +319,7 @@ void TreeViewLogic::onDeleteFolderRequested(const QModelIndex &index)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// 处理重命名标签请求
|
|
|
|
void TreeViewLogic::onRenameTagRequestedFromTreeView(const QModelIndex &index,
|
|
|
|
void TreeViewLogic::onRenameTagRequestedFromTreeView(const QModelIndex &index,
|
|
|
|
const QString &newName)
|
|
|
|
const QString &newName)
|
|
|
|
{
|
|
|
|
{
|
|
|
@ -311,6 +328,7 @@ void TreeViewLogic::onRenameTagRequestedFromTreeView(const QModelIndex &index,
|
|
|
|
emit requestRenameTagInDB(id, newName);
|
|
|
|
emit requestRenameTagInDB(id, newName);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// 处理修改标签颜色请求
|
|
|
|
void TreeViewLogic::onChangeTagColorRequested(const QModelIndex &index)
|
|
|
|
void TreeViewLogic::onChangeTagColorRequested(const QModelIndex &index)
|
|
|
|
{
|
|
|
|
{
|
|
|
|
if (index.isValid()) {
|
|
|
|
if (index.isValid()) {
|
|
|
@ -324,6 +342,7 @@ void TreeViewLogic::onChangeTagColorRequested(const QModelIndex &index)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// 处理删除标签请求
|
|
|
|
void TreeViewLogic::onDeleteTagRequested(const QModelIndex &index)
|
|
|
|
void TreeViewLogic::onDeleteTagRequested(const QModelIndex &index)
|
|
|
|
{
|
|
|
|
{
|
|
|
|
auto id = index.data(NodeItem::Roles::NodeId).toInt();
|
|
|
|
auto id = index.data(NodeItem::Roles::NodeId).toInt();
|
|
|
@ -332,6 +351,7 @@ void TreeViewLogic::onDeleteTagRequested(const QModelIndex &index)
|
|
|
|
m_treeView->setCurrentIndexC(m_treeModel->getAllNotesButtonIndex());
|
|
|
|
m_treeView->setCurrentIndexC(m_treeModel->getAllNotesButtonIndex());
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// 处理标签子节点数量变化
|
|
|
|
void TreeViewLogic::onChildNotesCountChangedTag(int tagId, int notesCount)
|
|
|
|
void TreeViewLogic::onChildNotesCountChangedTag(int tagId, int notesCount)
|
|
|
|
{
|
|
|
|
{
|
|
|
|
auto index = m_treeModel->tagIndexFromId(tagId);
|
|
|
|
auto index = m_treeModel->tagIndexFromId(tagId);
|
|
|
@ -340,6 +360,7 @@ void TreeViewLogic::onChildNotesCountChangedTag(int tagId, int notesCount)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// 处理文件夹子节点数量变化
|
|
|
|
void TreeViewLogic::onChildNoteCountChangedFolder(int folderId, const QString &absPath,
|
|
|
|
void TreeViewLogic::onChildNoteCountChangedFolder(int folderId, const QString &absPath,
|
|
|
|
int notesCount)
|
|
|
|
int notesCount)
|
|
|
|
{
|
|
|
|
{
|
|
|
@ -356,6 +377,7 @@ void TreeViewLogic::onChildNoteCountChangedFolder(int folderId, const QString &a
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// 打开文件夹
|
|
|
|
void TreeViewLogic::openFolder(int id)
|
|
|
|
void TreeViewLogic::openFolder(int id)
|
|
|
|
{
|
|
|
|
{
|
|
|
|
NodeData target;
|
|
|
|
NodeData target;
|
|
|
@ -379,6 +401,7 @@ void TreeViewLogic::openFolder(int id)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// 处理移动节点请求
|
|
|
|
void TreeViewLogic::onMoveNodeRequested(int nodeId, int targetId)
|
|
|
|
void TreeViewLogic::onMoveNodeRequested(int nodeId, int targetId)
|
|
|
|
{
|
|
|
|
{
|
|
|
|
NodeData target;
|
|
|
|
NodeData target;
|
|
|
@ -391,6 +414,7 @@ void TreeViewLogic::onMoveNodeRequested(int nodeId, int targetId)
|
|
|
|
emit requestMoveNodeInDB(nodeId, target);
|
|
|
|
emit requestMoveNodeInDB(nodeId, target);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// 设置主题
|
|
|
|
void TreeViewLogic::setTheme(Theme::Value theme)
|
|
|
|
void TreeViewLogic::setTheme(Theme::Value theme)
|
|
|
|
{
|
|
|
|
{
|
|
|
|
m_treeView->setTheme(theme);
|
|
|
|
m_treeView->setTheme(theme);
|
|
|
@ -398,6 +422,7 @@ void TreeViewLogic::setTheme(Theme::Value theme)
|
|
|
|
m_style->setTheme(theme);
|
|
|
|
m_style->setTheme(theme);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// 设置最后保存的状态
|
|
|
|
void TreeViewLogic::setLastSavedState(bool isLastSelectFolder, const QString &lastSelectFolder,
|
|
|
|
void TreeViewLogic::setLastSavedState(bool isLastSelectFolder, const QString &lastSelectFolder,
|
|
|
|
const QSet<int> &lastSelectTag,
|
|
|
|
const QSet<int> &lastSelectTag,
|
|
|
|
const QStringList &expandedFolder)
|
|
|
|
const QStringList &expandedFolder)
|
|
|
|