/*************************************************************************** * Copyright (C) 2005 by the G System Team * * http://www.g-system.at * * * * Permission is hereby granted, free of charge, to any person obtaining * * a copy of this software and associated documentation files (the * * "Software"), to deal in the Software without restriction, including * * without limitation the rights to use, copy, modify, merge, publish, * * distribute, sublicense, and/or sell copies of the Software, and to * * permit persons to whom the Software is furnished to do so, subject to * * the following conditions: * * * * The above copyright notice and this permission notice shall be * * included in all copies or substantial portions of the Software. * * * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, * * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.* * IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR * * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, * * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR * * OTHER DEALINGS IN THE SOFTWARE. * ***************************************************************************/ #ifndef GCLIENTFACTORY_H #define GCLIENTFACTORY_H #include #include class GCommunicationWidget; namespace GWE { class GweController; } namespace GCE { class GOpenGLFrame; class GCamera; } class QFrame; class KMainWindow; class KTextEdit; class KLineEdit; class KListBox; /** * \class GClientFactory GClientFactory.h * \brief Can be used to initialize a client on top of a world engine. * * Basically the init() method handles all GUI creation. * It is the main application's responsibility to create * a KApplication object, and initialize a GweController * before calling init() * * It is also the main applications responsibility to * connect signals to quit the application. * * @todo split of a GClientInterface class (should basically inherit KMainWindow) */ class GClientFactory : public QObject { Q_OBJECT protected: /** * The controller is set by init() it is used * for setting up a client user interface on top of it. */ GWE::GweController* WorldEngineController; /** * The main frame of the client interface. */ QFrame* MainFrame; /** * The OpenGL frame that displays everything. */ GCE::GOpenGLFrame* Frame; /** * The Camera for moving around,... */ GCE::GCamera* Camera; GCommunicationWidget* CommWidget; /** * This timer is used to periodically check * if the GWE is ready (IDs are available,...) * It uses the checkWorldEngineReady() slot. */ QTimer CheckTimer; public: /** * Constructor. */ GClientFactory(QObject* parent = NULL, const char* name = NULL); /** * Virtual destructor. */ virtual ~GClientFactory(); protected slots: /** * This slot is used before the world engine is initialized. * Basically just draws a string saying "Connecting to G Universe". * The slot itself is connected to afterRendering() from the * GOpenGLFrame. * As soon as checkWorldEngineReady() fully initializes the * world engine this slot is disconnected. * @see GCE::GOpenGLFrame::afterRendering() */ void renderInitStatus(); /** * Checks if the world engine is ready - then * a client element is created and connected to * the camera. The OpenGL frame starts to render... */ void checkWorldEngineReady(); /** * Reads the current server list from the GWE and * updates the server listbox accordingly. * This is periodically called by a timer. * @todo move into new client interface class. */ void updateServerList(); public slots: /** * Starts client initialization. */ void init(GWE::GweController* controller); signals: /** * Emitted when the user wants to send a message. * @todo move into new client interface class. * @see prepareMessageForSending() */ void sendMessage(QString message, QString destination); }; #endif