Warning, /graphics/peruse/src/creator/qml/BookReferenceEditor.qml is written in an unsupported language. File is not indexed.
0001 /*
0002 * Copyright (C) 2020 Dan Leinir Turthra Jensen <admin@leinir.dk>
0003 *
0004 * This library is free software; you can redistribute it and/or
0005 * modify it under the terms of the GNU Lesser General Public
0006 * License as published by the Free Software Foundation; either
0007 * version 2.1 of the License, or (at your option) version 3, or any
0008 * later version accepted by the membership of KDE e.V. (or its
0009 * successor approved by the membership of KDE e.V.), which shall
0010 * act as a proxy defined in Section 6 of version 3 of the license.
0011 *
0012 * This library is distributed in the hope that it will be useful,
0013 * but WITHOUT ANY WARRANTY; without even the implied warranty of
0014 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
0015 * Lesser General Public License for more details.
0016 *
0017 * You should have received a copy of the GNU Lesser General Public
0018 * License along with this library. If not, see <http://www.gnu.org/licenses/>.
0019 *
0020 */
0021
0022 import QtQuick 2.12
0023 import QtQuick.Layouts 1.4
0024 import QtQuick.Controls 2.12 as QtControls
0025
0026 import org.kde.kirigami 2.13 as Kirigami
0027
0028 import org.kde.peruse 0.1 as Peruse
0029 /**
0030 * @brief the page which shows the references contained within the book
0031 */
0032 Kirigami.ScrollablePage {
0033 id: root;
0034 property string categoryName: "bookReferences";
0035 title: referenceLanguage.text === ""
0036 ? i18nc("title text for the reference editor page, when the reference has no language set", "Editing %1 (default language)", referenceIdentifier.text)
0037 : i18nc("title text for the reference editor page", "Editing %1 (language: %2)", referenceIdentifier.text, referenceLanguage.text);
0038 property QtObject reference;
0039 property QtObject model;
0040 onReferenceChanged: {
0041 textArea.text = reference.paragraphs.join("\n");
0042 referenceIdentifier.text = root.reference.id;
0043 referenceLanguage.text = root.reference.language;
0044 }
0045 function saveReference() {
0046 reference.id = referenceIdentifier.text;
0047 reference.language = referenceLanguage.text;
0048 reference.paragraphs = textDocumentEditor.paragraphs();
0049 }
0050
0051 actions {
0052 contextualActions: textActions;
0053 main: okCloseAction;
0054 right: saveReferenceAction;
0055 left: abortChangesAction;
0056 }
0057 property list<QtObject> textActions: [
0058 Kirigami.Action {
0059 text: i18nc("Opens a sheet which lets the user change the name and language of the reference", "Edit Details...");
0060 icon.name: "documentinfo";
0061 onTriggered: referenceDetails.open();
0062 },
0063 Kirigami.Action { separator: true; },
0064 Kirigami.Action {
0065 text: i18nc("Copies the selected text", "Copy");
0066 icon.name: "edit-copy";
0067 enabled: textArea.selectedText;
0068 onTriggered: textArea.copy();
0069 },
0070 Kirigami.Action {
0071 text: i18nc("Cuts the selected text", "Cut");
0072 icon.name: "edit-cut";
0073 enabled: textArea.selectedText;
0074 onTriggered: textArea.cut();
0075 },
0076 Kirigami.Action {
0077 text: i18nc("Pastes the clipboard contents into the current location", "Paste");
0078 icon.name: "edit-paste";
0079 enabled: textArea.canPaste;
0080 onTriggered: textArea.paste();
0081 },
0082 Kirigami.Action { separator: true; },
0083 Kirigami.Action {
0084 text: i18nc("Edit the link the cursor is currently positioned on (or convert the selection to a link, or add a new one if there is no selection)", "Edit Link");
0085 icon.name: "edit-link"
0086 onTriggered: linkDetails.edit();
0087 }
0088 ]
0089 Kirigami.Action {
0090 id: okCloseAction;
0091 text: i18nc("Save the reference and close the editor", "Save and Close Editor");
0092 icon.name: "dialog-ok";
0093 onTriggered: {
0094 root.saveReference();
0095 pageStack.pop();
0096 }
0097 }
0098 Kirigami.Action {
0099 id: saveReferenceAction;
0100 text: i18nc("Save the reference and keep editing", "Save");
0101 icon.name: "document-save";
0102 onTriggered: {
0103 root.saveReference();
0104 }
0105 }
0106 Kirigami.Action {
0107 id: abortChangesAction;
0108 text: i18nc("Abort the changes made in the editor, and close the editor", "Abort Changes");
0109 icon.name: "dialog-cancel";
0110 onTriggered: {
0111 pageStack.pop();
0112 }
0113 }
0114
0115 Kirigami.OverlaySheet {
0116 id: referenceDetails;
0117 showCloseButton: true
0118
0119 header: RowLayout {
0120 Kirigami.Heading {
0121 text: i18nc("title text for a sheet which lets the user edit the details of a reference", "Edit Reference Details");
0122 Layout.fillWidth: true;
0123 elide: Text.ElideRight;
0124 }
0125 }
0126 Kirigami.FormLayout {
0127 QtControls.TextField {
0128 id: referenceIdentifier;
0129 Layout.fillWidth: true;
0130 Kirigami.FormData.label: i18nc("Label for the reference identifier input field", "Unique Identifier");
0131 placeholderText: i18nc("Placeholder text for the reference identifier input field", "Enter your reference ID here (should be unique)");
0132 }
0133 QtControls.TextField {
0134 id: referenceLanguage;
0135 Layout.fillWidth: true;
0136 Kirigami.FormData.label: i18nc("Label for the reference language input field", "Language");
0137 placeholderText: i18nc("Placeholder text for the reference language input field", "Enter the language ID here (leave empty for the document default language)");
0138 }
0139 }
0140 }
0141
0142 LinkEditorSheet {
0143 id: linkDetails;
0144 textField: textArea;
0145 editorHelper: textDocumentEditor;
0146 model: root.model;
0147 }
0148
0149 TextEdit {
0150 id: textArea
0151 textFormat: Qt.RichText
0152 wrapMode: TextEdit.Wrap
0153 focus: true
0154 selectByMouse: true
0155 persistentSelection: true
0156
0157 Peruse.TextDocumentEditor {
0158 id: textDocumentEditor;
0159 textDocument: textArea.textDocument;
0160 }
0161 MouseArea {
0162 acceptedButtons: Qt.RightButton
0163 anchors.fill: parent
0164 onClicked: {
0165 mainWindow.contextDrawer.open()
0166 }
0167 }
0168
0169 function ensureVisible(rectToMakeVisible)
0170 {
0171 if (root.flickable.contentX >= rectToMakeVisible.x) {
0172 root.flickable.contentX = rectToMakeVisible.x;
0173 } else if (root.flickable.contentX + root.flickable.width <= rectToMakeVisible.x + rectToMakeVisible.width) {
0174 root.flickable.contentX = rectToMakeVisible.x + rectToMakeVisible.width - root.flickable.width;
0175 }
0176 if (root.flickable.contentY >= rectToMakeVisible.y) {
0177 root.flickable.contentY = rectToMakeVisible.y;
0178 } else if (root.flickable.contentY + root.flickable.height <= rectToMakeVisible.y + rectToMakeVisible.height) {
0179 root.flickable.contentY = rectToMakeVisible.y + rectToMakeVisible.height - root.flickable.height;
0180 }
0181 }
0182 onCursorRectangleChanged: {
0183 ensureVisible(cursorRectangle);
0184 }
0185 onLinkActivated: {
0186 // This is the nastiest hack... for some reason, clicking a link does not position
0187 // the cursor where you clicked, but rather /after/ the link you clicked. Not helpful.
0188 textArea.cursorPosition = textArea.cursorPosition - 1;
0189 linkDetails.edit();
0190 }
0191 }
0192 }