aboutsummaryrefslogtreecommitdiff
path: root/gui/remotebrowser.cpp
diff options
context:
space:
mode:
authorAlexander Tkachev2016-07-04 13:26:33 +0600
committerAlexander Tkachev2016-08-24 16:07:55 +0600
commit6faf2c26173e0a1305e4cea07a04c2857586bf6f (patch)
treed49bc54acce721b2a5be0c3f22ccea3f1aff113f /gui/remotebrowser.cpp
parent51a7232c73b1f6c04103716cae88b3781fd8ab33 (diff)
downloadscummvm-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.cpp42
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;