filebrowser.cpp
153 lines
| 4.4 KiB
| text/x-c
|
CppLexer
r6 | #include "filebrowser.h" | |||
#include "ui_filebrowser.h" | ||||
#include <QListView> | ||||
#include <QTreeView> | ||||
FileBrowser::FileBrowser(QWidget *parent) : | ||||
QDockWidget(parent), | ||||
ui(new Ui::FileBrowser) | ||||
{ | ||||
ui->setupUi(this); | ||||
this->model = new FileSystemModel(this); | ||||
this->model->setRootPath(QDir::currentPath()); | ||||
this->view = new QTreeView(); | ||||
this->ui->gridLayout->addWidget(this->view,1,0,1,-1); | ||||
this->view->setModel(this->model); | ||||
this->cd(model->rootPath()); | ||||
connect(this->view,SIGNAL(clicked(QModelIndex)),this,SLOT(clicked(QModelIndex))); | ||||
connect(this->view,SIGNAL(doubleClicked(QModelIndex)),this,SLOT(doubleClicked(QModelIndex))); | ||||
connect(this->ui->ListViewQpb,SIGNAL(clicked()),this,SLOT(changeToListView())); | ||||
connect(this->ui->TreeViewQpb,SIGNAL(clicked()),this,SLOT(changeToTreeView())); | ||||
connect(this->ui->parentDirQpb,SIGNAL(clicked()),this,SLOT(parentDir())); | ||||
view->setSelectionMode(QAbstractItemView::ExtendedSelection); | ||||
view->setDragEnabled(true); | ||||
view->setAcceptDrops(true); | ||||
view->setDropIndicatorShown(true); | ||||
view->setDragDropMode(QAbstractItemView::DragDrop); | ||||
this->pathCompleter = new QCompleter(this->model,this); | ||||
this->ui->pathLineEdit->setCompleter(pathCompleter); | ||||
this->pathLineEditEnterEditMode(false); | ||||
} | ||||
FileBrowser::~FileBrowser() | ||||
{ | ||||
delete ui; | ||||
} | ||||
void FileBrowser::setNameFilters(const QStringList &filters,bool disables) | ||||
{ | ||||
this->model->setNameFilters(filters); | ||||
this->model->setNameFilterDisables(disables); | ||||
} | ||||
void FileBrowser::changeToTreeView() | ||||
{ | ||||
this->ui->gridLayout->removeWidget(this->view); | ||||
delete this->view; | ||||
this->view = new QTreeView(); | ||||
this->ui->gridLayout->addWidget(this->view,1,0,1,-1); | ||||
this->view->setModel(this->model); | ||||
connect(this->view,SIGNAL(clicked(QModelIndex)),this,SLOT(clicked(QModelIndex))); | ||||
connect(this->view,SIGNAL(doubleClicked(QModelIndex)),this,SLOT(doubleClicked(QModelIndex))); | ||||
this->cd(model->rootPath()); | ||||
view->setSelectionMode(QAbstractItemView::ExtendedSelection); | ||||
view->setDragEnabled(true); | ||||
view->setAcceptDrops(true); | ||||
view->setDropIndicatorShown(true); | ||||
} | ||||
void FileBrowser::changeToListView() | ||||
{ | ||||
this->ui->gridLayout->removeWidget(this->view); | ||||
delete this->view; | ||||
this->view = new QListView(); | ||||
this->ui->gridLayout->addWidget(this->view,1,0,1,-1); | ||||
this->view->setModel(this->model); | ||||
connect(this->view,SIGNAL(clicked(QModelIndex)),this,SLOT(clicked(QModelIndex))); | ||||
connect(this->view,SIGNAL(doubleClicked(QModelIndex)),this,SLOT(doubleClicked(QModelIndex))); | ||||
this->cd(model->rootPath()); | ||||
view->setSelectionMode(QAbstractItemView::ExtendedSelection); | ||||
view->setDragEnabled(true); | ||||
view->setAcceptDrops(true); | ||||
view->setDropIndicatorShown(true); | ||||
} | ||||
void FileBrowser::clicked(QModelIndex index) | ||||
{ | ||||
QString file=model->filePath(index); | ||||
if(QFile::exists(file)) | ||||
emit fileClicked(file); | ||||
} | ||||
void FileBrowser::doubleClicked(QModelIndex index) | ||||
{ | ||||
if(model->isDir(index)) | ||||
{ | ||||
this->cd(model->filePath(index)); | ||||
} | ||||
else | ||||
{ | ||||
QString file=model->filePath(index); | ||||
if(QFile::exists(file)) | ||||
emit fileDoubleClicked(file); | ||||
} | ||||
} | ||||
void FileBrowser::parentDir() | ||||
{ | ||||
this->cd(model->rootPath()+"/.."); | ||||
} | ||||
void FileBrowser::cd(const QString &newPath) | ||||
{ | ||||
model->setRootPath(newPath); | ||||
this->view->setRootIndex(model->index(model->rootPath())); | ||||
this->ui->pathLineEdit->setText(model->rootPath()); | ||||
} | ||||
void FileBrowser::changeEvent(QEvent *e) | ||||
{ | ||||
QDockWidget::changeEvent(e); | ||||
switch (e->type()) { | ||||
case QEvent::LanguageChange: | ||||
ui->retranslateUi(this); | ||||
break; | ||||
default: | ||||
break; | ||||
} | ||||
} | ||||
void FileBrowser::keyPressEvent(QKeyEvent *e) | ||||
{ | ||||
switch (e->key()) | ||||
{ | ||||
case Qt::Key_L: | ||||
if(e->modifiers()==Qt::ControlModifier) | ||||
{ | ||||
pathLineEditEnterEditMode(true); | ||||
e->accept(); | ||||
} | ||||
break; | ||||
case Qt::Key_Return: | ||||
pathLineEditEnterEditMode(false); | ||||
if(QFile::exists(this->ui->pathLineEdit->text())) | ||||
{ | ||||
this->cd(this->ui->pathLineEdit->text()); | ||||
e->accept(); | ||||
} | ||||
break; | ||||
default: | ||||
break; | ||||
} | ||||
if(!e->isAccepted()) | ||||
QDockWidget::keyPressEvent(e); | ||||
} | ||||
void FileBrowser::pathLineEditEnterEditMode(bool enter) | ||||
{ | ||||
this->ui->pathLineEdit->setReadOnly(!enter); | ||||
this->ui->pathLineEdit->setDisabled(!enter); | ||||
if(enter) | ||||
this->ui->pathLineEdit->setFocus(); | ||||
} | ||||