diff --git a/retroshare-gui/src/gui/FileTransfer/SharedFilesDialog.cpp b/retroshare-gui/src/gui/FileTransfer/SharedFilesDialog.cpp index e9bf62bf2..e6e015b5b 100644 --- a/retroshare-gui/src/gui/FileTransfer/SharedFilesDialog.cpp +++ b/retroshare-gui/src/gui/FileTransfer/SharedFilesDialog.cpp @@ -287,14 +287,14 @@ void SharedFilesDialog::showEvent(QShowEvent *) { if(model!=NULL) { - std::set expanded_indexes,selected_indexes ; + std::set expanded_indexes,hidden_indexes,selected_indexes ; - saveExpandedPathsAndSelection(expanded_indexes,selected_indexes); + saveExpandedPathsAndSelection(expanded_indexes,hidden_indexes,selected_indexes); model->setVisible(true) ; model->update() ; - restoreExpandedPathsAndSelection(expanded_indexes,selected_indexes); + restoreExpandedPathsAndSelection(expanded_indexes,hidden_indexes,selected_indexes); } } RemoteSharedFilesDialog::~RemoteSharedFilesDialog() @@ -391,9 +391,9 @@ void SharedFilesDialog::changeCurrentViewModel(int viewTypeIndex) showProperColumns() ; - std::set expanded_indexes,selected_indexes ; + std::set expanded_indexes,hidden_indexes,selected_indexes ; - saveExpandedPathsAndSelection(expanded_indexes,selected_indexes); + saveExpandedPathsAndSelection(expanded_indexes,hidden_indexes,selected_indexes); if(isVisible()) { @@ -407,7 +407,7 @@ void SharedFilesDialog::changeCurrentViewModel(int viewTypeIndex) ui.dirTreeView->setModel(proxyModel); ui.dirTreeView->update(); - restoreExpandedPathsAndSelection(expanded_indexes,selected_indexes); + restoreExpandedPathsAndSelection(expanded_indexes,hidden_indexes,selected_indexes); QHeaderView * header = ui.dirTreeView->header () ; QHeaderView_setSectionResizeModeColumn(header, COLUMN_NAME, QHeaderView::Interactive); @@ -862,17 +862,19 @@ void SharedFilesDialog::preModDirectories(bool local) ui.dirTreeView->setSortingEnabled(false); - std::set expanded_indexes,selected_indexes; - saveExpandedPathsAndSelection(expanded_indexes,selected_indexes) ; + std::set expanded_indexes,hidden_indexes,selected_indexes; + saveExpandedPathsAndSelection(expanded_indexes,hidden_indexes,selected_indexes) ; /* Notify both models, only one is visible */ tree_model->preMods(); flat_model->preMods(); - restoreExpandedPathsAndSelection(expanded_indexes,selected_indexes) ; + restoreExpandedPathsAndSelection(expanded_indexes,hidden_indexes,selected_indexes) ; } -void SharedFilesDialog::saveExpandedPathsAndSelection(std::set& expanded_indexes, std::set& selected_indexes) +void SharedFilesDialog::saveExpandedPathsAndSelection(std::set& expanded_indexes, + std::set& hidden_indexes, + std::set& selected_indexes) { if(ui.dirTreeView->model() == NULL) return ; @@ -884,11 +886,13 @@ void SharedFilesDialog::saveExpandedPathsAndSelection(std::set& exp { std::string path = ui.dirTreeView->model()->index(row,0).data(Qt::DisplayRole).toString().toStdString(); - recursSaveExpandedItems(ui.dirTreeView->model()->index(row,0),path,expanded_indexes,selected_indexes); + recursSaveExpandedItems(ui.dirTreeView->model()->index(row,0),path,expanded_indexes,hidden_indexes,selected_indexes); } } -void SharedFilesDialog::restoreExpandedPathsAndSelection(const std::set& expanded_indexes, const std::set& selected_indexes) +void SharedFilesDialog::restoreExpandedPathsAndSelection(const std::set& expanded_indexes, + const std::set& hidden_indexes, + const std::set& selected_indexes) { if(ui.dirTreeView->model() == NULL) return ; @@ -903,14 +907,17 @@ void SharedFilesDialog::restoreExpandedPathsAndSelection(const std::setmodel()->rowCount(); ++row) { std::string path = ui.dirTreeView->model()->index(row,0).data(Qt::DisplayRole).toString().toStdString(); - recursRestoreExpandedItems(ui.dirTreeView->model()->index(row,0),path,expanded_indexes,selected_indexes); + recursRestoreExpandedItems(ui.dirTreeView->model()->index(row,0),path,expanded_indexes,hidden_indexes,selected_indexes); } QItemSelection selection ; ui.dirTreeView->blockSignals(false) ; } -void SharedFilesDialog::recursSaveExpandedItems(const QModelIndex& index,const std::string& path,std::set& exp,std::set& sel) +void SharedFilesDialog::recursSaveExpandedItems(const QModelIndex& index,const std::string& path,std::set& exp, + std::set& vis, + std::set& sel + ) { std::string local_path = path+"/"+index.data(Qt::DisplayRole).toString().toStdString(); #ifdef DEBUG_SHARED_FILES_DIALOG @@ -920,6 +927,9 @@ void SharedFilesDialog::recursSaveExpandedItems(const QModelIndex& index,const s if(ui.dirTreeView->selectionModel()->selection().contains(index)) sel.insert(local_path) ; + if(ui.dirTreeView->isRowHidden(index.row(),index.parent())) + vis.insert(local_path) ; + if(ui.dirTreeView->isExpanded(index)) { #ifdef DEBUG_SHARED_FILES_DIALOG @@ -929,7 +939,7 @@ void SharedFilesDialog::recursSaveExpandedItems(const QModelIndex& index,const s exp.insert(local_path) ; for(int row=0;rowmodel()->rowCount(index);++row) - recursSaveExpandedItems(index.child(row,0),local_path,exp,sel) ; + recursSaveExpandedItems(index.child(row,0),local_path,exp,vis,sel) ; } #ifdef DEBUG_SHARED_FILES_DIALOG else @@ -937,7 +947,10 @@ void SharedFilesDialog::recursSaveExpandedItems(const QModelIndex& index,const s #endif } -void SharedFilesDialog::recursRestoreExpandedItems(const QModelIndex& index, const std::string &path, const std::set& exp, const std::set &sel) +void SharedFilesDialog::recursRestoreExpandedItems(const QModelIndex& index, const std::string &path, + const std::set& exp, + const std::set& vis, + const std::set &sel) { std::string local_path = path+"/"+index.data(Qt::DisplayRole).toString().toStdString(); #ifdef DEBUG_SHARED_FILES_DIALOG @@ -946,6 +959,8 @@ void SharedFilesDialog::recursRestoreExpandedItems(const QModelIndex& index, con if(sel.find(local_path) != sel.end()) ui.dirTreeView->selectionModel()->select(index, QItemSelectionModel::Select | QItemSelectionModel::Rows); + ui.dirTreeView->setRowHidden(index.row(),index.parent(), vis.find(local_path) != vis.end()) ; + if(exp.find(local_path) != exp.end()) { #ifdef DEBUG_SHARED_FILES_DIALOG @@ -954,7 +969,7 @@ void SharedFilesDialog::recursRestoreExpandedItems(const QModelIndex& index, con ui.dirTreeView->setExpanded(index,true) ; for(int row=0;rowmodel()->rowCount(index);++row) - recursRestoreExpandedItems(index.child(row,0),local_path,exp,sel) ; + recursRestoreExpandedItems(index.child(row,0),local_path,exp,vis,sel) ; } } @@ -964,9 +979,9 @@ void SharedFilesDialog::postModDirectories(bool local) if (isRemote() == local) return; - std::set expanded_indexes,selected_indexes; + std::set expanded_indexes,selected_indexes,hidden_indexes; - saveExpandedPathsAndSelection(expanded_indexes,selected_indexes) ; + saveExpandedPathsAndSelection(expanded_indexes,hidden_indexes,selected_indexes) ; #ifdef DEBUG_SHARED_FILES_DIALOG std::cerr << "Saving expanded items. " << expanded_indexes.size() << " items found" << std::endl; #endif @@ -981,7 +996,7 @@ void SharedFilesDialog::postModDirectories(bool local) ui.dirTreeView->setSortingEnabled(true); - restoreExpandedPathsAndSelection(expanded_indexes,selected_indexes) ; + restoreExpandedPathsAndSelection(expanded_indexes,hidden_indexes,selected_indexes) ; #ifdef DEBUG_SHARED_FILES_DIALOG std::cerr << "****** updated directories! Re-enabling sorting ******" << std::endl; diff --git a/retroshare-gui/src/gui/FileTransfer/SharedFilesDialog.h b/retroshare-gui/src/gui/FileTransfer/SharedFilesDialog.h index 4fb18ab0c..6449da161 100644 --- a/retroshare-gui/src/gui/FileTransfer/SharedFilesDialog.h +++ b/retroshare-gui/src/gui/FileTransfer/SharedFilesDialog.h @@ -87,10 +87,10 @@ protected: Ui::SharedFilesDialog ui; virtual void processSettings(bool bLoad) = 0; - void recursRestoreExpandedItems(const QModelIndex& index,const std::string& path,const std::set& exp,const std::set& sel); - void recursSaveExpandedItems(const QModelIndex& index, const std::string &path, std::set &exp, std::set& sel); - void saveExpandedPathsAndSelection(std::set& paths, std::set& selected_indexes) ; - void restoreExpandedPathsAndSelection(const std::set& paths, const std::set& selected_indexes) ; + void recursRestoreExpandedItems(const QModelIndex& index, const std::string& path, const std::set& exp, const std::set& vis, const std::set& sel); + void recursSaveExpandedItems(const QModelIndex& index, const std::string &path, std::set &exp,std::set& vis, std::set& sel); + void saveExpandedPathsAndSelection(std::set& paths,std::set& visible_indexes, std::set& selected_indexes) ; + void restoreExpandedPathsAndSelection(const std::set& paths,const std::set& visible_indexes, const std::set& selected_indexes) ; protected: //now context menu are created again every time theu are called ( in some