diff options
author | Christian Klinger | 2016-09-30 12:02:38 +0200 |
---|---|---|
committer | Christian Klinger | 2016-09-30 12:02:38 +0200 |
commit | 877607b07f30cbb8d7d8d06b1b91383095fdc144 (patch) | |
tree | 4c2ca41db4b9caa8e6c370237771d58bd99d7f13 /src/server/serverapp | |
parent | added a pre-commit hook for astyle. (diff) | |
download | pvs2-877607b07f30cbb8d7d8d06b1b91383095fdc144.tar.gz pvs2-877607b07f30cbb8d7d8d06b1b91383095fdc144.tar.xz pvs2-877607b07f30cbb8d7d8d06b1b91383095fdc144.zip |
refactoring.
Diffstat (limited to 'src/server/serverapp')
-rw-r--r-- | src/server/serverapp/serverapp.cpp | 91 | ||||
-rw-r--r-- | src/server/serverapp/serverapp.h | 87 |
2 files changed, 178 insertions, 0 deletions
diff --git a/src/server/serverapp/serverapp.cpp b/src/server/serverapp/serverapp.cpp new file mode 100644 index 0000000..8ad896f --- /dev/null +++ b/src/server/serverapp/serverapp.cpp @@ -0,0 +1,91 @@ +#include <QTranslator> + + +#include "serverapp.h" + +ServerApp::ServerApp(int& argc, char** argv) + : QApplication(argc, argv) +{ + setOrganizationName("openslx"); + setOrganizationDomain("openslx.org"); + setApplicationName("pvsmgr"); + + _arguments = parseParameters(); + + /* use system locale as language to translate gui */ + QTranslator translator; + translator.load(":pvsmgr"); + installTranslator(&translator); + + /* Set the global path of the settings */ + QSettings::setPath(QSettings::IniFormat, QSettings::SystemScope, "/opt/"); + QSharedPointer<QSettings> sys = getSettings(); + qDebug() << "System settings are in:" << sys->fileName(); + QFileInfo sysfi(sys->fileName()); + + _mainWindow = new MainWindow(); + +} + +QStringList ServerApp::parseParameters() +{ + QStringList rest; + for (QString a : arguments()) { + if (a == "--manager-only") { + _manager_only = true; + break; + } else if (a.startsWith("--config=")) { + _iniPath = a.mid(9); + } else { + rest << a; + } + } + return rest; + +} + +QStringList ServerApp::arguments() +{ + return _arguments; +} + +const Room* ServerApp::getCurrentRoom() +{ + if (_rooms.contains(_currentRoom)) { + return _rooms[_currentRoom]; + } else { + static Room* defaultRoom = NULL; + if (defaultRoom == NULL) { + defaultRoom = new Room(QMap<QString, + QPoint>(), QSize(8, 6), QSize(1, 1), "", ""); + } + return defaultRoom; + } +} +void ServerApp::setSessionName(const QString& name) +{ + _sessionName = name; + _sessionNameArray = name.toUtf8(); +} + +void ServerApp::setSessionName() +{ + const QString name = QString::number(qrand() % 9000 + 1000); + _sessionName = name; + _sessionNameArray = name.toUtf8(); +} + +QSharedPointer<QSettings> ServerApp::getSettings() +{ + QSharedPointer<QSettings> set; + if (_iniPath == "") { + /* default location (system scope) */ + set = QSharedPointer<QSettings>(new QSettings(QSettings::IniFormat, QSettings::SystemScope, "openslx/pvs2", "pvs2")); + } else { + /* use _iniPath to find ini file */ + set = QSharedPointer<QSettings>(new QSettings(_iniPath, QSettings::IniFormat)); + } + set->setIniCodec("UTF-8"); + return set; +} + diff --git a/src/server/serverapp/serverapp.h b/src/server/serverapp/serverapp.h new file mode 100644 index 0000000..be6b0ab --- /dev/null +++ b/src/server/serverapp/serverapp.h @@ -0,0 +1,87 @@ +#ifndef SERVERAPP_H +#define SERVERAPP_H + +#include <QApplication> +#include <QStringList> +#include <QMap> + +#include "../mainwindow/mainwindow.h" + +struct Room { + Room(QMap<QString, QPoint> cPos, QSize grid, QSize client, QString image, QString tutor) : + clientPositions(cPos), + gridSize(grid), + clientSize(client), + imagePath(image), + tutorIP(tutor) {}; + QMap<QString, QPoint> clientPositions; + QSize gridSize; + QSize clientSize; + QString imagePath; + QString tutorIP; +}; + + +/* define a macro `serverApp` that can be used anywhere in the program and + * returns a reference to the current ClientApp instance */ + +#if defined(serverApp) +#undef serverApp +#endif +#define serverApp (static_cast<ServerApp*>(QCoreApplication::instance())) + +/* this class is supposed to (after complete refactoring) to encapsulate all + * state of the application. At the moment, the state is distributed within + * several widgets. With this class information access will also be easier as + * it is possible to access the current ServerApp instance from anywhere with + * the serverApp macro (like qApp) */ +class ServerApp : public QApplication +{ + + Q_OBJECT + +private: + QStringList _arguments; + QStringList parseParameters(); + MainWindow* _mainWindow; + + QString _sessionName; + QByteArray _sessionNameArray; + QMap<QString, Room*> _rooms; + QString _currentRoom; + + bool _manager_only; + bool _isExam; + QString _iniPath; + +public: + + ServerApp(int& argc, char** argv); + + virtual QStringList arguments(); + + + /* getters */ + const QString& sessionName() { return _sessionName; } + const QByteArray& sessionNameArray() { return _sessionNameArray; } + const QMap<QString, Room*> & rooms() { return _rooms; } + const QString& getCurrentRoomName() { return _currentRoom; } + const QMap<QString, Room*>& getRooms() { return _rooms; } + bool isExam() { return _isExam; } + bool isManagerOnly() { return _manager_only; } + const Room* getCurrentRoom(); + + /* setters */ + void setSessionName(const QString& name); + void setSessionName(); + void setRooms(const QMap<QString, Room*> & roomList) { _rooms = roomList; } + void setIniPath(QString s) { _iniPath = s; }; + void setCurrentRoom(const QString& room) { _currentRoom = room; } + void setExam(bool exam) { _isExam = exam; } + + QSharedPointer<QSettings> getSettings(); + + +}; + +#endif |