Allow toggling the display of only private server
This commit is contained in:
parent
901c5eabec
commit
5699a86586
@ -11,5 +11,13 @@
|
||||
<box proportion="1" width="98%" align="center" layout="vertical-row" padding="6">
|
||||
<list id="server_list" x="0" y="0" width="100%" height="100%"/>
|
||||
</box>
|
||||
<div width="99%" align="center" layout="vertical-row" height="fit">
|
||||
<div width="100%" height="fit" layout="horizontal-row" >
|
||||
<checkbox width="fit" id="private_server" text_align="left"/>
|
||||
<spacer width="10"/>
|
||||
<label proportion="1" height="100%" text_align="left"
|
||||
I18N="In the server selection screen" text="Show only private server"/>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</stkgui>
|
||||
|
@ -33,6 +33,8 @@
|
||||
#include "utils/time.hpp"
|
||||
#include "utils/log.hpp"
|
||||
|
||||
#include <algorithm>
|
||||
|
||||
// ----------------------------------------------------------------------------
|
||||
/** Specify server to connect to.
|
||||
* \param server Server to connect to (if nullptr than we use quick play).
|
||||
@ -78,8 +80,7 @@ void ConnectToServer::asynchronousUpdate()
|
||||
StkTime::sleep(1);
|
||||
while (!ServersManager::get()->listUpdated())
|
||||
StkTime::sleep(1);
|
||||
auto servers = ServersManager::get()->getServers();
|
||||
ServersManager::get()->cleanUpServers();
|
||||
auto servers = std::move(ServersManager::get()->getServers());
|
||||
|
||||
// Remove password protected servers
|
||||
servers.erase(std::remove_if(servers.begin(), servers.end(), []
|
||||
|
@ -20,9 +20,6 @@
|
||||
#define HEADER_SERVERS_MANAGER_HPP
|
||||
|
||||
#include <atomic>
|
||||
#include <algorithm>
|
||||
#include <cassert>
|
||||
#include <functional>
|
||||
#include <memory>
|
||||
#include <string>
|
||||
#include <vector>
|
||||
@ -70,17 +67,9 @@ public:
|
||||
// ------------------------------------------------------------------------
|
||||
void cleanUpServers() { m_servers.clear(); }
|
||||
// ------------------------------------------------------------------------
|
||||
void sortServers(std::function<bool(const std::shared_ptr<Server> a,
|
||||
const std::shared_ptr<Server> b)> sorting_function)
|
||||
{
|
||||
assert(m_list_updated);
|
||||
std::sort(m_servers.begin(), m_servers.end(), sorting_function);
|
||||
}
|
||||
// ------------------------------------------------------------------------
|
||||
bool refresh();
|
||||
// ------------------------------------------------------------------------
|
||||
const std::vector<std::shared_ptr<Server> >& getServers() const
|
||||
{ return m_servers; }
|
||||
std::vector<std::shared_ptr<Server> >& getServers() { return m_servers; }
|
||||
// ------------------------------------------------------------------------
|
||||
bool listUpdated() const { return m_list_updated; }
|
||||
|
||||
|
@ -18,6 +18,9 @@
|
||||
#include "states_screens/server_selection.hpp"
|
||||
|
||||
#include "audio/sfx_manager.hpp"
|
||||
#include "guiengine/widgets/check_box_widget.hpp"
|
||||
#include "guiengine/widgets/icon_button_widget.hpp"
|
||||
#include "guiengine/widgets/label_widget.hpp"
|
||||
#include "guiengine/modaldialog.hpp"
|
||||
#include "network/network_config.hpp"
|
||||
#include "network/server.hpp"
|
||||
@ -28,8 +31,8 @@
|
||||
#include "utils/translation.hpp"
|
||||
#include "utils/string_utils.hpp"
|
||||
|
||||
#include <iostream>
|
||||
#include <assert.h>
|
||||
#include <algorithm>
|
||||
#include <cassert>
|
||||
|
||||
using namespace Online;
|
||||
|
||||
@ -55,6 +58,7 @@ ServerSelection::~ServerSelection()
|
||||
*/
|
||||
void ServerSelection::tearDown()
|
||||
{
|
||||
m_servers.clear();
|
||||
ServersManager::get()->cleanUpServers();
|
||||
m_server_list_widget->clear();
|
||||
} // tearDown
|
||||
@ -85,6 +89,9 @@ void ServerSelection::loadedFromFile()
|
||||
m_server_list_widget = getWidget<GUIEngine::ListWidget>("server_list");
|
||||
assert(m_server_list_widget != NULL);
|
||||
m_server_list_widget->setColumnListener(this);
|
||||
m_private_server = getWidget<GUIEngine::CheckBoxWidget>("private_server");
|
||||
assert(m_private_server != NULL);
|
||||
m_private_server->setState(false);
|
||||
} // loadedFromFile
|
||||
|
||||
// ----------------------------------------------------------------------------
|
||||
@ -118,7 +125,7 @@ void ServerSelection::init()
|
||||
void ServerSelection::loadList(unsigned sort_case)
|
||||
{
|
||||
m_server_list_widget->clear();
|
||||
ServersManager::get()->sortServers([sort_case, this]
|
||||
std::sort(m_servers.begin(), m_servers.end(), [sort_case, this]
|
||||
(const std::shared_ptr<Server> a,
|
||||
const std::shared_ptr<Server> b)->bool
|
||||
{
|
||||
@ -142,7 +149,7 @@ void ServerSelection::loadList(unsigned sort_case)
|
||||
assert(false);
|
||||
return false;
|
||||
});
|
||||
for (auto server : ServersManager::get()->getServers())
|
||||
for (auto server : m_servers)
|
||||
{
|
||||
core::stringw num_players;
|
||||
num_players.append(StringUtils::toWString(server->getCurrentPlayers()));
|
||||
@ -182,24 +189,25 @@ void ServerSelection::eventCallback(GUIEngine::Widget* widget,
|
||||
{
|
||||
StateManager::get()->escapePressed();
|
||||
}
|
||||
|
||||
else if (name == "reload")
|
||||
{
|
||||
refresh();
|
||||
}
|
||||
|
||||
else if (name == "private_server")
|
||||
{
|
||||
copyFromServersManager();
|
||||
}
|
||||
else if (name == m_server_list_widget->m_properties[GUIEngine::PROP_ID])
|
||||
{
|
||||
int selected_index = m_server_list_widget->getSelectionID();
|
||||
// This can happen e.g. when the list is empty and the user
|
||||
// clicks somewhere.
|
||||
if (selected_index < 0 || m_refreshing_server ||
|
||||
selected_index >= (int)ServersManager::get()->getServers().size())
|
||||
selected_index >= (int)m_servers.size())
|
||||
{
|
||||
return;
|
||||
}
|
||||
new ServerInfoDialog(
|
||||
ServersManager::get()->getServers()[selected_index]);
|
||||
new ServerInfoDialog(m_servers[selected_index]);
|
||||
} // click on server
|
||||
|
||||
} // eventCallback
|
||||
@ -209,14 +217,13 @@ void ServerSelection::eventCallback(GUIEngine::Widget* widget,
|
||||
* if so, update the list of servers.
|
||||
*/
|
||||
void ServerSelection::onUpdate(float dt)
|
||||
|
||||
{
|
||||
// In case of auto-connect command line parameter, select the first server asap
|
||||
if (NetworkConfig::get()->isAutoConnect() &&
|
||||
m_refreshing_server == false &&
|
||||
!ServersManager::get()->getServers().empty())
|
||||
!m_servers.empty())
|
||||
{
|
||||
ServerInfoDialog *sid = new ServerInfoDialog(ServersManager::get()->getServers()[0]);
|
||||
ServerInfoDialog *sid = new ServerInfoDialog(m_servers[0]);
|
||||
sid->requestJoin();
|
||||
}
|
||||
|
||||
@ -228,8 +235,9 @@ void ServerSelection::onUpdate(float dt)
|
||||
if (!ServersManager::get()->getServers().empty())
|
||||
{
|
||||
int selection = m_server_list_widget->getSelectionID();
|
||||
std::string selection_str = m_server_list_widget->getSelectionInternalName();
|
||||
loadList(0);
|
||||
std::string selection_str = m_server_list_widget
|
||||
->getSelectionInternalName();
|
||||
copyFromServersManager();
|
||||
// restore previous selection
|
||||
if (selection != -1 && selection_str != "loading")
|
||||
m_server_list_widget->setSelectionID(selection);
|
||||
@ -250,3 +258,17 @@ void ServerSelection::onUpdate(float dt)
|
||||
}
|
||||
|
||||
} // onUpdate
|
||||
|
||||
// ----------------------------------------------------------------------------
|
||||
void ServerSelection::copyFromServersManager()
|
||||
{
|
||||
m_servers = ServersManager::get()->getServers();
|
||||
if (m_servers.empty())
|
||||
return;
|
||||
m_servers.erase(std::remove_if(m_servers.begin(), m_servers.end(),
|
||||
[this](const std::shared_ptr<Server> a)->bool
|
||||
{
|
||||
return a->isPasswordProtected() != m_private_server->getState();
|
||||
}), m_servers.end());
|
||||
loadList(0);
|
||||
} // copyFromServersManager
|
||||
|
@ -19,11 +19,20 @@
|
||||
#define HEADER_SERVER_SELECTION_HPP
|
||||
|
||||
#include "guiengine/screen.hpp"
|
||||
#include "guiengine/widgets.hpp"
|
||||
#include "guiengine/widgets/list_widget.hpp"
|
||||
|
||||
#include <memory>
|
||||
|
||||
namespace Online { class XMLRequest; }
|
||||
|
||||
namespace GUIEngine { class Widget; }
|
||||
namespace GUIEngine
|
||||
{
|
||||
class CheckBoxWidget;
|
||||
class IconButtonWidget;
|
||||
class LabelWidget;
|
||||
class ListWidget;
|
||||
}
|
||||
class Server;
|
||||
|
||||
/**
|
||||
* \brief ServerSelection
|
||||
@ -39,6 +48,9 @@ private:
|
||||
ServerSelection();
|
||||
~ServerSelection();
|
||||
|
||||
std::vector<std::shared_ptr<Server> > m_servers;
|
||||
|
||||
GUIEngine::CheckBoxWidget* m_private_server;
|
||||
GUIEngine::IconButtonWidget* m_reload_widget;
|
||||
GUIEngine::LabelWidget* m_update_status;
|
||||
GUIEngine::ListWidget* m_server_list_widget;
|
||||
@ -51,6 +63,8 @@ private:
|
||||
/** Load the servers into the main list.*/
|
||||
void loadList(unsigned sort_case);
|
||||
|
||||
void copyFromServersManager();
|
||||
|
||||
void refresh();
|
||||
|
||||
public:
|
||||
|
Loading…
x
Reference in New Issue
Block a user