Add basic IDE UI
diff --git a/ide/qml/Cell.qml b/ide/qml/Cell.qml
new file mode 100644
index 0000000..d060dee
--- /dev/null
+++ b/ide/qml/Cell.qml
@@ -0,0 +1,44 @@
+import QtQuick 2.0
+import QtQuick.Controls 2.15
+import QtQuick.Controls.Material 2.0
+import QtQuick.Layouts 1.0
+
+ColumnLayout {
+ id: root
+
+ RowLayout {
+ Layout.fillWidth: true
+
+ Button {
+ Layout.alignment: Qt.AlignTop
+ icon.source: "qrc:///icons/play-circle.svg"
+ icon.color: Material.color(Material.Grey, Material.Shade600)
+ flat: true
+ }
+
+ ColumnLayout {
+ Layout.fillWidth: true
+ Layout.fillHeight: true
+
+ TextArea {
+ Layout.fillWidth: true
+ Layout.fillHeight: true
+ id: code
+ font.family: "monospace"
+ text: "Hello"
+ selectByMouse: true
+ wrapMode: TextEdit.WrapAtWordBoundaryOrAnywhere
+ }
+
+ Label {
+ Layout.fillWidth: true
+ font.family: "monospace"
+ text: "Result\nasdfasdf\nasdad"
+ }
+ }
+ }
+
+ InsertRow {
+
+ }
+}
diff --git a/ide/qml/InsertRow.qml b/ide/qml/InsertRow.qml
new file mode 100644
index 0000000..b12896a
--- /dev/null
+++ b/ide/qml/InsertRow.qml
@@ -0,0 +1,62 @@
+import QtQuick 2.0
+import QtQuick.Controls 2.15
+import QtQuick.Controls.Material 2.0
+import QtQuick.Layouts 1.0
+
+Rectangle {
+ id: root
+
+ color: Material.color(Material.Grey, Material.Shade800)
+ height: 2
+ Layout.fillWidth: true
+ Layout.topMargin: 14
+ Layout.bottomMargin: 14
+
+ transitions: Transition {
+ NumberAnimation {
+ property: "opacity"
+ duration: 100
+ easing.type: Easing.OutCubic
+ }
+ }
+
+ MouseArea {
+ id: mouseArea
+ height: 30
+ width: parent.width
+ anchors.centerIn: parent
+ hoverEnabled: true
+
+ states: [
+ State {
+ when: mouseArea.containsMouse
+ PropertyChanges {
+ target: root
+ opacity: 1
+ }
+ },
+ State {
+ when: !mouseArea.containsMouse
+ PropertyChanges {
+ target: root
+ opacity: 0
+ }
+ }
+ ]
+ }
+
+ Item {
+ id: insertRow
+ anchors.centerIn: parent
+ height: 24
+ width: 24
+
+ Button {
+ id: addButton
+ anchors.centerIn: parent
+ icon.source: "qrc:///icons/add.svg"
+ icon.color: Material.color(Material.Grey, Material.Shade400)
+ flat: true
+ }
+ }
+}
diff --git a/ide/qml/main.qml b/ide/qml/main.qml
new file mode 100644
index 0000000..d3bca25
--- /dev/null
+++ b/ide/qml/main.qml
@@ -0,0 +1,67 @@
+import QtQuick 2.5
+import QtQuick.Controls 2.15
+import QtQuick.Controls.Material 2.0
+import QtQuick.Layouts 1.3
+
+ApplicationWindow {
+ id: root
+ width: 1080
+ height: 720
+ title: "Notebook"
+ visible: true
+
+ Material.theme: Material.Dark
+ Material.accent: Material.Orange
+
+ ColumnLayout {
+ id: column
+ anchors.fill: parent
+
+ TabBar {
+ id: bar
+
+ Layout.fillWidth: true
+
+ TabButton {
+ text: "Example Workspace"
+ }
+
+ TabButton {
+ text: "Another Workspace"
+ }
+
+ TabButton {
+ text: "Testing"
+ }
+ }
+
+ SplitView {
+ id: split
+ Layout.fillHeight: true
+ Layout.fillWidth: true
+ orientation: Qt.Horizontal
+
+ ListView {
+ id: codeEditor
+ SplitView.fillWidth: true
+ SplitView.minimumWidth: 400
+ model: 3
+ clip: true
+
+ delegate: Cell {
+ width: codeEditor.width - 5
+ }
+ }
+
+ Item {
+ id: variables
+ SplitView.minimumWidth: 240
+
+ Label {
+ anchors.centerIn: parent
+ text: "Vars"
+ }
+ }
+ }
+ }
+}