mirror of
https://gitee.com/vnotex/vnote.git
synced 2025-07-05 05:49:53 +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/widgetsfactory.h>
|
||||
#include <widgets/treewidgetitem.h>
|
||||
|
||||
using namespace vnotex;
|
||||
|
||||
@ -37,6 +38,8 @@ void SortDialog::setupUI(const QString &p_title, const QString &p_info)
|
||||
mainLayout->addLayout(bodyLayout);
|
||||
|
||||
// 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->setRootIsDecorated(false);
|
||||
m_treeWidget->setSelectionMode(QAbstractItemView::ContiguousSelection);
|
||||
@ -255,3 +258,9 @@ void SortDialog::handleMoveOperation(MoveOperation p_op)
|
||||
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"
|
||||
|
||||
class QTreeWidget;
|
||||
class QTreeWidgetItem;
|
||||
class QPushButton;
|
||||
|
||||
namespace vnotex
|
||||
@ -22,6 +23,9 @@ namespace vnotex
|
||||
// Get user data of column 0 from sorted items.
|
||||
QVector<QVariant> getSortedData() const;
|
||||
|
||||
// Add one item to the tree.
|
||||
QTreeWidgetItem *addItem(const QStringList &p_cols);
|
||||
|
||||
private:
|
||||
enum MoveOperation
|
||||
{
|
||||
|
@ -1660,9 +1660,9 @@ void NotebookNodeExplorer::sortNodes(QVector<QSharedPointer<Node>> &p_nodes, int
|
||||
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) {
|
||||
if (reversed) {
|
||||
return p_b->getName() < p_a->getName();
|
||||
return p_b->getName().toLower() < p_a->getName().toLower();
|
||||
} else {
|
||||
return p_a->getName() < p_b->getName();
|
||||
return p_a->getName().toLower() < p_b->getName().toLower();
|
||||
}
|
||||
});
|
||||
break;
|
||||
@ -1769,7 +1769,7 @@ void NotebookNodeExplorer::manualSort()
|
||||
QStringList cols {child->getName(),
|
||||
Utils::dateTimeString(child->getCreatedTimeUtc().toLocalTime()),
|
||||
Utils::dateTimeString(child->getModifiedTimeUtc().toLocalTime())};
|
||||
auto item = new QTreeWidgetItem(treeWidget, cols);
|
||||
auto item = sortDlg.addItem(cols);
|
||||
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/toolbarhelper.cpp \
|
||||
$$PWD/treeview.cpp \
|
||||
$$PWD/treewidgetitem.cpp \
|
||||
$$PWD/viewareasession.cpp \
|
||||
$$PWD/viewsplit.cpp \
|
||||
$$PWD/viewwindow.cpp \
|
||||
@ -193,6 +194,7 @@ HEADERS += \
|
||||
$$PWD/textviewwindowhelper.h \
|
||||
$$PWD/toolbarhelper.h \
|
||||
$$PWD/treeview.h \
|
||||
$$PWD/treewidgetitem.h \
|
||||
$$PWD/viewareasession.h \
|
||||
$$PWD/viewsplit.h \
|
||||
$$PWD/viewwindow.h \
|
||||
|
Loading…
x
Reference in New Issue
Block a user