summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--filesystemdirproxy.cpp4
-rw-r--r--filesystemfileproxy.cpp20
-rw-r--r--filesystemfileproxy.h1
-rw-r--r--filesystemwidget.cpp6
-rw-r--r--fileview.cpp3
5 files changed, 33 insertions, 1 deletions
diff --git a/filesystemdirproxy.cpp b/filesystemdirproxy.cpp
index ae5d188..b43fe62 100644
--- a/filesystemdirproxy.cpp
+++ b/filesystemdirproxy.cpp
@@ -18,6 +18,10 @@ bool FilesystemDirProxy::filterAcceptsRow(int sourcerow, const QModelIndex &sour
if(!idx.isValid()){
return false;
}
+ QString fName = idx.data().toString();
+ if((fName == "." ) || (fName == "..")){
+ return false;
+ }
return m->isDir(idx);
}
diff --git a/filesystemfileproxy.cpp b/filesystemfileproxy.cpp
index 06ad939..7c49258 100644
--- a/filesystemfileproxy.cpp
+++ b/filesystemfileproxy.cpp
@@ -42,8 +42,28 @@ QVariant FilesystemFileProxy::data(const QModelIndex &index, int role) const{
return QSortFilterProxyModel::data(index, role);
}
+bool FilesystemFileProxy::filterAcceptsRow(int sourcerow, const QModelIndex &sourceparent) const{
+ QFileSystemModel *m = static_cast<QFileSystemModel*>(sourceModel());
+ QModelIndex idx = m->index(sourcerow, 0, sourceparent);
+ if(!idx.isValid()){
+ return false;
+ }
+ QString fName = idx.data().toString();
+ if(fName == "." ){
+ return false;
+ }
+ return QSortFilterProxyModel::filterAcceptsRow(sourcerow, sourceparent);
+}
+
bool FilesystemFileProxy::lessThan(const QModelIndex &left, const QModelIndex &right) const {
if(left.model()->headerData(left.column(), Qt::Horizontal).toString() == tr("Name")){
+ if(left.data().toString() == ".."){
+ if(sortOrder() == Qt::AscendingOrder){
+ return true;
+ }else{
+ return false;
+ }
+ }
QFileSystemModel *source = static_cast<QFileSystemModel*>(sourceModel());
if(source->isDir(left) && source->isDir(right)){
return left.data().toString().toLower() < right.data().toString().toLower();
diff --git a/filesystemfileproxy.h b/filesystemfileproxy.h
index a7b5e18..739305d 100644
--- a/filesystemfileproxy.h
+++ b/filesystemfileproxy.h
@@ -19,6 +19,7 @@ class FilesystemFileProxy : public QSortFilterProxyModel {
FilesystemFileProxy(QObject *parent = 0);
~FilesystemFileProxy() {};
virtual QVariant data(const QModelIndex &index, int role) const;
+ virtual bool filterAcceptsRow(int sourcerow, const QModelIndex &source_parent) const;
protected:
virtual bool lessThan(const QModelIndex &left, const QModelIndex &right) const;
diff --git a/filesystemwidget.cpp b/filesystemwidget.cpp
index 67facb9..52aede8 100644
--- a/filesystemwidget.cpp
+++ b/filesystemwidget.cpp
@@ -35,7 +35,7 @@
FilesystemWidget::FilesystemWidget(QWidget *parent) : QWidget(parent) {
mModel = new QFileSystemModel;
mModel->setRootPath("/");
- mModel->setFilter(QDir::AllEntries | QDir::NoDotAndDotDot);
+ mModel->setFilter(QDir::AllEntries | QDir::NoDot);
mModel->setReadOnly(false);
SheMovIconProvider *p = new SheMovIconProvider;
mModel->setIconProvider(p);
@@ -134,6 +134,10 @@ void FilesystemWidget::directoryEdited(){
void FilesystemWidget::fileViewActivated(const QModelIndex &idx){
QModelIndex real = mFileProxy->mapToSource(idx);
if(mModel->isDir(real)){
+ if(idx.data().toString() == ".."){
+ parentDir();
+ return;
+ }
fileView()->selectionModel()->select(idx, QItemSelectionModel::Deselect);
mDirView->setCurrentIndex(mDirProxy->mapFromSource(real));
return;
diff --git a/fileview.cpp b/fileview.cpp
index f4f5294..03fc76f 100644
--- a/fileview.cpp
+++ b/fileview.cpp
@@ -163,6 +163,9 @@ bool FileView::event(QEvent *e){
if(!curIdx.isValid() || (curIdx.column() != 0)){
return exitHover();
}
+ if(curIdx.data().toString() == ".."){
+ return exitHover();
+ }
QFileInfo fi(curIdx.data(QFileSystemModel::FilePathRole).toString());
if(!fi.exists()){
return true;