diff options
Diffstat (limited to 'src/fbgui/fbgui.h')
-rw-r--r-- | src/fbgui/fbgui.h | 126 |
1 files changed, 126 insertions, 0 deletions
diff --git a/src/fbgui/fbgui.h b/src/fbgui/fbgui.h new file mode 100644 index 0000000..ee42469 --- /dev/null +++ b/src/fbgui/fbgui.h @@ -0,0 +1,126 @@ +/* + * Copyright (c) 2010,2011 - RZ Uni Freiburg + * Copyright (c) 2010,2011 - OpenSLX Project + * + * This program/file is free software distributed under the GPL version 2. + * See http://openslx.org/COPYING + * + * If you have any feedback please consult http://openslx.org/feedback and + * send your feedback to feedback@openslx.org + * + * General information about OpenSLX can be found under http://openslx.org + * + * + * Main class of the fbgui: + * - Manages display of components and their communications + * + */ + +#ifndef FBGUI_H +#define FBGUI_H + +#include <QWSServer> +#include <QtGui> +#include <QtWebKit> +#include <QxtCore> + +// Internal default settings +#define DEFAULT_URL "http://www.google.com" +#define DEFAULT_DOWNLOAD_DIR "/tmp/fbgui" +#define DEFAULT_CONFIG_PATH "/etc/fbgui.conf" +#define DEFAULT_LOG_FILE_PATH "/tmp/fbgui.log" +#define DEFAULT_UPDATE_INTERVAL 1; +#define DEFAULT_QRC_HTML_DIR ":/html" +#define DEFAULT_FILE_TRIGGER "/tmp/fbgui/trigger" + +// Global settings variables +extern QString logFilePath; +extern QString ipConfigFilePath; +extern QThread dmThread; +extern QString serialLocation; +extern QString fileToTriggerURL; +extern QString sessionID; +extern QString binPath; +extern QString downloadPath; +extern QUrl baseURL; +extern int debugMode; +extern int updateInterval; + +class fbgui: public QMainWindow { +Q_OBJECT + +public: + fbgui(); + ~fbgui(); + +public slots: + void init(); + +private: + //------------------- + // layout setup: + //------------------- + // Sets the layout depending on the debug mode: + // no debug or debugMode = 0 -> only browser shown. + // debugMode = 1 -> split main window in browser and debug console. + void setupLayout(); + // Create all actions for the GUI. (Currently only quit.) + void createActions(); + // Create a debug console widget as QTextEdit in order to print debug messages + // directly within the GUI. This was needed since ttys can't really be used + // for debugging purposes in the preboot environment. + void createDebugConsole(); + + //---------------------------------------- + // control the display of components: + //---------------------------------------- + // watches for the file triggering the loading of the URL. + // the file can be specified by the corresponding option. + void watchForTrigger(); + bool checkHost() const; + void loadURL(); + QByteArray generatePOSTData(); + + //---------------------------------- + // widgets constituing the gui: + //---------------------------------- + // QWebView for displaying internet content + QWebView* _webView; + // QSplitter to split the main window in two resizable frames. + QSplitter* _splitter; + // QTextEdit implementing a minimalistic debug console. + QTextEdit* _debugConsole; + + //------------------ + // action list: + //------------------ + // closes the main window provoking the application to quit. + QAction* _quit; + // triggers toggleDebugConsole() + QAction* _toggleDebugConsole; + + // watcher to detect changes in the observed directory. + QFileSystemWatcher* _watcher; + +private slots: + // toggles debug console when action _toggleDebugConsole happens. + void toggleDebugConsole(); + + // This function is triggered by fileChanged Signal of _watcher. + // It deletes _watcher, since we don't need it anymore and tries to load URL. + void prepareURLLoad(); + void loadURLDone(bool success); + + // shut off the system + void performShutDown(); + // reboot the system + void performReboot(); + // shows "loading system" page + void loadSystem(); + // prepares kexec by loading downloaded initramfs, kernel into kexec + void prepareKexec(); + // executes: kexec -e + void runKexec(); +}; + +#endif // FBGUI_H |