aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKen Moore <moorekou@gmail.com>2015-08-28 08:09:02 -0400
committerKen Moore <moorekou@gmail.com>2015-08-28 08:09:02 -0400
commit70648f0b73e00cfd4c664672ce3353083bb61cb1 (patch)
tree11ac96a802504e0cabd60fa5f59321e09f6ff9dc
parentPut a few more "stopload" checks into the dir loading routine (after all the ... (diff)
downloadlumina-70648f0b73e00cfd4c664672ce3353083bb61cb1.tar.gz
lumina-70648f0b73e00cfd4c664672ce3353083bb61cb1.tar.bz2
lumina-70648f0b73e00cfd4c664672ce3353083bb61cb1.zip
Fix up the re-loading of the scrollbar location on directory update.
-rw-r--r--lumina-fm/widgets/DirWidget.cpp30
1 files changed, 22 insertions, 8 deletions
diff --git a/lumina-fm/widgets/DirWidget.cpp b/lumina-fm/widgets/DirWidget.cpp
index ce5744e6..255bb461 100644
--- a/lumina-fm/widgets/DirWidget.cpp
+++ b/lumina-fm/widgets/DirWidget.cpp
@@ -13,6 +13,7 @@
#include <QMimeData>
#include <QTimer>
#include <QInputDialog>
+#include <QScrollBar>
#include <LuminaOS.h>
#include <LuminaXDG.h>
@@ -219,6 +220,7 @@ void DirWidget::LoadDir(QString dir, QList<LFileInfo> list){
ui->actionStopLoad->setVisible(true);
stopload = false;
//Clear the display widget (if a new directory)
+ double scrollpercent = -1;
if(lastbasedir != normalbasedir){
if(showDetails){ treeWidget->clear(); }
else{ listWidget->clear(); }
@@ -234,6 +236,8 @@ void DirWidget::LoadDir(QString dir, QList<LFileInfo> list){
i--;
}
}
+ QApplication::processEvents();
+ scrollpercent = treeWidget->verticalScrollBar()->value()/( (double) treeWidget->verticalScrollBar()->maximum());
}else{
for(int i=0; i<listWidget->count(); i++){
if( !newfiles.contains(listWidget->item(i)->text()) ){
@@ -241,9 +245,9 @@ void DirWidget::LoadDir(QString dir, QList<LFileInfo> list){
i--;
}
}
+ scrollpercent = listWidget->horizontalScrollBar()->value()/( (double) listWidget->horizontalScrollBar()->maximum());
}
-
- }
+ } //end check for CDIR reload
//Now fill the display widget
bool hasimages, hasmultimedia;
hasimages = hasmultimedia = false;
@@ -336,14 +340,24 @@ void DirWidget::LoadDir(QString dir, QList<LFileInfo> list){
QApplication::processEvents(); //keep the UI snappy while loading a directory
}
ui->actionStopLoad->setVisible(false);
- //Another check to ensure the current item is visible
+ //Another check to ensure the current item is visible (or return to the same scroll position)
if(stopload){ return; } //stop right now
- if(showDetails){
- if(treeWidget->currentItem()!=0){ treeWidget->scrollToItem(treeWidget->currentItem()); }
- for(int t=0; t<treeWidget->columnCount(); t++){treeWidget->resizeColumnToContents(t); }
+ if(scrollpercent<0){
+ if(showDetails){
+ for(int t=0; t<treeWidget->columnCount(); t++){treeWidget->resizeColumnToContents(t); }
+ if(treeWidget->currentItem()!=0){ treeWidget->scrollToItem(treeWidget->currentItem()); }
+ }else{
+ if(listWidget->currentItem()!=0){ listWidget->scrollToItem(listWidget->currentItem()); }
+ }
}else{
- if(listWidget->currentItem()!=0){ listWidget->scrollToItem(listWidget->currentItem()); }
+ if(showDetails){
+ treeWidget->verticalScrollBar()->setValue( qRound(treeWidget->verticalScrollBar()->maximum()*scrollpercent) );
+ }else{
+ listWidget->horizontalScrollBar()->setValue( qRound(listWidget->horizontalScrollBar()->maximum()*scrollpercent) );
+ }
}
+
+
if(stopload){ return; } //stop right now
//Assemble any status message
QString stats = QString(tr("Capacity: %1")).arg(LOS::FileSystemCapacity(CDIR));
@@ -360,7 +374,7 @@ void DirWidget::LoadDir(QString dir, QList<LFileInfo> list){
}
}
- if(stopload){ return; } //stop right now
+ if(stopload){ return; } //stop right now
ui->label_status->setText( QString(ui->label_status->text()+stats).simplified() );
}
bgstack15