You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

92 lines
2.0 KiB

import QtQuick 2.0
import QtQuick.Window 2.0
import QtQuick.Layouts 1.0
import QtQuick.Controls 1.0
import org.ethereum.qml.ProjectModel 1.0
Item {
property string currentDocumentId: ""
function getDocumentText(documentId) {
for (i = 0; i < editorListModel.count; i++) {
if (editorListModel.get(i).documentId === documentId) {
return editors.itemAt(i).getText();
}
}
return "";
}
function openDocument(document) {
loadDocument(document);
currentDocumentId = document.documentId;
}
function loadDocument(document) {
for (var i = 0; i < editorListModel.count; i++)
if (editorListModel.get(i).documentId === document.documentId)
return; //already open
editorListModel.append(document);
}
function doLoadDocument(editor, document) {
var data = fileIo.readFile(document.path);
if (document.isContract)
editor.onEditorTextChanged.connect(function() {
codeModel.registerCodeChange(editor.getText());
});
editor.setText(data);
}
Connections {
target: ProjectModel
onDocumentOpened: {
openDocument(document);
}
onProjectSaving: {
for (var i = 0; i < editorListModel.count; i++)
fileIo.writeFile(editorListModel.get(i).path, editors.itemAt(i).item.getText());
}
onProjectClosed: {
for (var i = 0; i < editorListModel.count; i++) {
editors.itemAt(i).visible = false;
}
editorListModel.clear();
currentDocumentId = "";
}
}
CodeEditor {
id: codeEditor
}
Repeater {
id: editors
model: editorListModel
delegate: Loader {
active: false;
asynchronous: true
anchors.fill: parent
sourceComponent: codeEditor
visible: (index >= 0 && index < editorListModel.count && currentDocumentId === editorListModel.get(index).documentId)
onVisibleChanged: {
loadIfNotLoaded()
}
Component.onCompleted: {
loadIfNotLoaded()
}
onLoaded: { doLoadDocument(item, editorListModel.get(index)) }
function loadIfNotLoaded () {
if(visible && !active) {
active = true;
}
}
}
}
ListModel {
id: editorListModel
}
}