summaryrefslogtreecommitdiffstats
path: root/src/fbgui/javascriptinterface.cpp
blob: 8022797c56b385d8e30b6182333cc46981c1ec12 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
#include "fbgui.h"
#include "ndgui.h"
#include "javascriptinterface.h"
#include "sysinfo.h"

#include <log4cxx/logger.h>
#include "qlog4cxx.h"

using namespace log4cxx;
using namespace log4cxx::helpers;
LoggerPtr jsiLogger(Logger::getLogger("fbgui.jsi"));

//-------------------------------------------------------------------------------------------------------
//                                         Initialisation
//-------------------------------------------------------------------------------------------------------
/**
 * A constructor.
 *
 * @param parent
 *   Is of type QWebFrame.
 */
JavascriptInterface::JavascriptInterface(QWebFrame *parent) {
	LOG4CXX_DEBUG(jsiLogger, "Initializing javascript interface...");
	_targetFrame = parent;
}
//-------------------------------------------------------------------------------------------------------
/**
 * An empty destructor.
 */
JavascriptInterface::~JavascriptInterface() { /* destructor dummy */
}
//-------------------------------------------------------------------------------------------------------
/**
 * Attaches an instance of this class to the DOM of the HTML page.
 *
 * Attaches an instance of this class to the DOM of the HTML page.
 * This enables the possibility to call slots/methods of this class in
 * JavaScript functions of HTML page. It also calls the
 * JavascriptInterface::loadJQuery() method.
 *
 * @see JavascriptInterface::loadJQuery()
 */
void JavascriptInterface::attachToDOM() {
	_targetFrame->addToJavaScriptWindowObject(QString("fbgui"), this);
	loadJQuery();
}
//-------------------------------------------------------------------------------------------------------
/**
 * This method load the required jQuery libraries into the HTML page.
 *
 * This method load the required jQuery libraries into the HTML page.
 * The libraries are contained in the fbgui.qrc file.
 * The Path to the files is: ":/html/js".
 * Each library will be read and loaded into the HTML page via
 * the evaluateJavaScript() method.
 *
 * @see JavascriptInterface::attachToDOM()
 */
void JavascriptInterface::loadJQuery() {
	// to test if this actually works...
	QString js;
	QString pathToJsDir(DEFAULT_QRC_HTML_DIR);
	pathToJsDir.append("/js");

	QDir qrcJSDir(pathToJsDir);
	QFileInfoList fiList = qrcJSDir.entryInfoList();
	QFileInfo fi;

	foreach(fi, fiList) {
		if (fi.suffix() == "js") {
			QFile file;
			file.setFileName(pathToJsDir + "/" + fi.fileName());
			file.open(QIODevice::ReadOnly);
			js = file.readAll();
			file.close();

			_targetFrame->evaluateJavaScript(js);
			//LOG4CXX_DEBUG(jsiLogger, "evaluated " + fi.fileName());
		}
	}
}

//-------------------------------------------------------------------------------------------------------
/**
 * This method quits the whole program.
 *
 * This method quits the whole program.
 * Can be called from inside a JavaScript function of the HTML page.
 * Emits JavascriptInterface::quitFbgui() signal
 */
void JavascriptInterface::quit() {
	emit quitFbgui();
}

//-------------------------------------------------------------------------------------------------------
/**
 * This method performs a shutdown of the client.
 *
 * This method performs a shutdown of the client.
 * Emits the JavascriptInterface::shutDownClient() signal.It is
 * connected with the fbgui::performShutDown() method.
 *
 * @see fbgui::performShutDown()
 */
void JavascriptInterface::shutDown() {
	emit shutDownClient();
}
//-------------------------------------------------------------------------------------------------------
/**
 * This method performs a reboot of the client.
 *
 * This method performs a reboot of the client.
 * Emits the JavascriptInterface::rebootClient() signal. It is
 * connected with the fbgui::performReboot() method.
 *
 * @see fbgui::performReboot()
 */
void JavascriptInterface::reboot() {
	emit rebootClient();
}

//-------------------------------------------------------------------------------------------------------
/**
 * This method sends out messages to Javascript. A corresponding function must be implemented
 * on the webpage to receive these.
 */
void JavascriptInterface::notify(const QString& msg) {
LOG4CXX_DEBUG(jsiLogger, "Notifying: " << msg);
QString code = QString("notify('\%1')").arg(msg);
_targetFrame->evaluateJavaScript(code);
}