From 76e8affff0ac6fce21fa5491037061c6e46405a7 Mon Sep 17 00:00:00 2001
From: Don Gagne <don@thegagnes.com>
Date: Tue, 23 Dec 2014 12:50:08 -0800
Subject: [PATCH] Widget container for QML

---
 src/QGCQmlWidgetHolder.cpp | 49 ++++++++++++++++++++++++++++++++++++++
 src/QGCQmlWidgetHolder.h   | 59 ++++++++++++++++++++++++++++++++++++++++++++++
 src/QGCQmlWidgetHolder.ui  | 32 +++++++++++++++++++++++++
 3 files changed, 140 insertions(+)
 create mode 100644 src/QGCQmlWidgetHolder.cpp
 create mode 100644 src/QGCQmlWidgetHolder.h
 create mode 100644 src/QGCQmlWidgetHolder.ui

diff --git a/src/QGCQmlWidgetHolder.cpp b/src/QGCQmlWidgetHolder.cpp
new file mode 100644
index 0000000..75beeb7
--- /dev/null
+++ b/src/QGCQmlWidgetHolder.cpp
@@ -0,0 +1,49 @@
+/*=====================================================================
+ 
+ QGroundControl Open Source Ground Control Station
+ 
+ (c) 2009 - 2014 QGROUNDCONTROL PROJECT <http://www.qgroundcontrol.org>
+ 
+ This file is part of the QGROUNDCONTROL project
+ 
+ QGROUNDCONTROL is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+ 
+ QGROUNDCONTROL is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ GNU General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with QGROUNDCONTROL. If not, see <http://www.gnu.org/licenses/>.
+ 
+ ======================================================================*/
+
+/// @file
+///     @author Don Gagne <don@thegagnes.com>
+
+#include "QGCQmlWidgetHolder.h"
+
+QGCQmlWidgetHolder::QGCQmlWidgetHolder(QWidget *parent) :
+    QWidget(parent)
+{
+    _ui.setupUi(this);
+}
+
+QGCQmlWidgetHolder::~QGCQmlWidgetHolder()
+{
+
+}
+
+void QGCQmlWidgetHolder::setAutoPilot(AutoPilotPlugin* autoPilot)
+{
+    _ui.qmlWidget->rootContext()->setContextProperty("autopilot", autoPilot);
+}
+
+void QGCQmlWidgetHolder::setSource(const QUrl& qmlUrl)
+{
+    _ui.qmlWidget->setSource(qmlUrl);
+    _ui.qmlWidget->setMinimumSize(_ui.qmlWidget->rootObject()->width(), _ui.qmlWidget->rootObject()->height());
+}
diff --git a/src/QGCQmlWidgetHolder.h b/src/QGCQmlWidgetHolder.h
new file mode 100644
index 0000000..90b8e08
--- /dev/null
+++ b/src/QGCQmlWidgetHolder.h
@@ -0,0 +1,59 @@
+/*=====================================================================
+ 
+ QGroundControl Open Source Ground Control Station
+ 
+ (c) 2009 - 2014 QGROUNDCONTROL PROJECT <http://www.qgroundcontrol.org>
+ 
+ This file is part of the QGROUNDCONTROL project
+ 
+ QGROUNDCONTROL is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+ 
+ QGROUNDCONTROL is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ GNU General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with QGROUNDCONTROL. If not, see <http://www.gnu.org/licenses/>.
+ 
+ ======================================================================*/
+
+#ifndef QGCQmlWidgetHolder_h
+#define QGCQmlWidgetHolder_h
+
+/// @file
+///     @author Don Gagne <don@thegagnes.com>
+
+#include <QWidget>
+
+#include "ui_QGCQmlWidgetHolder.h"
+#include "AutoPilotPlugin.h"
+
+namespace Ui {
+class QGCQmlWidgetHolder;
+}
+
+/// This is used to create widgets which are implemented in QML.
+
+class QGCQmlWidgetHolder : public QWidget
+{
+    Q_OBJECT
+
+public:
+    explicit QGCQmlWidgetHolder(QWidget *parent = 0);
+    ~QGCQmlWidgetHolder();
+    
+    /// Sets the UAS into the widget which in turn will load facts into the context
+    void setAutoPilot(AutoPilotPlugin* autoPilot);
+
+    /// Sets the QML into the control
+    void setSource(const QUrl& qmlUrl);
+
+private:
+    Ui::QGCQmlWidgetHolder _ui;
+};
+
+#endif
diff --git a/src/QGCQmlWidgetHolder.ui b/src/QGCQmlWidgetHolder.ui
new file mode 100644
index 0000000..0a000a7
--- /dev/null
+++ b/src/QGCQmlWidgetHolder.ui
@@ -0,0 +1,32 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ui version="4.0">
+ <class>QGCQmlWidgetHolder</class>
+ <widget class="QWidget" name="QGCQmlWidgetHolder">
+  <property name="geometry">
+   <rect>
+    <x>0</x>
+    <y>0</y>
+    <width>400</width>
+    <height>300</height>
+   </rect>
+  </property>
+  <property name="windowTitle">
+   <string>Form</string>
+  </property>
+  <layout class="QVBoxLayout" name="verticalLayout">
+   <item>
+    <widget class="QGCQuickWidget" name="qmlWidget" native="true"/>
+   </item>
+  </layout>
+ </widget>
+ <customwidgets>
+  <customwidget>
+   <class>QGCQuickWidget</class>
+   <extends>QQuickWidget</extends>
+   <header>QGCQuickWidget.h</header>
+   <container>1</container>
+  </customwidget>
+ </customwidgets>
+ <resources/>
+ <connections/>
+</ui>