summaryrefslogtreecommitdiff
path: root/src/gui/serverdialog.cpp
diff options
context:
space:
mode:
authorBlue Sans Douze <bluesansdouze@gmail.com>2011-03-21 01:37:14 +0100
committerBlue Sans Douze <bluesansdouze@gmail.com>2011-03-22 00:13:11 +0100
commit5e7c538997a2a01c5139ed315b53a1fe5d7cb90c (patch)
tree2b156c885b4de0f5c565a2e96ec53a7c72ec7ed5 /src/gui/serverdialog.cpp
parent935d35a14fb0f5a635154e032cc113d7b6740976 (diff)
downloadmana-client-5e7c538997a2a01c5139ed315b53a1fe5d7cb90c.tar.gz
mana-client-5e7c538997a2a01c5139ed315b53a1fe5d7cb90c.tar.bz2
mana-client-5e7c538997a2a01c5139ed315b53a1fe5d7cb90c.tar.xz
mana-client-5e7c538997a2a01c5139ed315b53a1fe5d7cb90c.zip
Add option for sorting servers list (issue 316)
Diffstat (limited to 'src/gui/serverdialog.cpp')
-rw-r--r--src/gui/serverdialog.cpp54
1 files changed, 54 insertions, 0 deletions
diff --git a/src/gui/serverdialog.cpp b/src/gui/serverdialog.cpp
index ca8da9b4..b3311f55 100644
--- a/src/gui/serverdialog.cpp
+++ b/src/gui/serverdialog.cpp
@@ -52,6 +52,7 @@
#include <cstdlib>
#include <iostream>
#include <string>
+#include <algorithm>
static const int MAX_SERVERLIST = 6;
@@ -591,6 +592,59 @@ void ServerDialog::loadServers()
if (!found)
mServers.push_back(server);
}
+
+ reorderList(config.getIntValue("serverListOrder"));
+}
+
+/**
+ * Returns true if serv1 must appear before serv2
+ */
+bool ServerDialog::sortByLastUsage(const ServerInfo& serv1, const ServerInfo& serv2)
+{
+ int rank1 = -1;
+ int rank2 = -1;
+
+ for (int i = 0; i < MAX_SERVERLIST; ++i)
+ {
+ const std::string index = toString(i);
+ const std::string nameKey = "MostUsedServerName" + index;
+ std::string serv = config.getValue(nameKey, "");
+ if (serv == serv1.hostname)
+ rank1 = i;
+ else if (serv == serv2.hostname)
+ rank2 = i;
+ }
+
+ if (rank1 > rank2)
+ return true;
+
+ if (rank2 > rank1)
+ return false;
+
+ if (rank1 == rank2)
+ return ServerDialog::sortByName(serv1, serv2);
+}
+
+/**
+ * Returns true if serv1 must appear before serv2
+ */
+bool ServerDialog::sortByName(const ServerInfo& serv1, const ServerInfo& serv2)
+{
+ return compareStrI(serv1.name, serv2.name) < 0;
+}
+
+/**
+ * Reorders the server list
+ * @param orderBy
+ * - 0 : Order by last change (default)
+ * - 1 : Order by name
+ */
+void ServerDialog::reorderList(int orderBy)
+{
+ if (orderBy == 0)
+ std::sort(mServers.begin(), mServers.end(), ServerDialog::sortByLastUsage);
+ else
+ std::sort(mServers.begin(), mServers.end(), ServerDialog::sortByName);
}
void ServerDialog::loadCustomServers()