mirror of
https://gitee.com/vnotex/vnote.git
synced 2025-07-06 06:19:52 +08:00
add Open File Location in directory tree and file list
This commit is contained in:
parent
f7f9ed7157
commit
03c0fdc49d
@ -72,6 +72,11 @@ void VDirectory::close()
|
||||
m_opened = false;
|
||||
}
|
||||
|
||||
QString VDirectory::retriveBasePath() const
|
||||
{
|
||||
return VUtils::basePathFromPath(retrivePath());
|
||||
}
|
||||
|
||||
QString VDirectory::retrivePath(const VDirectory *p_dir) const
|
||||
{
|
||||
if (!p_dir) {
|
||||
|
@ -57,6 +57,7 @@ public:
|
||||
inline const VNotebook *getNotebook() const;
|
||||
inline const QVector<VFile *> &getFiles() const;
|
||||
inline QString retrivePath() const;
|
||||
QString retriveBasePath() const;
|
||||
inline QString retriveRelativePath() const;
|
||||
inline QString getNotebookName() const;
|
||||
inline bool isExpanded() const;
|
||||
|
@ -73,6 +73,11 @@ void VDirectoryTree::initActions()
|
||||
pasteAct->setToolTip(tr("Paste directories under this directory"));
|
||||
connect(pasteAct, &QAction::triggered,
|
||||
this, &VDirectoryTree::pasteDirectoriesInCurDir);
|
||||
|
||||
m_openLocationAct = new QAction(tr("&Open Directory Location"), this);
|
||||
m_openLocationAct->setToolTip(tr("Open the folder containing this directory in operating system"));
|
||||
connect(m_openLocationAct, &QAction::triggered,
|
||||
this, &VDirectoryTree::openDirectoryLocation);
|
||||
}
|
||||
|
||||
void VDirectoryTree::setNotebook(VNotebook *p_notebook)
|
||||
@ -306,6 +311,7 @@ void VDirectoryTree::contextMenuRequested(QPoint pos)
|
||||
|
||||
if (item) {
|
||||
menu.addSeparator();
|
||||
menu.addAction(m_openLocationAct);
|
||||
menu.addAction(dirInfoAct);
|
||||
}
|
||||
|
||||
@ -466,6 +472,14 @@ void VDirectoryTree::editDirectoryInfo()
|
||||
} while (true);
|
||||
}
|
||||
|
||||
void VDirectoryTree::openDirectoryLocation() const
|
||||
{
|
||||
QTreeWidgetItem *curItem = currentItem();
|
||||
V_ASSERT(curItem);
|
||||
QUrl url = QUrl::fromLocalFile(getVDirectory(curItem)->retriveBasePath());
|
||||
QDesktopServices::openUrl(url);
|
||||
}
|
||||
|
||||
void VDirectoryTree::copySelectedDirectories(bool p_cut)
|
||||
{
|
||||
QList<QTreeWidgetItem *> items = selectedItems();
|
||||
|
@ -51,6 +51,7 @@ private slots:
|
||||
void copySelectedDirectories(bool p_cut = false);
|
||||
void cutSelectedDirectories();
|
||||
void pasteDirectoriesInCurDir();
|
||||
void openDirectoryLocation() const;
|
||||
|
||||
protected:
|
||||
void mousePressEvent(QMouseEvent *event) Q_DECL_OVERRIDE;
|
||||
@ -66,7 +67,7 @@ private:
|
||||
// Find the corresponding item of @p_dir;
|
||||
// Return's NULL if no item is found and it is the root directory if @p_widget is true.
|
||||
QTreeWidgetItem *findVDirectory(const VDirectory *p_dir, bool &p_widget);
|
||||
inline QPointer<VDirectory> getVDirectory(QTreeWidgetItem *p_item);
|
||||
inline QPointer<VDirectory> getVDirectory(QTreeWidgetItem *p_item) const;
|
||||
void copyDirectoryInfoToClipboard(const QJsonArray &p_dirs, bool p_cut);
|
||||
void pasteDirectories(VDirectory *p_destDir);
|
||||
bool copyDirectory(VDirectory *p_destDir, const QString &p_destName,
|
||||
@ -96,6 +97,7 @@ private:
|
||||
QAction *copyAct;
|
||||
QAction *cutAct;
|
||||
QAction *pasteAct;
|
||||
QAction *m_openLocationAct;
|
||||
|
||||
// Navigation Mode.
|
||||
// Map second key to QTreeWidgetItem.
|
||||
@ -103,7 +105,7 @@ private:
|
||||
QVector<QLabel *> m_naviLabels;
|
||||
};
|
||||
|
||||
inline QPointer<VDirectory> VDirectoryTree::getVDirectory(QTreeWidgetItem *p_item)
|
||||
inline QPointer<VDirectory> VDirectoryTree::getVDirectory(QTreeWidgetItem *p_item) const
|
||||
{
|
||||
Q_ASSERT(p_item);
|
||||
return p_item->data(0, Qt::UserRole).value<VDirectory *>();
|
||||
|
@ -1,5 +1,6 @@
|
||||
#include <QtDebug>
|
||||
#include <QtWidgets>
|
||||
#include <QUrl>
|
||||
#include "vfilelist.h"
|
||||
#include "vconfigmanager.h"
|
||||
#include "dialog/vnewfiledialog.h"
|
||||
@ -79,6 +80,11 @@ void VFileList::initActions()
|
||||
pasteAct->setToolTip(tr("Paste notes in current directory"));
|
||||
connect(pasteAct, &QAction::triggered,
|
||||
this, &VFileList::pasteFilesInCurDir);
|
||||
|
||||
m_openLocationAct = new QAction(tr("&Open Note Location"), this);
|
||||
m_openLocationAct->setToolTip(tr("Open the folder containing this note in operating system"));
|
||||
connect(m_openLocationAct, &QAction::triggered,
|
||||
this, &VFileList::openFileLocation);
|
||||
}
|
||||
|
||||
void VFileList::setDirectory(VDirectory *p_directory)
|
||||
@ -112,10 +118,18 @@ void VFileList::updateFileList()
|
||||
void VFileList::fileInfo()
|
||||
{
|
||||
QListWidgetItem *curItem = fileList->currentItem();
|
||||
Q_ASSERT(curItem);
|
||||
V_ASSERT(curItem);
|
||||
fileInfo(getVFile(curItem));
|
||||
}
|
||||
|
||||
void VFileList::openFileLocation() const
|
||||
{
|
||||
QListWidgetItem *curItem = fileList->currentItem();
|
||||
V_ASSERT(curItem);
|
||||
QUrl url = QUrl::fromLocalFile(getVFile(curItem)->retriveBasePath());
|
||||
QDesktopServices::openUrl(url);
|
||||
}
|
||||
|
||||
void VFileList::fileInfo(VFile *p_file)
|
||||
{
|
||||
if (!p_file) {
|
||||
@ -297,10 +311,15 @@ void VFileList::contextMenuRequested(QPoint pos)
|
||||
menu.addAction(pasteAct);
|
||||
}
|
||||
|
||||
if (item && fileList->selectedItems().size() == 1) {
|
||||
if (item) {
|
||||
menu.addSeparator();
|
||||
menu.addAction(fileInfoAct);
|
||||
menu.addAction(m_openLocationAct);
|
||||
|
||||
if (fileList->selectedItems().size() == 1) {
|
||||
menu.addAction(fileInfoAct);
|
||||
}
|
||||
}
|
||||
|
||||
menu.exec(fileList->mapToGlobal(pos));
|
||||
}
|
||||
|
||||
|
@ -49,6 +49,7 @@ private slots:
|
||||
void contextMenuRequested(QPoint pos);
|
||||
void handleItemClicked(QListWidgetItem *currentItem);
|
||||
void fileInfo();
|
||||
void openFileLocation() const;
|
||||
// m_copiedFiles will keep the files's VFile.
|
||||
void copySelectedFiles(bool p_isCut = false);
|
||||
void cutSelectedFiles();
|
||||
@ -93,6 +94,7 @@ private:
|
||||
QAction *copyAct;
|
||||
QAction *cutAct;
|
||||
QAction *pasteAct;
|
||||
QAction *m_openLocationAct;
|
||||
|
||||
// Navigation Mode.
|
||||
// Map second key to QListWidgetItem.
|
||||
|
Loading…
x
Reference in New Issue
Block a user