NotebookExplorer: support view mode for notbooks

This commit is contained in:
Le Tan 2022-10-07 21:02:00 +08:00
parent 3d77c29393
commit 89cd40d0cf
10 changed files with 142 additions and 48 deletions

View File

@ -186,6 +186,18 @@ namespace vnotex
// Used for comparison.
ComparisonRole = 0x0103
};
enum ViewOrder
{
OrderedByConfiguration = 0,
OrderedByName,
OrderedByNameReversed,
OrderedByCreatedTime,
OrderedByCreatedTimeReversed,
OrderedByModifiedTime,
OrderedByModifiedTimeReversed,
ViewOrderMax
};
} // ns vnotex
Q_DECLARE_OPERATORS_FOR_FLAGS(vnotex::FindOptions);

View File

@ -29,6 +29,8 @@ void WidgetConfig::init(const QJsonObject &p_app,
m_findAndReplaceOptions = static_cast<FindOptions>(READINT(QStringLiteral("find_and_replace_options")));
m_notebookSelectorViewOrder = READINT(QStringLiteral("notebook_selector_view_order"));
{
m_nodeExplorerViewOrder = READINT(QStringLiteral("node_explorer_view_order"));
m_nodeExplorerExploreMode = READINT(QStringLiteral("node_explorer_explore_mode"));
@ -58,6 +60,8 @@ QJsonObject WidgetConfig::toJson() const
obj[QStringLiteral("find_and_replace_options")] = static_cast<int>(m_findAndReplaceOptions);
obj[QStringLiteral("notebook_selector_view_order")] = m_notebookSelectorViewOrder;
obj[QStringLiteral("node_explorer_view_order")] = m_nodeExplorerViewOrder;
obj[QStringLiteral("node_explorer_explore_mode")] = m_nodeExplorerExploreMode;
obj[QStringLiteral("node_explorer_external_files_visible")] = m_nodeExplorerExternalFilesVisible;
@ -114,6 +118,16 @@ void WidgetConfig::setNodeExplorerViewOrder(int p_viewOrder)
updateConfig(m_nodeExplorerViewOrder, p_viewOrder, this);
}
int WidgetConfig::getNotebookSelectorViewOrder() const
{
return m_notebookSelectorViewOrder;
}
void WidgetConfig::setNotebookSelectorViewOrder(int p_viewOrder)
{
updateConfig(m_notebookSelectorViewOrder, p_viewOrder, this);
}
int WidgetConfig::getNodeExplorerExploreMode() const
{
return m_nodeExplorerExploreMode;

View File

@ -27,6 +27,9 @@ namespace vnotex
FindOptions getFindAndReplaceOptions() const;
void setFindAndReplaceOptions(FindOptions p_options);
int getNotebookSelectorViewOrder() const;
void setNotebookSelectorViewOrder(int p_viewOrder);
int getNodeExplorerViewOrder() const;
void setNodeExplorerViewOrder(int p_viewOrder);
@ -67,6 +70,8 @@ namespace vnotex
FindOptions m_findAndReplaceOptions = FindOption::FindNone;
int m_notebookSelectorViewOrder = 0;
int m_nodeExplorerViewOrder = 0;
int m_nodeExplorerExploreMode = 1;

View File

@ -487,7 +487,9 @@
"outline_section_number_enabled" : false,
"//comment" : "Default find options in FindAndReplace",
"find_and_replace_options" : 16,
"//comment" : "View order of the node explorer (NotebookNodeExplorer::ViewOrder)",
"//comment" : "View order of the notebook selector (enum ViewOrder)",
"notebook_selector_view_order" : 0,
"//comment" : "View order of the node explorer (enum ViewOrder)",
"node_explorer_view_order" : 0,
"node_explorer_external_files_visible" : true,
"node_explorer_auto_import_external_files_enabled" : true,

View File

@ -19,7 +19,6 @@
#include <core/vnotex.h>
#include "mainwindow.h"
#include <notebook/notebook.h>
#include <core/notebookmgr.h>
#include <utils/iconutils.h>
#include <utils/widgetutils.h>
#include <utils/pathutils.h>
@ -29,6 +28,7 @@
#include <core/configmgr.h>
#include <core/coreconfig.h>
#include <core/widgetconfig.h>
#include <core/sessionconfig.h>
#include <core/events.h>
#include <core/exception.h>
#include <core/fileopenparameters.h>
@ -65,11 +65,14 @@ void NotebookExplorer::setupUI()
auto titleBar = setupTitleBar(this);
mainLayout->addWidget(titleBar);
const auto &widgetConfig = ConfigMgr::getInst().getWidgetConfig();
// Selector.
m_selector = new NotebookSelector(this);
m_selector->setWhatsThis(tr("Select one of all the notebooks as current notebook.<br/>"
"Move mouse on one item to check its details."));
NavigationModeMgr::getInst().registerNavigationTarget(m_selector);
m_selector->setViewOrder(widgetConfig.getNotebookSelectorViewOrder());
connect(m_selector, QOverload<int>::of(&QComboBox::activated),
this, [this](int p_idx) {
auto id = static_cast<ID>(m_selector->itemData(p_idx).toULongLong());
@ -79,7 +82,6 @@ void NotebookExplorer::setupUI()
this, &NotebookExplorer::newNotebook);
mainLayout->addWidget(m_selector);
const auto &widgetConfig = ConfigMgr::getInst().getWidgetConfig();
m_nodeExplorer = new NotebookNodeExplorer(this);
m_nodeExplorer->setViewOrder(widgetConfig.getNodeExplorerViewOrder());
m_nodeExplorer->setExploreMode(widgetConfig.getNodeExplorerExploreMode());
@ -114,8 +116,13 @@ TitleBar *NotebookExplorer::setupTitleBar(QWidget *p_parent)
{
auto viewMenu = WidgetsFactory::createMenu(titleBar);
setupViewMenu(viewMenu);
titleBar->addActionButton(QStringLiteral("view.svg"), tr("View"), viewMenu);
auto notebookMenu = viewMenu->addMenu(tr("Notebooks"));
setupViewMenu(notebookMenu, true);
auto nodeMenu = viewMenu->addMenu(tr("Notes"));
setupViewMenu(nodeMenu, false);
titleBar->addActionButton(QStringLiteral("view.svg"), tr("View By"), viewMenu);
}
{
@ -210,9 +217,7 @@ TitleBar *NotebookExplorer::setupTitleBar(QWidget *p_parent)
void NotebookExplorer::loadNotebooks()
{
auto &notebookMgr = VNoteX::getInst().getNotebookMgr();
const auto &notebooks = notebookMgr.getNotebooks();
m_selector->setNotebooks(notebooks);
m_selector->loadNotebooks();
}
void NotebookExplorer::reloadNotebook(const Notebook *p_notebook)
@ -381,47 +386,50 @@ const QSharedPointer<Notebook> &NotebookExplorer::currentNotebook() const
return m_currentNotebook;
}
void NotebookExplorer::setupViewMenu(QMenu *p_menu)
void NotebookExplorer::setupViewMenu(QMenu *p_menu, bool p_isNotebookView)
{
auto ag = new QActionGroup(p_menu);
auto act = ag->addAction(tr("View By Configuration"));
act->setCheckable(true);
act->setChecked(true);
act->setData(NotebookNodeExplorer::ViewOrder::OrderedByConfiguration);
act->setData(ViewOrder::OrderedByConfiguration);
p_menu->addAction(act);
act = ag->addAction(tr("View By Name"));
act->setCheckable(true);
act->setData(NotebookNodeExplorer::ViewOrder::OrderedByName);
act->setData(ViewOrder::OrderedByName);
p_menu->addAction(act);
act = ag->addAction(tr("View By Name (Reversed)"));
act->setCheckable(true);
act->setData(NotebookNodeExplorer::ViewOrder::OrderedByNameReversed);
act->setData(ViewOrder::OrderedByNameReversed);
p_menu->addAction(act);
act = ag->addAction(tr("View By Created Time"));
act->setCheckable(true);
act->setData(NotebookNodeExplorer::ViewOrder::OrderedByCreatedTime);
act->setData(ViewOrder::OrderedByCreatedTime);
p_menu->addAction(act);
act = ag->addAction(tr("View By Created Time (Reversed)"));
act->setCheckable(true);
act->setData(NotebookNodeExplorer::ViewOrder::OrderedByCreatedTimeReversed);
act->setData(ViewOrder::OrderedByCreatedTimeReversed);
p_menu->addAction(act);
act = ag->addAction(tr("View By Modified Time"));
act->setCheckable(true);
act->setData(NotebookNodeExplorer::ViewOrder::OrderedByModifiedTime);
p_menu->addAction(act);
if (!p_isNotebookView) {
act = ag->addAction(tr("View By Modified Time"));
act->setCheckable(true);
act->setData(ViewOrder::OrderedByModifiedTime);
p_menu->addAction(act);
act = ag->addAction(tr("View By Modified Time (Reversed)"));
act->setCheckable(true);
act->setData(NotebookNodeExplorer::ViewOrder::OrderedByModifiedTimeReversed);
p_menu->addAction(act);
act = ag->addAction(tr("View By Modified Time (Reversed)"));
act->setCheckable(true);
act->setData(ViewOrder::OrderedByModifiedTimeReversed);
p_menu->addAction(act);
}
int viewOrder = ConfigMgr::getInst().getWidgetConfig().getNodeExplorerViewOrder();
const auto &widgetConfig = ConfigMgr::getInst().getWidgetConfig();
int viewOrder = p_isNotebookView ? widgetConfig.getNotebookSelectorViewOrder() : widgetConfig.getNodeExplorerViewOrder();
for (const auto &act : ag->actions()) {
if (act->data().toInt() == viewOrder) {
act->setChecked(true);
@ -429,10 +437,15 @@ void NotebookExplorer::setupViewMenu(QMenu *p_menu)
}
connect(ag, &QActionGroup::triggered,
this, [this](QAction *p_action) {
int order = p_action->data().toInt();
ConfigMgr::getInst().getWidgetConfig().setNodeExplorerViewOrder(order);
m_nodeExplorer->setViewOrder(order);
this, [this, p_isNotebookView](QAction *p_action) {
const int order = p_action->data().toInt();
if (p_isNotebookView) {
ConfigMgr::getInst().getWidgetConfig().setNotebookSelectorViewOrder(order);
m_selector->setViewOrder(order);
} else {
ConfigMgr::getInst().getWidgetConfig().setNodeExplorerViewOrder(order);
m_nodeExplorer->setViewOrder(order);
}
});
}

View File

@ -71,7 +71,7 @@ namespace vnotex
Node *checkNotebookAndGetCurrentExploredFolderNode() const;
void setupViewMenu(QMenu *p_menu);
void setupViewMenu(QMenu *p_menu, bool p_isNotebookView);
void setupRecycleBinMenu(QMenu *p_menu);

View File

@ -1852,7 +1852,7 @@ void NotebookNodeExplorer::sortNodes(QVector<QSharedPointer<Node>> &p_nodes, int
reversed = true;
Q_FALLTHROUGH();
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) {
return p_b->getName().toLower() < p_a->getName().toLower();
} else {
@ -1865,7 +1865,7 @@ void NotebookNodeExplorer::sortNodes(QVector<QSharedPointer<Node>> &p_nodes, int
reversed = true;
Q_FALLTHROUGH();
case ViewOrder::OrderedByCreatedTime:
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) {
return p_b->getCreatedTimeUtc() < p_a->getCreatedTimeUtc();
} else {
@ -1878,7 +1878,7 @@ void NotebookNodeExplorer::sortNodes(QVector<QSharedPointer<Node>> &p_nodes, int
reversed = true;
Q_FALLTHROUGH();
case ViewOrder::OrderedByModifiedTime:
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) {
return p_b->getModifiedTimeUtc() < p_a->getModifiedTimeUtc();
} else {

View File

@ -10,6 +10,7 @@
#include "qtreewidgetstatecache.h"
#include "clipboarddata.h"
#include "navigationmodewrapper.h"
#include "global.h"
class QSplitter;
class QMenu;
@ -78,18 +79,6 @@ namespace vnotex
bool m_loaded = false;
};
enum ViewOrder
{
OrderedByConfiguration = 0,
OrderedByName,
OrderedByNameReversed,
OrderedByCreatedTime,
OrderedByCreatedTimeReversed,
OrderedByModifiedTime,
OrderedByModifiedTimeReversed,
ViewOrderMax
};
enum ExploreMode
{
Combined = 0,

View File

@ -7,8 +7,9 @@
#include <QListView>
#include <QScrollBar>
#include "vnotex.h"
#include "notebook/notebook.h"
#include <notebook/notebook.h>
#include <core/notebookmgr.h>
#include <core/vnotex.h>
#include <utils/iconutils.h>
#include <utils/widgetutils.h>
@ -26,11 +27,15 @@ NotebookSelector::NotebookSelector(QWidget *p_parent)
setSizeAdjustPolicy(QComboBox::AdjustToMinimumContentsLengthWithIcon);
}
void NotebookSelector::setNotebooks(const QVector<QSharedPointer<Notebook>> &p_notebooks)
void NotebookSelector::loadNotebooks()
{
clear();
for (auto &nb : p_notebooks) {
auto &notebookMgr = VNoteX::getInst().getNotebookMgr();
auto notebooks = notebookMgr.getNotebooks();
sortNotebooks(notebooks);
for (auto &nb : notebooks) {
addNotebookItem(nb);
}
@ -39,6 +44,41 @@ void NotebookSelector::setNotebooks(const QVector<QSharedPointer<Notebook>> &p_n
m_notebooksInitialized = true;
}
void NotebookSelector::sortNotebooks(QVector<QSharedPointer<Notebook>> &p_notebooks) const
{
bool reversed = false;
switch (m_viewOrder) {
case ViewOrder::OrderedByNameReversed:
reversed = true;
Q_FALLTHROUGH();
case ViewOrder::OrderedByName:
std::sort(p_notebooks.begin(), p_notebooks.end(), [reversed](const QSharedPointer<Notebook> &p_a, const QSharedPointer<Notebook> &p_b) {
if (reversed) {
return p_b->getName().toLower() < p_a->getName().toLower();
} else {
return p_a->getName().toLower() < p_b->getName().toLower();
}
});
break;
case ViewOrder::OrderedByCreatedTimeReversed:
reversed = true;
Q_FALLTHROUGH();
case ViewOrder::OrderedByCreatedTime:
std::sort(p_notebooks.begin(), p_notebooks.end(), [reversed](const QSharedPointer<Notebook> &p_a, const QSharedPointer<Notebook> &p_b) {
if (reversed) {
return p_b->getCreatedTimeUtc() < p_a->getCreatedTimeUtc();
} else {
return p_a->getCreatedTimeUtc() < p_b->getCreatedTimeUtc();
}
});
break;
default:
break;
}
}
void NotebookSelector::reloadNotebook(const Notebook *p_notebook)
{
Q_ASSERT(p_notebook);
@ -216,3 +256,15 @@ void NotebookSelector::mousePressEvent(QMouseEvent *p_event)
ComboBox::mousePressEvent(p_event);
}
void NotebookSelector::setViewOrder(int p_order)
{
if (m_viewOrder == p_order) {
return;
}
if (p_order >= 0 && p_order < ViewOrder::ViewOrderMax) {
m_viewOrder = static_cast<ViewOrder>(p_order);
loadNotebooks();
}
}

View File

@ -6,6 +6,7 @@
#include "global.h"
#include "navigationmode.h"
#include "combobox.h"
#include "notebooknodeexplorer.h"
namespace vnotex
{
@ -17,12 +18,14 @@ namespace vnotex
public:
explicit NotebookSelector(QWidget *p_parent = nullptr);
void setNotebooks(const QVector<QSharedPointer<Notebook>> &p_notebooks);
void loadNotebooks();
void reloadNotebook(const Notebook *p_notebook);
void setCurrentNotebook(ID p_id);
void setViewOrder(int p_order);
signals:
void newNotebookRequested();
@ -53,11 +56,15 @@ namespace vnotex
int findNotebook(ID p_id) const;
void sortNotebooks(QVector<QSharedPointer<Notebook>> &p_notebooks) const;
static void fetchIconColor(const QString &p_name, QString &p_fg, QString &p_bg);
bool m_notebooksInitialized = false;
QVector<QModelIndex> m_navigationIndexes;
ViewOrder m_viewOrder = ViewOrder::OrderedByConfiguration;
};
} // ns vnotex