summaryrefslogtreecommitdiffstats
path: root/src/fbgui/fbgui.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/fbgui/fbgui.h')
-rw-r--r--src/fbgui/fbgui.h126
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