mirror of
https://gitee.com/vnotex/vnote.git
synced 2025-07-05 13:59:52 +08:00
sort notes by name case-insensitively
This commit is contained in:
parent
f4aabc1f2d
commit
7cc31a5d6e
@ -8,6 +8,7 @@
|
|||||||
|
|
||||||
#include <widgets/treewidget.h>
|
#include <widgets/treewidget.h>
|
||||||
#include <widgets/widgetsfactory.h>
|
#include <widgets/widgetsfactory.h>
|
||||||
|
#include <widgets/treewidgetitem.h>
|
||||||
|
|
||||||
using namespace vnotex;
|
using namespace vnotex;
|
||||||
|
|
||||||
@ -37,6 +38,8 @@ void SortDialog::setupUI(const QString &p_title, const QString &p_info)
|
|||||||
mainLayout->addLayout(bodyLayout);
|
mainLayout->addLayout(bodyLayout);
|
||||||
|
|
||||||
// Tree widget.
|
// Tree widget.
|
||||||
|
// We want to sort it case-insensitive. QTreeView and QSortFilterProxyModel should be the choice.
|
||||||
|
// For simplicity, we subclass QTreeWidgetItem here.
|
||||||
m_treeWidget = new TreeWidget(mainWidget);
|
m_treeWidget = new TreeWidget(mainWidget);
|
||||||
m_treeWidget->setRootIsDecorated(false);
|
m_treeWidget->setRootIsDecorated(false);
|
||||||
m_treeWidget->setSelectionMode(QAbstractItemView::ContiguousSelection);
|
m_treeWidget->setSelectionMode(QAbstractItemView::ContiguousSelection);
|
||||||
@ -255,3 +258,9 @@ void SortDialog::handleMoveOperation(MoveOperation p_op)
|
|||||||
m_treeWidget->scrollToItem(firstItem);
|
m_treeWidget->scrollToItem(firstItem);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
QTreeWidgetItem *SortDialog::addItem(const QStringList &p_cols)
|
||||||
|
{
|
||||||
|
auto item = new TreeWidgetItem(m_treeWidget, p_cols);
|
||||||
|
return item;
|
||||||
|
}
|
||||||
|
@ -4,6 +4,7 @@
|
|||||||
#include "scrolldialog.h"
|
#include "scrolldialog.h"
|
||||||
|
|
||||||
class QTreeWidget;
|
class QTreeWidget;
|
||||||
|
class QTreeWidgetItem;
|
||||||
class QPushButton;
|
class QPushButton;
|
||||||
|
|
||||||
namespace vnotex
|
namespace vnotex
|
||||||
@ -22,6 +23,9 @@ namespace vnotex
|
|||||||
// Get user data of column 0 from sorted items.
|
// Get user data of column 0 from sorted items.
|
||||||
QVector<QVariant> getSortedData() const;
|
QVector<QVariant> getSortedData() const;
|
||||||
|
|
||||||
|
// Add one item to the tree.
|
||||||
|
QTreeWidgetItem *addItem(const QStringList &p_cols);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
enum MoveOperation
|
enum MoveOperation
|
||||||
{
|
{
|
||||||
|
@ -1660,9 +1660,9 @@ void NotebookNodeExplorer::sortNodes(QVector<QSharedPointer<Node>> &p_nodes, int
|
|||||||
case ViewOrder::OrderedByName:
|
case ViewOrder::OrderedByName:
|
||||||
std::sort(p_nodes.begin() + p_start, p_nodes.begin() + p_end, [reversed](const QSharedPointer<Node> &p_a, const QSharedPointer<Node> p_b) {
|
std::sort(p_nodes.begin() + p_start, p_nodes.begin() + p_end, [reversed](const QSharedPointer<Node> &p_a, const QSharedPointer<Node> p_b) {
|
||||||
if (reversed) {
|
if (reversed) {
|
||||||
return p_b->getName() < p_a->getName();
|
return p_b->getName().toLower() < p_a->getName().toLower();
|
||||||
} else {
|
} else {
|
||||||
return p_a->getName() < p_b->getName();
|
return p_a->getName().toLower() < p_b->getName().toLower();
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
break;
|
break;
|
||||||
@ -1769,7 +1769,7 @@ void NotebookNodeExplorer::manualSort()
|
|||||||
QStringList cols {child->getName(),
|
QStringList cols {child->getName(),
|
||||||
Utils::dateTimeString(child->getCreatedTimeUtc().toLocalTime()),
|
Utils::dateTimeString(child->getCreatedTimeUtc().toLocalTime()),
|
||||||
Utils::dateTimeString(child->getModifiedTimeUtc().toLocalTime())};
|
Utils::dateTimeString(child->getModifiedTimeUtc().toLocalTime())};
|
||||||
auto item = new QTreeWidgetItem(treeWidget, cols);
|
auto item = sortDlg.addItem(cols);
|
||||||
item->setData(0, Qt::UserRole, i);
|
item->setData(0, Qt::UserRole, i);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
25
src/widgets/treewidgetitem.cpp
Normal file
25
src/widgets/treewidgetitem.cpp
Normal file
@ -0,0 +1,25 @@
|
|||||||
|
#include "treewidgetitem.h"
|
||||||
|
|
||||||
|
#include <QTreeWidget>
|
||||||
|
#include <QVariant>
|
||||||
|
|
||||||
|
using namespace vnotex;
|
||||||
|
|
||||||
|
TreeWidgetItem::TreeWidgetItem(QTreeWidget *p_parent, const QStringList &p_strings, int p_type)
|
||||||
|
: QTreeWidgetItem(p_parent, p_strings, p_type)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
bool TreeWidgetItem::operator<(const QTreeWidgetItem &p_other) const
|
||||||
|
{
|
||||||
|
int column = treeWidget() ? treeWidget()->sortColumn() : 0;
|
||||||
|
const QVariant v1 = data(column, Qt::DisplayRole);
|
||||||
|
const QVariant v2 = p_other.data(column, Qt::DisplayRole);
|
||||||
|
if (v1.canConvert<QString>() && v2.canConvert<QString>()) {
|
||||||
|
const auto s1 = v1.toString().toLower();
|
||||||
|
const auto s2 = v2.toString().toLower();
|
||||||
|
return s1 < s2;
|
||||||
|
}
|
||||||
|
|
||||||
|
return QTreeWidgetItem::operator<(p_other);
|
||||||
|
}
|
20
src/widgets/treewidgetitem.h
Normal file
20
src/widgets/treewidgetitem.h
Normal file
@ -0,0 +1,20 @@
|
|||||||
|
#ifndef TREEWIDGETITEM_H
|
||||||
|
#define TREEWIDGETITEM_H
|
||||||
|
|
||||||
|
#include <QTreeWidgetItem>
|
||||||
|
|
||||||
|
|
||||||
|
namespace vnotex
|
||||||
|
{
|
||||||
|
// Provide additional features:
|
||||||
|
// 1. Sorting case-insensitive.
|
||||||
|
class TreeWidgetItem : public QTreeWidgetItem
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
TreeWidgetItem(QTreeWidget *p_parent, const QStringList &p_strings, int p_type = Type);
|
||||||
|
|
||||||
|
bool operator<(const QTreeWidgetItem &p_other) const Q_DECL_OVERRIDE;
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif // TREEWIDGETITEM_H
|
@ -78,6 +78,7 @@ SOURCES += \
|
|||||||
$$PWD/textviewwindow.cpp \
|
$$PWD/textviewwindow.cpp \
|
||||||
$$PWD/toolbarhelper.cpp \
|
$$PWD/toolbarhelper.cpp \
|
||||||
$$PWD/treeview.cpp \
|
$$PWD/treeview.cpp \
|
||||||
|
$$PWD/treewidgetitem.cpp \
|
||||||
$$PWD/viewareasession.cpp \
|
$$PWD/viewareasession.cpp \
|
||||||
$$PWD/viewsplit.cpp \
|
$$PWD/viewsplit.cpp \
|
||||||
$$PWD/viewwindow.cpp \
|
$$PWD/viewwindow.cpp \
|
||||||
@ -193,6 +194,7 @@ HEADERS += \
|
|||||||
$$PWD/textviewwindowhelper.h \
|
$$PWD/textviewwindowhelper.h \
|
||||||
$$PWD/toolbarhelper.h \
|
$$PWD/toolbarhelper.h \
|
||||||
$$PWD/treeview.h \
|
$$PWD/treeview.h \
|
||||||
|
$$PWD/treewidgetitem.h \
|
||||||
$$PWD/viewareasession.h \
|
$$PWD/viewareasession.h \
|
||||||
$$PWD/viewsplit.h \
|
$$PWD/viewsplit.h \
|
||||||
$$PWD/viewwindow.h \
|
$$PWD/viewwindow.h \
|
||||||
|
Loading…
x
Reference in New Issue
Block a user