change Qt objects from pointers to class variables.
Changing away from pointers, make cleanup significantly easier (automatic), and slightly faster.
Signals from the buttons now terminate in the qt_toolkit (implementation class) so that doing a callback is direct.
diff --git a/experiments/editorFramework/src/Toolkit_Layer_1/qt/windows.cpp b/experiments/editorFramework/src/Toolkit_Layer_1/qt/Editor.cpp
similarity index 62%
copy from experiments/editorFramework/src/Toolkit_Layer_1/qt/windows.cpp
copy to experiments/editorFramework/src/Toolkit_Layer_1/qt/Editor.cpp
index 57a9686..2b515ac 100644
--- a/experiments/editorFramework/src/Toolkit_Layer_1/qt/windows.cpp
+++ b/experiments/editorFramework/src/Toolkit_Layer_1/qt/Editor.cpp
@@ -15,10 +15,18 @@
// under the License.
#pragma once
-#include "windows.hpp"
+#include "qt_classes.hpp"
-MainWindow::MainWindow(QApplication *app) {
-}
-MainWindow::~MainWindow() {
-}
+void Editor::webViewloadFinished(bool ok) {}
+
+Editor::Editor(QWidget *parent, Qt::WindowFlags f) {}
+Editor::~Editor() {}
+
+
+void Editor::mouseDoubleClickEvent(QMouseEvent *event) {}
+void Editor::mouseMoveEvent(QMouseEvent *event) {}
+void Editor::mousePressEvent(QMouseEvent *event) {}
+void Editor::mouseReleaseEvent(QMouseEvent *event) {}
+void Editor::resizeEvent(QResizeEvent *event) {}
+bool Editor::eventFilter(QObject *obj, QEvent *event) { return true; }
diff --git a/experiments/editorFramework/src/Toolkit_Layer_1/qt/MainWindow.cpp b/experiments/editorFramework/src/Toolkit_Layer_1/qt/MainWindow.cpp
new file mode 100644
index 0000000..ab5f994
--- /dev/null
+++ b/experiments/editorFramework/src/Toolkit_Layer_1/qt/MainWindow.cpp
@@ -0,0 +1,104 @@
+// Licensed to the Apache Software Foundation (ASF) under one
+// or more contributor license agreements. See the NOTICE file
+// distributed with this work for additional information
+// regarding copyright ownership. The ASF licenses this file
+// to you under the Apache License, Version 2.0 (the
+// "License"); you may not use this file except in compliance
+// with the License. You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.//
+// Unless required by applicable law or agreed to in writing,
+// software distributed under the License is distributed on an
+// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+// KIND, either express or implied. See the License for the
+// specific language governing permissions and limitations
+// under the License.
+
+#pragma once
+#include "qt_classes.hpp"
+
+
+MainWindow::MainWindow() {
+ toolbar.setParent(this);
+}
+
+
+
+#if 0
+#include "MainWindow.h"
+#include <QWebView>
+#include <QVBoxLayout>
+#include <QPushButton>
+#include <QCoreApplication>
+#include "Editor.h"
+#include "JSInterface.h"
+#include "Toolbar.h"
+
+MainWindow::MainWindow(QApplication *app) : QWidget(0)
+{
+ _app = app;
+ _toolbar = new Toolbar(this);
+ _editor = new Editor(this);
+ QVBoxLayout *vlayout = new QVBoxLayout();
+ this->setLayout(vlayout);
+ vlayout->addWidget(_toolbar);
+ vlayout->addWidget(_editor);
+ vlayout->setSpacing(0);
+ vlayout->setContentsMargins(4, 4, 4, 4);
+
+
+ QString appPath = QCoreApplication::applicationDirPath();
+ QString docPath = appPath + "/../share/corinthia/sample.html";
+ QUrl url = QUrl::fromLocalFile(docPath);
+ qStdOut() << "sample document url = " << url.toString() << endl;
+ _editor->webView()->load(url);
+}
+
+MainWindow::~MainWindow()
+{
+ delete _toolbar;
+ delete _editor;
+}
+
+void MainWindow::insertTable()
+{
+ _editor->js()->tables.insertTable(4, 3, "50%", true, "Table caption", QString::null);
+}
+
+void MainWindow::insertLink()
+{
+ _editor->js()->cursor.insertLink("Corinthia website", "http://corinthia.incubator.apache.org");
+}
+
+void MainWindow::insertCharacter()
+{
+ _editor->js()->cursor.insertCharacter('X', true);
+}
+
+void MainWindow::backspace()
+{
+ _editor->js()->cursor.deleteCharacter();
+}
+
+void MainWindow::moveLeft()
+{
+ _editor->js()->cursor.moveLeft();
+}
+
+void MainWindow::moveRight()
+{
+ _editor->js()->cursor.moveRight();
+}
+
+void MainWindow::undo()
+{
+ _editor->js()->undoManager.undo();
+}
+
+void MainWindow::redo()
+{
+ _editor->js()->undoManager.redo();
+}
+
+//#include <MainWindow.moc>
+#endif
\ No newline at end of file
diff --git a/experiments/editorFramework/src/Toolkit_Layer_1/qt/windows.cpp b/experiments/editorFramework/src/Toolkit_Layer_1/qt/Toolbar.cpp
similarity index 89%
rename from experiments/editorFramework/src/Toolkit_Layer_1/qt/windows.cpp
rename to experiments/editorFramework/src/Toolkit_Layer_1/qt/Toolbar.cpp
index 57a9686..e495a86 100644
--- a/experiments/editorFramework/src/Toolkit_Layer_1/qt/windows.cpp
+++ b/experiments/editorFramework/src/Toolkit_Layer_1/qt/Toolbar.cpp
@@ -15,10 +15,10 @@
// under the License.
#pragma once
-#include "windows.hpp"
+#include "qt_classes.hpp"
-MainWindow::MainWindow(QApplication *app) {
+Toolbar::Toolbar() {
}
-MainWindow::~MainWindow() {
+Toolbar::~Toolbar() {
}
diff --git a/experiments/editorFramework/src/Toolkit_Layer_1/qt/moc_qt_classes.cpp b/experiments/editorFramework/src/Toolkit_Layer_1/qt/moc_qt_classes.cpp
new file mode 100644
index 0000000..efb92e6
--- /dev/null
+++ b/experiments/editorFramework/src/Toolkit_Layer_1/qt/moc_qt_classes.cpp
@@ -0,0 +1,415 @@
+/****************************************************************************
+** Meta object code from reading C++ file 'qt_classes.hpp'
+**
+** Created by: The Qt Meta Object Compiler version 67 (Qt 5.5.0)
+**
+** WARNING! All changes made in this file will be lost!
+*****************************************************************************/
+
+#include "qt_classes.hpp"
+#include <QtCore/qbytearray.h>
+#include <QtCore/qmetatype.h>
+#if !defined(Q_MOC_OUTPUT_REVISION)
+#error "The header file 'qt_classes.hpp' doesn't include <QObject>."
+#elif Q_MOC_OUTPUT_REVISION != 67
+#error "This file was generated using the moc from 5.5.0. It"
+#error "cannot be used with the include files from this version of Qt."
+#error "(The moc has changed too much.)"
+#endif
+
+QT_BEGIN_MOC_NAMESPACE
+struct qt_meta_stringdata_Toolbar_t {
+ QByteArrayData data[1];
+ char stringdata0[8];
+};
+#define QT_MOC_LITERAL(idx, ofs, len) \
+ Q_STATIC_BYTE_ARRAY_DATA_HEADER_INITIALIZER_WITH_OFFSET(len, \
+ qptrdiff(offsetof(qt_meta_stringdata_Toolbar_t, stringdata0) + ofs \
+ - idx * sizeof(QByteArrayData)) \
+ )
+static const qt_meta_stringdata_Toolbar_t qt_meta_stringdata_Toolbar = {
+ {
+QT_MOC_LITERAL(0, 0, 7) // "Toolbar"
+
+ },
+ "Toolbar"
+};
+#undef QT_MOC_LITERAL
+
+static const uint qt_meta_data_Toolbar[] = {
+
+ // content:
+ 7, // revision
+ 0, // classname
+ 0, 0, // classinfo
+ 0, 0, // methods
+ 0, 0, // properties
+ 0, 0, // enums/sets
+ 0, 0, // constructors
+ 0, // flags
+ 0, // signalCount
+
+ 0 // eod
+};
+
+void Toolbar::qt_static_metacall(QObject *_o, QMetaObject::Call _c, int _id, void **_a)
+{
+ Q_UNUSED(_o);
+ Q_UNUSED(_id);
+ Q_UNUSED(_c);
+ Q_UNUSED(_a);
+}
+
+const QMetaObject Toolbar::staticMetaObject = {
+ { &QWidget::staticMetaObject, qt_meta_stringdata_Toolbar.data,
+ qt_meta_data_Toolbar, qt_static_metacall, Q_NULLPTR, Q_NULLPTR}
+};
+
+
+const QMetaObject *Toolbar::metaObject() const
+{
+ return QObject::d_ptr->metaObject ? QObject::d_ptr->dynamicMetaObject() : &staticMetaObject;
+}
+
+void *Toolbar::qt_metacast(const char *_clname)
+{
+ if (!_clname) return Q_NULLPTR;
+ if (!strcmp(_clname, qt_meta_stringdata_Toolbar.stringdata0))
+ return static_cast<void*>(const_cast< Toolbar*>(this));
+ return QWidget::qt_metacast(_clname);
+}
+
+int Toolbar::qt_metacall(QMetaObject::Call _c, int _id, void **_a)
+{
+ _id = QWidget::qt_metacall(_c, _id, _a);
+ if (_id < 0)
+ return _id;
+ return _id;
+}
+struct qt_meta_stringdata_Cursor_t {
+ QByteArrayData data[1];
+ char stringdata0[7];
+};
+#define QT_MOC_LITERAL(idx, ofs, len) \
+ Q_STATIC_BYTE_ARRAY_DATA_HEADER_INITIALIZER_WITH_OFFSET(len, \
+ qptrdiff(offsetof(qt_meta_stringdata_Cursor_t, stringdata0) + ofs \
+ - idx * sizeof(QByteArrayData)) \
+ )
+static const qt_meta_stringdata_Cursor_t qt_meta_stringdata_Cursor = {
+ {
+QT_MOC_LITERAL(0, 0, 6) // "Cursor"
+
+ },
+ "Cursor"
+};
+#undef QT_MOC_LITERAL
+
+static const uint qt_meta_data_Cursor[] = {
+
+ // content:
+ 7, // revision
+ 0, // classname
+ 0, 0, // classinfo
+ 0, 0, // methods
+ 0, 0, // properties
+ 0, 0, // enums/sets
+ 0, 0, // constructors
+ 0, // flags
+ 0, // signalCount
+
+ 0 // eod
+};
+
+void Cursor::qt_static_metacall(QObject *_o, QMetaObject::Call _c, int _id, void **_a)
+{
+ Q_UNUSED(_o);
+ Q_UNUSED(_id);
+ Q_UNUSED(_c);
+ Q_UNUSED(_a);
+}
+
+const QMetaObject Cursor::staticMetaObject = {
+ { &QWidget::staticMetaObject, qt_meta_stringdata_Cursor.data,
+ qt_meta_data_Cursor, qt_static_metacall, Q_NULLPTR, Q_NULLPTR}
+};
+
+
+const QMetaObject *Cursor::metaObject() const
+{
+ return QObject::d_ptr->metaObject ? QObject::d_ptr->dynamicMetaObject() : &staticMetaObject;
+}
+
+void *Cursor::qt_metacast(const char *_clname)
+{
+ if (!_clname) return Q_NULLPTR;
+ if (!strcmp(_clname, qt_meta_stringdata_Cursor.stringdata0))
+ return static_cast<void*>(const_cast< Cursor*>(this));
+ return QWidget::qt_metacast(_clname);
+}
+
+int Cursor::qt_metacall(QMetaObject::Call _c, int _id, void **_a)
+{
+ _id = QWidget::qt_metacall(_c, _id, _a);
+ if (_id < 0)
+ return _id;
+ return _id;
+}
+struct qt_meta_stringdata_Editor_t {
+ QByteArrayData data[4];
+ char stringdata0[31];
+};
+#define QT_MOC_LITERAL(idx, ofs, len) \
+ Q_STATIC_BYTE_ARRAY_DATA_HEADER_INITIALIZER_WITH_OFFSET(len, \
+ qptrdiff(offsetof(qt_meta_stringdata_Editor_t, stringdata0) + ofs \
+ - idx * sizeof(QByteArrayData)) \
+ )
+static const qt_meta_stringdata_Editor_t qt_meta_stringdata_Editor = {
+ {
+QT_MOC_LITERAL(0, 0, 6), // "Editor"
+QT_MOC_LITERAL(1, 7, 19), // "webViewloadFinished"
+QT_MOC_LITERAL(2, 27, 0), // ""
+QT_MOC_LITERAL(3, 28, 2) // "ok"
+
+ },
+ "Editor\0webViewloadFinished\0\0ok"
+};
+#undef QT_MOC_LITERAL
+
+static const uint qt_meta_data_Editor[] = {
+
+ // content:
+ 7, // revision
+ 0, // classname
+ 0, 0, // classinfo
+ 1, 14, // methods
+ 0, 0, // properties
+ 0, 0, // enums/sets
+ 0, 0, // constructors
+ 0, // flags
+ 0, // signalCount
+
+ // slots: name, argc, parameters, tag, flags
+ 1, 1, 19, 2, 0x0a /* Public */,
+
+ // slots: parameters
+ QMetaType::Void, QMetaType::Bool, 3,
+
+ 0 // eod
+};
+
+void Editor::qt_static_metacall(QObject *_o, QMetaObject::Call _c, int _id, void **_a)
+{
+ if (_c == QMetaObject::InvokeMetaMethod) {
+ Editor *_t = static_cast<Editor *>(_o);
+ Q_UNUSED(_t)
+ switch (_id) {
+ case 0: _t->webViewloadFinished((*reinterpret_cast< bool(*)>(_a[1]))); break;
+ default: ;
+ }
+ }
+}
+
+const QMetaObject Editor::staticMetaObject = {
+ { &QWidget::staticMetaObject, qt_meta_stringdata_Editor.data,
+ qt_meta_data_Editor, qt_static_metacall, Q_NULLPTR, Q_NULLPTR}
+};
+
+
+const QMetaObject *Editor::metaObject() const
+{
+ return QObject::d_ptr->metaObject ? QObject::d_ptr->dynamicMetaObject() : &staticMetaObject;
+}
+
+void *Editor::qt_metacast(const char *_clname)
+{
+ if (!_clname) return Q_NULLPTR;
+ if (!strcmp(_clname, qt_meta_stringdata_Editor.stringdata0))
+ return static_cast<void*>(const_cast< Editor*>(this));
+ return QWidget::qt_metacast(_clname);
+}
+
+int Editor::qt_metacall(QMetaObject::Call _c, int _id, void **_a)
+{
+ _id = QWidget::qt_metacall(_c, _id, _a);
+ if (_id < 0)
+ return _id;
+ if (_c == QMetaObject::InvokeMetaMethod) {
+ if (_id < 1)
+ qt_static_metacall(this, _c, _id, _a);
+ _id -= 1;
+ } else if (_c == QMetaObject::RegisterMethodArgumentMetaType) {
+ if (_id < 1)
+ *reinterpret_cast<int*>(_a[0]) = -1;
+ _id -= 1;
+ }
+ return _id;
+}
+struct qt_meta_stringdata_MainWindow_t {
+ QByteArrayData data[1];
+ char stringdata0[11];
+};
+#define QT_MOC_LITERAL(idx, ofs, len) \
+ Q_STATIC_BYTE_ARRAY_DATA_HEADER_INITIALIZER_WITH_OFFSET(len, \
+ qptrdiff(offsetof(qt_meta_stringdata_MainWindow_t, stringdata0) + ofs \
+ - idx * sizeof(QByteArrayData)) \
+ )
+static const qt_meta_stringdata_MainWindow_t qt_meta_stringdata_MainWindow = {
+ {
+QT_MOC_LITERAL(0, 0, 10) // "MainWindow"
+
+ },
+ "MainWindow"
+};
+#undef QT_MOC_LITERAL
+
+static const uint qt_meta_data_MainWindow[] = {
+
+ // content:
+ 7, // revision
+ 0, // classname
+ 0, 0, // classinfo
+ 0, 0, // methods
+ 0, 0, // properties
+ 0, 0, // enums/sets
+ 0, 0, // constructors
+ 0, // flags
+ 0, // signalCount
+
+ 0 // eod
+};
+
+void MainWindow::qt_static_metacall(QObject *_o, QMetaObject::Call _c, int _id, void **_a)
+{
+ Q_UNUSED(_o);
+ Q_UNUSED(_id);
+ Q_UNUSED(_c);
+ Q_UNUSED(_a);
+}
+
+const QMetaObject MainWindow::staticMetaObject = {
+ { &QWidget::staticMetaObject, qt_meta_stringdata_MainWindow.data,
+ qt_meta_data_MainWindow, qt_static_metacall, Q_NULLPTR, Q_NULLPTR}
+};
+
+
+const QMetaObject *MainWindow::metaObject() const
+{
+ return QObject::d_ptr->metaObject ? QObject::d_ptr->dynamicMetaObject() : &staticMetaObject;
+}
+
+void *MainWindow::qt_metacast(const char *_clname)
+{
+ if (!_clname) return Q_NULLPTR;
+ if (!strcmp(_clname, qt_meta_stringdata_MainWindow.stringdata0))
+ return static_cast<void*>(const_cast< MainWindow*>(this));
+ return QWidget::qt_metacast(_clname);
+}
+
+int MainWindow::qt_metacall(QMetaObject::Call _c, int _id, void **_a)
+{
+ _id = QWidget::qt_metacall(_c, _id, _a);
+ if (_id < 0)
+ return _id;
+ return _id;
+}
+struct qt_meta_stringdata_qt_toolkit_t {
+ QByteArrayData data[5];
+ char stringdata0[29];
+};
+#define QT_MOC_LITERAL(idx, ofs, len) \
+ Q_STATIC_BYTE_ARRAY_DATA_HEADER_INITIALIZER_WITH_OFFSET(len, \
+ qptrdiff(offsetof(qt_meta_stringdata_qt_toolkit_t, stringdata0) + ofs \
+ - idx * sizeof(QByteArrayData)) \
+ )
+static const qt_meta_stringdata_qt_toolkit_t qt_meta_stringdata_qt_toolkit = {
+ {
+QT_MOC_LITERAL(0, 0, 10), // "qt_toolkit"
+QT_MOC_LITERAL(1, 11, 4), // "save"
+QT_MOC_LITERAL(2, 16, 0), // ""
+QT_MOC_LITERAL(3, 17, 6), // "saveAs"
+QT_MOC_LITERAL(4, 24, 4) // "load"
+
+ },
+ "qt_toolkit\0save\0\0saveAs\0load"
+};
+#undef QT_MOC_LITERAL
+
+static const uint qt_meta_data_qt_toolkit[] = {
+
+ // content:
+ 7, // revision
+ 0, // classname
+ 0, 0, // classinfo
+ 3, 14, // methods
+ 0, 0, // properties
+ 0, 0, // enums/sets
+ 0, 0, // constructors
+ 0, // flags
+ 0, // signalCount
+
+ // slots: name, argc, parameters, tag, flags
+ 1, 0, 29, 2, 0x0a /* Public */,
+ 3, 0, 30, 2, 0x0a /* Public */,
+ 4, 0, 31, 2, 0x0a /* Public */,
+
+ // slots: parameters
+ QMetaType::Void,
+ QMetaType::Void,
+ QMetaType::Void,
+
+ 0 // eod
+};
+
+void qt_toolkit::qt_static_metacall(QObject *_o, QMetaObject::Call _c, int _id, void **_a)
+{
+ if (_c == QMetaObject::InvokeMetaMethod) {
+ qt_toolkit *_t = static_cast<qt_toolkit *>(_o);
+ Q_UNUSED(_t)
+ switch (_id) {
+ case 0: _t->save(); break;
+ case 1: _t->saveAs(); break;
+ case 2: _t->load(); break;
+ default: ;
+ }
+ }
+ Q_UNUSED(_a);
+}
+
+const QMetaObject qt_toolkit::staticMetaObject = {
+ { &QObject::staticMetaObject, qt_meta_stringdata_qt_toolkit.data,
+ qt_meta_data_qt_toolkit, qt_static_metacall, Q_NULLPTR, Q_NULLPTR}
+};
+
+
+const QMetaObject *qt_toolkit::metaObject() const
+{
+ return QObject::d_ptr->metaObject ? QObject::d_ptr->dynamicMetaObject() : &staticMetaObject;
+}
+
+void *qt_toolkit::qt_metacast(const char *_clname)
+{
+ if (!_clname) return Q_NULLPTR;
+ if (!strcmp(_clname, qt_meta_stringdata_qt_toolkit.stringdata0))
+ return static_cast<void*>(const_cast< qt_toolkit*>(this));
+ if (!strcmp(_clname, "toolkit"))
+ return static_cast< toolkit*>(const_cast< qt_toolkit*>(this));
+ return QObject::qt_metacast(_clname);
+}
+
+int qt_toolkit::qt_metacall(QMetaObject::Call _c, int _id, void **_a)
+{
+ _id = QObject::qt_metacall(_c, _id, _a);
+ if (_id < 0)
+ return _id;
+ if (_c == QMetaObject::InvokeMetaMethod) {
+ if (_id < 3)
+ qt_static_metacall(this, _c, _id, _a);
+ _id -= 3;
+ } else if (_c == QMetaObject::RegisterMethodArgumentMetaType) {
+ if (_id < 3)
+ *reinterpret_cast<int*>(_a[0]) = -1;
+ _id -= 3;
+ }
+ return _id;
+}
+QT_END_MOC_NAMESPACE
diff --git a/experiments/editorFramework/src/Toolkit_Layer_1/qt/moc_windows.cpp b/experiments/editorFramework/src/Toolkit_Layer_1/qt/moc_windows.cpp
deleted file mode 100644
index a7022d6..0000000
--- a/experiments/editorFramework/src/Toolkit_Layer_1/qt/moc_windows.cpp
+++ /dev/null
@@ -1,89 +0,0 @@
-/****************************************************************************
-** Meta object code from reading C++ file 'windows.hpp'
-**
-** Created by: The Qt Meta Object Compiler version 67 (Qt 5.5.0)
-**
-** WARNING! All changes made in this file will be lost!
-*****************************************************************************/
-
-#include "windows.hpp"
-#include <QtCore/qbytearray.h>
-#include <QtCore/qmetatype.h>
-#if !defined(Q_MOC_OUTPUT_REVISION)
-#error "The header file 'windows.hpp' doesn't include <QObject>."
-#elif Q_MOC_OUTPUT_REVISION != 67
-#error "This file was generated using the moc from 5.5.0. It"
-#error "cannot be used with the include files from this version of Qt."
-#error "(The moc has changed too much.)"
-#endif
-
-QT_BEGIN_MOC_NAMESPACE
-struct qt_meta_stringdata_MainWindow_t {
- QByteArrayData data[1];
- char stringdata0[11];
-};
-#define QT_MOC_LITERAL(idx, ofs, len) \
- Q_STATIC_BYTE_ARRAY_DATA_HEADER_INITIALIZER_WITH_OFFSET(len, \
- qptrdiff(offsetof(qt_meta_stringdata_MainWindow_t, stringdata0) + ofs \
- - idx * sizeof(QByteArrayData)) \
- )
-static const qt_meta_stringdata_MainWindow_t qt_meta_stringdata_MainWindow = {
- {
-QT_MOC_LITERAL(0, 0, 10) // "MainWindow"
-
- },
- "MainWindow"
-};
-#undef QT_MOC_LITERAL
-
-static const uint qt_meta_data_MainWindow[] = {
-
- // content:
- 7, // revision
- 0, // classname
- 0, 0, // classinfo
- 0, 0, // methods
- 0, 0, // properties
- 0, 0, // enums/sets
- 0, 0, // constructors
- 0, // flags
- 0, // signalCount
-
- 0 // eod
-};
-
-void MainWindow::qt_static_metacall(QObject *_o, QMetaObject::Call _c, int _id, void **_a)
-{
- Q_UNUSED(_o);
- Q_UNUSED(_id);
- Q_UNUSED(_c);
- Q_UNUSED(_a);
-}
-
-const QMetaObject MainWindow::staticMetaObject = {
- { &QWidget::staticMetaObject, qt_meta_stringdata_MainWindow.data,
- qt_meta_data_MainWindow, qt_static_metacall, Q_NULLPTR, Q_NULLPTR}
-};
-
-
-const QMetaObject *MainWindow::metaObject() const
-{
- return QObject::d_ptr->metaObject ? QObject::d_ptr->dynamicMetaObject() : &staticMetaObject;
-}
-
-void *MainWindow::qt_metacast(const char *_clname)
-{
- if (!_clname) return Q_NULLPTR;
- if (!strcmp(_clname, qt_meta_stringdata_MainWindow.stringdata0))
- return static_cast<void*>(const_cast< MainWindow*>(this));
- return QWidget::qt_metacast(_clname);
-}
-
-int MainWindow::qt_metacall(QMetaObject::Call _c, int _id, void **_a)
-{
- _id = QWidget::qt_metacall(_c, _id, _a);
- if (_id < 0)
- return _id;
- return _id;
-}
-QT_END_MOC_NAMESPACE
diff --git a/experiments/editorFramework/src/Toolkit_Layer_1/qt/qt_classes.hpp b/experiments/editorFramework/src/Toolkit_Layer_1/qt/qt_classes.hpp
new file mode 100644
index 0000000..82bc93c
--- /dev/null
+++ b/experiments/editorFramework/src/Toolkit_Layer_1/qt/qt_classes.hpp
@@ -0,0 +1,179 @@
+// Licensed to the Apache Software Foundation (ASF) under one
+// or more contributor license agreements. See the NOTICE file
+// distributed with this work for additional information
+// regarding copyright ownership. The ASF licenses this file
+// to you under the Apache License, Version 2.0 (the
+// "License"); you may not use this file except in compliance
+// with the License. You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing,
+// software distributed under the License is distributed on an
+// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+// KIND, either express or implied. See the License for the
+// specific language governing permissions and limitations
+// under the License.
+#pragma once
+#include "../toolkit.hpp"
+#include <QtWidgets/QWidget>
+
+
+/*
+ * qt_classes.hpp all the graphical classes inherited from Qt
+ * Typically each class would have its own header file, but that
+ * would also mean 1 MOC file pr class. Having all Qt definitions
+ * in 1 files gives a couple of advantages
+ * - only a single moc_qt_classes.cpp file
+ * - All qt definitions in one file makes the overview easier
+ *
+ * The current graphical layout will change once we get a graphical
+ * designer to take a look.
+ */
+
+
+class QPushButton;
+class QHBoxLayout;
+
+class Toolbar : public QWidget
+{
+ Q_OBJECT
+public:
+ Toolbar();
+ virtual ~Toolbar();
+
+ QPushButton *saveButton;
+ QPushButton *saveAsButton;
+ QPushButton *loadButton;
+ QHBoxLayout *_layout;
+};
+
+
+
+
+
+
+
+
+
+class Editor;
+class EditorJSEvaluator;
+class QWebView;
+class JSInterface;
+
+////////////////////////////////////////////////////////////////////////////////////////////////////
+// //
+// Cursor //
+// //
+////////////////////////////////////////////////////////////////////////////////////////////////////
+
+class Cursor : public QWidget
+{
+ Q_OBJECT
+public:
+ Cursor(QWidget *parent = 0);
+ virtual ~Cursor();
+
+protected:
+ virtual void paintEvent(QPaintEvent *event) Q_DECL_OVERRIDE;
+};
+
+////////////////////////////////////////////////////////////////////////////////////////////////////
+// //
+// Editor //
+// //
+////////////////////////////////////////////////////////////////////////////////////////////////////
+class EditorJSCallbacks;
+
+class Editor : public QWidget
+{
+ Q_OBJECT
+public:
+ Editor(QWidget *parent = 0, Qt::WindowFlags f = 0);
+ virtual ~Editor();
+ QWebView *webView() const { return _webView; }
+ JSInterface *js() const { return _js; }
+ Cursor *cursor() const { return _cursor; }
+
+ public slots:
+ void webViewloadFinished(bool ok);
+
+protected:
+ virtual void mouseDoubleClickEvent(QMouseEvent *event) Q_DECL_OVERRIDE;
+ virtual void mouseMoveEvent(QMouseEvent *event) Q_DECL_OVERRIDE;
+ virtual void mousePressEvent(QMouseEvent *event) Q_DECL_OVERRIDE;
+ virtual void mouseReleaseEvent(QMouseEvent *event) Q_DECL_OVERRIDE;
+ virtual void resizeEvent(QResizeEvent *event) Q_DECL_OVERRIDE;
+ virtual bool eventFilter(QObject *obj, QEvent *event) Q_DECL_OVERRIDE;
+
+private:
+ QWebView *_webView;
+ EditorJSCallbacks *_callbacks;
+ EditorJSEvaluator *_evaluator;
+ JSInterface *_js;
+ bool _selecting;
+ Cursor *_cursor;
+};
+
+
+
+
+
+
+
+////////////////////////////////////////////////////////////////////////////////////////////////////
+// //
+// MainWindow //
+// //
+////////////////////////////////////////////////////////////////////////////////////////////////////
+class MainWindow : public QWidget
+{
+ /* Main window, this adds all other widgets inside */
+ Q_OBJECT
+public:
+ // Constructor/Destructor
+ MainWindow();
+ ~MainWindow() {};
+
+
+ Toolbar toolbar;
+ Editor editor;
+};
+
+
+
+////////////////////////////////////////////////////////////////////////////////////////////////////
+// //
+// qt_toolkit //
+// //
+////////////////////////////////////////////////////////////////////////////////////////////////////
+class qt_toolkit : QObject, toolkit
+{
+ /* toolkit qt implementation */
+ Q_OBJECT
+
+
+public:
+ // Constructor/Destructor
+ qt_toolkit(toolkit_callback *setCallback, int setDebugLevel);
+ ~qt_toolkit() {};
+
+
+ // Inherited functions (accessible from the generic layer
+ bool startWindow();
+ void run();
+ bool callJavascript(const char *function);
+
+
+public slots:
+ void save();
+ void saveAs();
+ void load();
+
+
+private:
+ static QApplication *app;
+ MainWindow window;
+ toolkit_callback *callback;
+ int debugLevel;
+};
diff --git a/experiments/editorFramework/src/Toolkit_Layer_1/qt/qt_toolkit.cpp b/experiments/editorFramework/src/Toolkit_Layer_1/qt/qt_toolkit.cpp
index 0599b8f..e9ad884 100644
--- a/experiments/editorFramework/src/Toolkit_Layer_1/qt/qt_toolkit.cpp
+++ b/experiments/editorFramework/src/Toolkit_Layer_1/qt/qt_toolkit.cpp
@@ -13,30 +13,46 @@
// KIND, either express or implied. See the License for the
// specific language governing permissions and limitations
// under the License.
-
#pragma once
-#include "windows.hpp"
-#include "qt_toolkit.hpp"
+#include <QtWidgets/QApplication>
+#include "qt_classes.hpp"
+
+
+/*
+ * Implementation of
+ * Interface between implementation dependent toolkit and the API available for the handling.
+ *
+ * This file implements the smallest possible interface, in order to facilitate easier
+ * implementation of other toolkits.
+ *
+ * The Callbacks are handled through the signal/post function of Qt.
+ *
+ */
+
+
+
+// Static Variables
+QApplication * qt_toolkit::app;
// Constructor/Destructor
-qt_toolkit::qt_toolkit(toolkit_callback *setCallback, int setDebugLevel) {
- int argc = 0;
- char **argv = NULL;
+qt_toolkit::qt_toolkit(toolkit_callback *setCallback, int setDebugLevel) :
+ callback(setCallback),
+ debugLevel(setDebugLevel)
+{
+ // Application is only added once
+ if (!app) {
+ int argc = 0;
+ char **argv = NULL;
+ app = new QApplication(argc, argv);
+ }
-
- callback = setCallback;
- debugLevel = setDebugLevel;
- app = new QApplication(argc, argv);
+ // get notification, when user click on button
+ QObject::connect((const QObject *)window.toolbar.saveButton, SIGNAL(clicked()), this, SLOT(saveButton()));
+ QObject::connect((const QObject *)window.toolbar.saveAsButton, SIGNAL(clicked()), this, SLOT(saveAsButton()));
+ QObject::connect((const QObject *)window.toolbar.loadButton, SIGNAL(clicked()), this, SLOT(saveAsButton()));
}
-qt_toolkit::~qt_toolkit() {
- if (window)
- delete window;
- if (app)
- delete app;
-}
-
// Instanciate the derived class.
@@ -45,24 +61,35 @@
}
-
-// Prepare graphic
+// Prepare graphic (not used in the Qt implementation)
bool qt_toolkit::startWindow() {
- window = new MainWindow(app);
return true;
}
-
// Sart message loop, and to not return
void qt_toolkit::run() {
- window->show();
+ window.show();
app->exec();
}
-
// Activate Javascript function
bool qt_toolkit::callJavascript(const char *function) {
return true;
}
+
+
+// Notify save was requested
+void qt_toolkit::save() {
+}
+
+
+// Notify saveAs was requested
+void qt_toolkit::saveAs() {
+}
+
+
+// Notify load was requested
+void qt_toolkit::load() {
+}
\ No newline at end of file
diff --git a/experiments/editorFramework/src/Toolkit_Layer_1/qt/qt_toolkit.hpp b/experiments/editorFramework/src/Toolkit_Layer_1/qt/qt_toolkit.hpp
deleted file mode 100644
index 6603e41..0000000
--- a/experiments/editorFramework/src/Toolkit_Layer_1/qt/qt_toolkit.hpp
+++ /dev/null
@@ -1,54 +0,0 @@
-// Licensed to the Apache Software Foundation (ASF) under one
-// or more contributor license agreements. See the NOTICE file
-// distributed with this work for additional information
-// regarding copyright ownership. The ASF licenses this file
-// to you under the Apache License, Version 2.0 (the
-// "License"); you may not use this file except in compliance
-// with the License. You may obtain a copy of the License at
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing,
-// software distributed under the License is distributed on an
-// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-// KIND, either express or implied. See the License for the
-// specific language governing permissions and limitations
-// under the License.
-#pragma once
-#include "../toolkit.hpp"
-#include <QtWidgets/QApplication>
-
-
-
-/*
- * Implementation of toolkit generic interface in Qt
- *
- */
-
-
-
-class qt_toolkit : toolkit
-{
- /* toolkit qt implementation */
-
-public:
- /* Inherited functions */
- bool startWindow();
- void run();
- bool callJavascript(const char *function);
-
-
-
- // Constructor/Destructor
- qt_toolkit(toolkit_callback *setCallback, int setDebugLevel);
- ~qt_toolkit();
-
-
-
-private:
- QApplication *app;
- MainWindow *window;
- toolkit_callback *callback;
- int debugLevel;
-};
-
diff --git a/experiments/editorFramework/src/Toolkit_Layer_1/qt/windows.hpp b/experiments/editorFramework/src/Toolkit_Layer_1/qt/windows.hpp
deleted file mode 100644
index 07d6eff..0000000
--- a/experiments/editorFramework/src/Toolkit_Layer_1/qt/windows.hpp
+++ /dev/null
@@ -1,56 +0,0 @@
-// Licensed to the Apache Software Foundation (ASF) under one
-// or more contributor license agreements. See the NOTICE file
-// distributed with this work for additional information
-// regarding copyright ownership. The ASF licenses this file
-// to you under the Apache License, Version 2.0 (the
-// "License"); you may not use this file except in compliance
-// with the License. You may obtain a copy of the License at
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing,
-// software distributed under the License is distributed on an
-// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-// KIND, either express or implied. See the License for the
-// specific language governing permissions and limitations
-// under the License.
-#pragma once
-#include <QtWidgets/QWidget>
-
-
-
-/******************** WINDOWS.HPP ********************
- * This file contain all the graphical classes
- * inherited from Qt
- */
-
-
-
-// Main window, this adds all other widgets inside
-class MainWindow : public QWidget
-{
- Q_OBJECT
-public:
- MainWindow(QApplication *app);
- ~MainWindow();
-
-
-
-public slots:
-/*
- void insertTable();
- void insertLink();
- void insertCharacter();
- void backspace();
- void moveLeft();
- void moveRight();
- void undo();
- void redo();
- */
-
-
-private:
- QApplication *_app;
-// Toolbar *_toolbar;
-// Editor *_editor;
-};
diff --git a/experiments/editorFramework/src/Toolkit_Layer_1/toolkit.hpp b/experiments/editorFramework/src/Toolkit_Layer_1/toolkit.hpp
index 374c743..2420eb9 100644
--- a/experiments/editorFramework/src/Toolkit_Layer_1/toolkit.hpp
+++ b/experiments/editorFramework/src/Toolkit_Layer_1/toolkit.hpp
@@ -17,7 +17,6 @@
#pragma once
-
/*
* Interface between implementation dependent toolkit and the API available for the handling.
*
@@ -50,6 +49,11 @@
+////////////////////////////////////////////////////////////////////////////////////////////////////
+// //
+// toolkit_callback //
+// //
+////////////////////////////////////////////////////////////////////////////////////////////////////
class toolkit_callback {
/* Callback interface
*
@@ -74,19 +78,16 @@
virtual void debug(int level, const char *message) = 0;
-
// pass back Javascript result
virtual void notifyJavascript(const char *message) = 0;
-
// pass back Button action
// button can have values as defined in toolkit class
// (note windows actions are handled as special buttons)
virtual void notifyButtonPressed(int button) = 0;
-
// pass back Dialogbox action
// dialog can have values as defined in toolkit class
virtual void notifyDialog(int dialog, const char *message) = 0;
@@ -94,9 +95,14 @@
+////////////////////////////////////////////////////////////////////////////////////////////////////
+// //
+// toolkit //
+// //
+////////////////////////////////////////////////////////////////////////////////////////////////////
class toolkit
{
- /* toolkit interface
+ /* Toolkit interface
*
* this class is pure virtual, to make sure it gets implemented in toolkit implementation without any dependencies
* from the generic layer.
@@ -104,8 +110,10 @@
* Methods in this class activate graphical functions
*
* A static createInstance() is supplied to allow the TK implementation to instanciate the derived class
+ *
*/
+
public:
// Enumeration for DEBUG level
static const enum {
@@ -117,23 +125,19 @@
};
-
// Function to create a new instance, this is needed to allow the implementation class
// to have a derived class that contain implementation dependent functions and variables
static toolkit *createInstance(toolkit_callback *callback, int setDebugLevel);
-
// Start windows etc
virtual bool startWindow() = 0;
-
// Start message loop, does not return, unless main window is terminated
virtual void run() = 0;
-
// Start Javascript
virtual bool callJavascript(const char *function) = 0;
};