import QtQuick 2.0 import QtQuick.Window 2.0 Window { width: 800; height: 600; title: 'HsQML Notes'; visible: true; MouseArea { anchors.fill: parent; onDoubleClicked: insertNote(mouse.x, mouse.y, 'New Note'); } Component { id: noteFace; Rectangle { id: noteView; color: faceColour; width: 100; height: header.height + frontView.contentHeight; MouseArea { id: header; height: 20; anchors.top: parent.top; anchors.left: parent.left; anchors.right: parent.right; hoverEnabled: true; drag.target: parentView; Rectangle { anchors.fill: parent; color: Qt.darker(noteView.color, parent.containsMouse ? 1.2 : 1.1); } Text { anchors.left: parent.left; anchors.leftMargin: 5; anchors.verticalCenter: parent.verticalCenter; font.pixelSize: parent.height; text: faceName == 'front' ? '\u293E' : '\u293F'; color: flipArea.containsMouse ? 'blue' : 'black'; MouseArea { id: flipArea; anchors.fill: parent; hoverEnabled: true; onClicked: note.reverse = !note.reverse; } } Text { anchors.right: parent.right; anchors.rightMargin: 5; anchors.verticalCenter: parent.verticalCenter; font.pixelSize: parent.height; text: '\u2716'; color: closeArea.containsMouse ? 'red' : 'black'; MouseArea { id: closeArea; anchors.fill: parent; hoverEnabled: true; onClicked: deleteNote(note); } } } TextEdit { id: frontView; anchors.top: header.bottom; anchors.left: parent.left; anchors.right: parent.right; textMargin: 2; wrapMode: TextEdit.Wrap; text: note[faceName]; onTextChanged: note[faceName] = frontView.text; } } } Repeater { model: notes; Flipable { id: flipper; x: modelData.x; y: modelData.y; onXChanged: modelData.x = x; onYChanged: modelData.y = y; front: Loader { sourceComponent: noteFace; enabled: !modelData.reverse; property var note: modelData; property var parentView: flipper; property string faceName: 'front'; property string faceColour: 'yellow'; } back: Loader { sourceComponent: noteFace; enabled: modelData.reverse; property var note: modelData; property var parentView: flipper; property string faceName: 'back'; property string faceColour: 'pink'; } transform: Rotation { origin.x: 50; origin.y: 0; axis.x: 0; axis.y: -1; axis.z: 0; angle: modelData.reverse ? 180 : 0; Behavior on angle { NumberAnimation { duration: 250; } } } } } }