From a4e564bae5b4e3110bf352c3fd0e633d0966f2f4 Mon Sep 17 00:00:00 2001 From: kervala Date: Sat, 12 Mar 2016 21:53:20 +0100 Subject: [PATCH] Added: ServersModel to manage servers list --- .../ryzom_installer/src/serversmodel.cpp | 82 +++++++++++++++++++ .../client/ryzom_installer/src/serversmodel.h | 51 ++++++++++++ 2 files changed, 133 insertions(+) create mode 100644 code/ryzom/tools/client/ryzom_installer/src/serversmodel.cpp create mode 100644 code/ryzom/tools/client/ryzom_installer/src/serversmodel.h diff --git a/code/ryzom/tools/client/ryzom_installer/src/serversmodel.cpp b/code/ryzom/tools/client/ryzom_installer/src/serversmodel.cpp new file mode 100644 index 000000000..7cda521de --- /dev/null +++ b/code/ryzom/tools/client/ryzom_installer/src/serversmodel.cpp @@ -0,0 +1,82 @@ +// Ryzom - MMORPG Framework +// Copyright (C) 2010 Winch Gate Property Limited +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU Affero General Public License as +// published by the Free Software Foundation, either version 3 of the +// License, or (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Affero General Public License for more details. +// +// You should have received a copy of the GNU Affero General Public License +// along with this program. If not, see . + +#include "stdpch.h" +#include "serversmodel.h" + +CServersModel::CServersModel(QObject *parent):QAbstractListModel(parent) +{ + m_servers = CConfigFile::getInstance()->getServers(); +} + +CServersModel::CServersModel(const CServers &servers, QObject *parent):QAbstractListModel(parent), m_servers(servers) +{ +} + +CServersModel::~CServersModel() +{ +} + +int CServersModel::rowCount(const QModelIndex &parent) const +{ + return m_servers.size(); +} + +QVariant CServersModel::data(const QModelIndex &index, int role) const +{ + if (role != Qt::DisplayRole) return QVariant(); + + const CServer &server = m_servers.at(index.row()); + + return server.name; +} + +bool CServersModel::removeRows(int row, int count, const QModelIndex &parent) +{ + if (row < 0) return false; + + beginRemoveRows(parent, row, row + count - 1); + + m_servers.removeAt(row); + + endRemoveRows(); + + return true; +} + +bool CServersModel::save() const +{ + CConfigFile::getInstance()->setServers(m_servers); + + return true; +} + +int CServersModel::getIndexFromServerID(const QString &serverId) const +{ + for(int i = 0; i < m_servers.size(); ++i) + { + if (m_servers[i].id == serverId) return i; + } + + return -1; +} + +QString CServersModel::getServerIDFromIndex(int index) const +{ + if (index < 0 || index >= m_servers.size()) return ""; + + return m_servers[index].id; +} diff --git a/code/ryzom/tools/client/ryzom_installer/src/serversmodel.h b/code/ryzom/tools/client/ryzom_installer/src/serversmodel.h new file mode 100644 index 000000000..27f5daed3 --- /dev/null +++ b/code/ryzom/tools/client/ryzom_installer/src/serversmodel.h @@ -0,0 +1,51 @@ +// Ryzom - MMORPG Framework +// Copyright (C) 2010 Winch Gate Property Limited +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU Affero General Public License as +// published by the Free Software Foundation, either version 3 of the +// License, or (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Affero General Public License for more details. +// +// You should have received a copy of the GNU Affero General Public License +// along with this program. If not, see . + +#ifndef SERVERSMODEL_H +#define SERVERSMODEL_H + +#include "configfile.h" + +/** + * Servers model + * + * \author Cedric 'Kervala' OCHS + * \date 2016 + */ +class CServersModel : public QAbstractListModel +{ +public: + CServersModel(QObject *parent); + CServersModel(const CServers &servers, QObject *parent); + virtual ~CServersModel(); + + virtual int rowCount(const QModelIndex &parent = QModelIndex()) const; + virtual QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const; + + bool removeRows(int row, int count, const QModelIndex & parent = QModelIndex()); + + CServers& getServers() { return m_servers; } + + bool save() const; + + int getIndexFromServerID(const QString &serverId) const; + QString getServerIDFromIndex(int index) const; + +private: + CServers m_servers; +}; + +#endif