import QtQuick 2.0
import QtQuick.Window 2.0
import QtQuick.Layouts 1.0
import QtQuick.Controls 1.0
import QtQuick.Controls.Styles 1.1
import "."

Item {
	signal editorTextChanged

	function setText(text) {
		codeEditor.text = text;
	}

	function getText() {
		return codeEditor.text;
	}

	function setFocus() {
		codeEditor.forceActiveFocus();
	}

	anchors.fill: parent
	id: contentView
	width: parent.width
	height: parent.height * 0.7

	CodeEditorStyle {
		id: style
	}

	Rectangle {
		id: lineColumn
		property int rowHeight: codeEditor.font.pixelSize + 3
		color: "#202020"
		width: 50
		height: parent.height
		Column {
			y: -codeEditor.flickableItem.contentY + 4
			width: parent.width
			Repeater {
				model: Math.max(codeEditor.lineCount + 2, (lineColumn.height/lineColumn.rowHeight))
				delegate: Text {
					id: text
					color: codeEditor.textColor
					font: codeEditor.font
					width: lineColumn.width - 4
					horizontalAlignment: Text.AlignRight
					verticalAlignment: Text.AlignVCenter
					height: lineColumn.rowHeight
					renderType: Text.NativeRendering
					text: index + 1
				}
			}
		}
	}

	TextArea {
		id: codeEditor
		textColor: "#EEE8D5"
		style: TextAreaStyle {
			backgroundColor: "#002B36"
		}

		anchors.left: lineColumn.right
		anchors.right: parent.right
		anchors.top: parent.top
		anchors.bottom: parent.bottom
		wrapMode: TextEdit.NoWrap
		frameVisible: false

		height: parent.height
		font.family: "Monospace"
		font.pointSize: style.general.basicFontSize
		width: parent.width

		tabChangesFocus: false
		Keys.onPressed: {
			if (event.key === Qt.Key_Tab) {
				codeEditor.insert(codeEditor.cursorPosition, "\t");
				event.accepted = true;
			}
		}
		onTextChanged: {
			editorTextChanged();
		}

	}
}