Add Filetree dock
This commit is contained in:
@@ -1,6 +1,10 @@
|
|||||||
#include "filesystemwidget.h"
|
#include "filesystemwidget.h"
|
||||||
#include <QSettings>
|
#include <QSettings>
|
||||||
#include <QVBoxLayout>
|
#include <QVBoxLayout>
|
||||||
|
#include <QContextMenuEvent>
|
||||||
|
#include <QMenu>
|
||||||
|
#include <QSettings>
|
||||||
|
#include <QHeaderView>
|
||||||
|
|
||||||
FilesystemWidget::FilesystemWidget(QAbstractItemModel *model, QWidget *parent) : QWidget(parent)
|
FilesystemWidget::FilesystemWidget(QAbstractItemModel *model, QWidget *parent) : QWidget(parent)
|
||||||
, m_model(model)
|
, m_model(model)
|
||||||
@@ -34,3 +38,62 @@ void FilesystemWidget::fileClicked(const QModelIndex &index)
|
|||||||
{
|
{
|
||||||
emit fileSelected(index.row());
|
emit fileSelected(index.row());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Filetree::Filetree(QWidget *parent) : QTreeView(parent)
|
||||||
|
{
|
||||||
|
QSettings settings;
|
||||||
|
m_rootDir = settings.value("filetree/rootDir", QDir::homePath()).toString();
|
||||||
|
m_fileSystemModel = new QFileSystemModel(this);
|
||||||
|
m_fileSystemModel->setRootPath(m_rootDir);
|
||||||
|
m_fileSystemModel->setNameFilters({"*.fits", "*.fit", "*.xisf", "*.jpg", "*.jpeg", "*.png"});
|
||||||
|
m_fileSystemModel->setNameFilterDisables(false);
|
||||||
|
setModel(m_fileSystemModel);
|
||||||
|
setRootIndex(m_fileSystemModel->index(m_rootDir));
|
||||||
|
header()->restoreState(settings.value("filetree/header").toByteArray());
|
||||||
|
}
|
||||||
|
|
||||||
|
Filetree::~Filetree()
|
||||||
|
{
|
||||||
|
QSettings settings;
|
||||||
|
settings.setValue("filetree/rootDir", m_rootDir);
|
||||||
|
settings.setValue("filetree/header", header()->saveState());
|
||||||
|
}
|
||||||
|
|
||||||
|
void Filetree::contextMenuEvent(QContextMenuEvent *event)
|
||||||
|
{
|
||||||
|
QModelIndex index = indexAt(event->pos());
|
||||||
|
QFileInfo info = m_fileSystemModel->fileInfo(index);
|
||||||
|
QMenu menu;
|
||||||
|
QAction *open = nullptr;
|
||||||
|
QAction *setRoot = nullptr;
|
||||||
|
|
||||||
|
if(info.isFile())
|
||||||
|
open = menu.addAction(tr("Open"));
|
||||||
|
|
||||||
|
if(info.isDir())
|
||||||
|
setRoot = menu.addAction("Set as root");
|
||||||
|
|
||||||
|
QAction *resetRoot = menu.addAction("Reset root");
|
||||||
|
QAction *goUp = menu.addAction("Go up");
|
||||||
|
|
||||||
|
QAction *a = menu.exec(event->globalPos());
|
||||||
|
if(a == open)
|
||||||
|
{
|
||||||
|
emit fileSelected(m_fileSystemModel->filePath(index));
|
||||||
|
}
|
||||||
|
if(a == setRoot && index.isValid())
|
||||||
|
{
|
||||||
|
setRootIndex(index);
|
||||||
|
m_rootDir = m_fileSystemModel->filePath(index);
|
||||||
|
}
|
||||||
|
else if(a == resetRoot)
|
||||||
|
{
|
||||||
|
setRootIndex(QModelIndex());
|
||||||
|
m_rootDir = QDir::rootPath();
|
||||||
|
}
|
||||||
|
else if(a == goUp)
|
||||||
|
{
|
||||||
|
setRootIndex(rootIndex().parent());
|
||||||
|
m_rootDir = m_fileSystemModel->filePath(rootIndex().parent());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|||||||
@@ -4,6 +4,7 @@
|
|||||||
#include <QWidget>
|
#include <QWidget>
|
||||||
#include <QFileSystemModel>
|
#include <QFileSystemModel>
|
||||||
#include <QListView>
|
#include <QListView>
|
||||||
|
#include <QTreeView>
|
||||||
|
|
||||||
class FilesystemWidget : public QWidget
|
class FilesystemWidget : public QWidget
|
||||||
{
|
{
|
||||||
@@ -20,4 +21,17 @@ signals:
|
|||||||
void fileSelected(int row);
|
void fileSelected(int row);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
class Filetree : public QTreeView
|
||||||
|
{
|
||||||
|
Q_OBJECT
|
||||||
|
QFileSystemModel *m_fileSystemModel;
|
||||||
|
QString m_rootDir;
|
||||||
|
public:
|
||||||
|
explicit Filetree(QWidget *parent = nullptr);
|
||||||
|
~Filetree();
|
||||||
|
void contextMenuEvent(QContextMenuEvent *event);
|
||||||
|
signals:
|
||||||
|
void fileSelected(const QString &path);
|
||||||
|
};
|
||||||
|
|
||||||
#endif // FILESYSTEMWIDGET_H
|
#endif // FILESYSTEMWIDGET_H
|
||||||
|
|||||||
@@ -55,6 +55,9 @@ MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent)
|
|||||||
m_filesystem = new FilesystemWidget(m_ringList, this);
|
m_filesystem = new FilesystemWidget(m_ringList, this);
|
||||||
connect(m_filesystem, SIGNAL(fileSelected(int)), this, SLOT(loadFile(int)));
|
connect(m_filesystem, SIGNAL(fileSelected(int)), this, SLOT(loadFile(int)));
|
||||||
|
|
||||||
|
m_filetree = new Filetree(this);
|
||||||
|
connect(m_filetree, &Filetree::fileSelected, this, static_cast<void (MainWindow::*)(const QString &)>(&MainWindow::loadFile));
|
||||||
|
|
||||||
m_database = new Database(this);
|
m_database = new Database(this);
|
||||||
if(!m_database->init())
|
if(!m_database->init())
|
||||||
QMessageBox::critical(this, tr("Can't open DB"), tr("Can't open SQLITE database"));
|
QMessageBox::critical(this, tr("Can't open DB"), tr("Can't open SQLITE database"));
|
||||||
@@ -75,6 +78,12 @@ MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent)
|
|||||||
databaseViewDock->hide();
|
databaseViewDock->hide();
|
||||||
addDockWidget(Qt::BottomDockWidgetArea, databaseViewDock);
|
addDockWidget(Qt::BottomDockWidgetArea, databaseViewDock);
|
||||||
|
|
||||||
|
QDockWidget *filetreeDock = new QDockWidget(tr("File tree"), this);
|
||||||
|
filetreeDock->setWidget(m_filetree);
|
||||||
|
filetreeDock->setObjectName("filetreeDock");
|
||||||
|
databaseViewDock->hide();
|
||||||
|
addDockWidget(Qt::LeftDockWidgetArea, filetreeDock);
|
||||||
|
|
||||||
setWindowTitle(tr("Tenmon"));
|
setWindowTitle(tr("Tenmon"));
|
||||||
|
|
||||||
connect(m_ringList, SIGNAL(pixmapLoaded(Image*)), this, SLOT(pixmapLoaded(Image*)));
|
connect(m_ringList, SIGNAL(pixmapLoaded(Image*)), this, SLOT(pixmapLoaded(Image*)));
|
||||||
@@ -156,6 +165,7 @@ MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent)
|
|||||||
dockMenu->addAction(m_stretchPanel->toggleViewAction());
|
dockMenu->addAction(m_stretchPanel->toggleViewAction());
|
||||||
dockMenu->addAction(filesystemDock->toggleViewAction());
|
dockMenu->addAction(filesystemDock->toggleViewAction());
|
||||||
dockMenu->addAction(databaseViewDock->toggleViewAction());
|
dockMenu->addAction(databaseViewDock->toggleViewAction());
|
||||||
|
dockMenu->addAction(filetreeDock->toggleViewAction());
|
||||||
menuBar()->addMenu(dockMenu);
|
menuBar()->addMenu(dockMenu);
|
||||||
|
|
||||||
QMenu *helpMenu = menuBar()->addMenu(tr("Help"));
|
QMenu *helpMenu = menuBar()->addMenu(tr("Help"));
|
||||||
|
|||||||
@@ -22,6 +22,7 @@ class MainWindow : public QMainWindow
|
|||||||
Database *m_database;
|
Database *m_database;
|
||||||
ImageInfo *m_info;
|
ImageInfo *m_info;
|
||||||
FilesystemWidget *m_filesystem;
|
FilesystemWidget *m_filesystem;
|
||||||
|
Filetree *m_filetree;
|
||||||
DataBaseView *m_databaseView;
|
DataBaseView *m_databaseView;
|
||||||
static int socketPair[2];
|
static int socketPair[2];
|
||||||
QSocketNotifier *socketNotifier;
|
QSocketNotifier *socketNotifier;
|
||||||
|
|||||||
Reference in New Issue
Block a user