diff options
author | Alexander Tkachev | 2016-07-04 13:26:33 +0600 |
---|---|---|
committer | Alexander Tkachev | 2016-08-24 16:07:55 +0600 |
commit | 6faf2c26173e0a1305e4cea07a04c2857586bf6f (patch) | |
tree | d49bc54acce721b2a5be0c3f22ccea3f1aff113f /gui/remotebrowser.cpp | |
parent | 51a7232c73b1f6c04103716cae88b3781fd8ab33 (diff) | |
download | scummvm-rg350-6faf2c26173e0a1305e4cea07a04c2857586bf6f.tar.gz scummvm-rg350-6faf2c26173e0a1305e4cea07a04c2857586bf6f.tar.bz2 scummvm-rg350-6faf2c26173e0a1305e4cea07a04c2857586bf6f.zip |
GUI: Add RemoteBrowser parent directories remembering
No wait when "Go up" is pressed. These contents could be invalid,
though. In order to refresh contents, one has to go up one more time and
then get back inside (in root folder - just press "Go up" to refresh
it).
Diffstat (limited to 'gui/remotebrowser.cpp')
-rw-r--r-- | gui/remotebrowser.cpp | 42 |
1 files changed, 26 insertions, 16 deletions
diff --git a/gui/remotebrowser.cpp b/gui/remotebrowser.cpp index 995e6a654c..efeabb69a6 100644 --- a/gui/remotebrowser.cpp +++ b/gui/remotebrowser.cpp @@ -98,7 +98,8 @@ void RemoteBrowserDialog::handleCommand(CommandSender *sender, uint32 cmd, uint3 break; case kListItemActivatedCmd: case kListItemDoubleClickedCmd: - if (_nodeContent[data].isDirectory()) { + if (_nodeContent[data].isDirectory()) { + _rememberedNodeContents[_node.path()] = _nodeContent; listDirectory(_nodeContent[data]); } break; @@ -155,30 +156,39 @@ void RemoteBrowserDialog::updateListing() { } void RemoteBrowserDialog::goUp() { + if (_rememberedNodeContents.contains(_node.path())) + _rememberedNodeContents.erase(_node.path()); + Common::String path = _node.path(); if (path.size() && (path.lastChar() == '/' || path.lastChar() == '\\')) path.deleteLastChar(); if (path.empty()) { - draw(); - return; + _rememberedNodeContents.erase(""); + } else { + for (int i = path.size() - 1; i >= 0; --i) + if (i == 0 || path[i] == '/' || path[i] == '\\') { + path.erase(i); + break; + } } - for (int i = path.size()-1; i >= 0; --i) - if (i == 0 || path[i] == '/' || path[i] == '\\') { - path.erase(i); - break; - } + listDirectory(Cloud::StorageFile(path, 0, 0, true)); } void RemoteBrowserDialog::listDirectory(Cloud::StorageFile node) { if (_navigationLocked || _workingRequest) return; - _navigationLocked = true; - - _workingRequest = CloudMan.listDirectory( - node.path(), - new Common::Callback<RemoteBrowserDialog, Cloud::Storage::ListDirectoryResponse>(this, &RemoteBrowserDialog::directoryListedCallback), - new Common::Callback<RemoteBrowserDialog, Networking::ErrorResponse>(this, &RemoteBrowserDialog::directoryListedErrorCallback), - false - ); + + if (_rememberedNodeContents.contains(node.path())) { + _nodeContent = _rememberedNodeContents[node.path()]; + } else { + _navigationLocked = true; + + _workingRequest = CloudMan.listDirectory( + node.path(), + new Common::Callback<RemoteBrowserDialog, Cloud::Storage::ListDirectoryResponse>(this, &RemoteBrowserDialog::directoryListedCallback), + new Common::Callback<RemoteBrowserDialog, Networking::ErrorResponse>(this, &RemoteBrowserDialog::directoryListedErrorCallback), + false + ); + } _backupNode = _node; _node = node; |