Warning, /graphics/peruse/src/creator/qml/Book.qml is written in an unsupported language. File is not indexed.

0001 /*
0002  * Copyright (C) 2015 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 that deals with editing the book.
0031  * 
0032  * This is primarily a list of pages that can be moved around. These are inside
0033  * Kirigami ListSwipeItems.
0034  * 
0035  * This also has a button to add pages, which calls up AddPageSheet.
0036  * And a button to edit the book metadata, which calls up BookMetainfoPage.
0037  */
0038 Kirigami.ScrollablePage {
0039     id: root;
0040     property string categoryName: "book";
0041     property alias model: bookList.model;
0042     title: i18nc("title of the main book editor page", "Pages in %1", root.model && root.model.title !== "" ? root.model.title : "");
0043 
0044     actions {
0045         main: addPageSheet.opened ? closeAddPageSheetAction : saveBookAction;
0046         right: addPageSheet.opened ? null : addPageAction;
0047     }
0048     Kirigami.Action {
0049         id: saveBookAction;
0050         text: i18nc("Saves the book to a file on disk", "Save Book");
0051         iconName: "document-save";
0052         onTriggered: root.model.saveBook();
0053         enabled: root.model ? root.model.hasUnsavedChanges : false;
0054     }
0055     Kirigami.Action {
0056         id: addPageAction;
0057         text: i18nc("adds a new page at the end of the book", "Add Page");
0058         iconName: "list-add";
0059         onTriggered: addPage(root.model.pageCount);
0060     }
0061     Kirigami.Action {
0062         id: closeAddPageSheetAction;
0063         text: i18nc("closes the add page sheet", "Do not Add a Page");
0064         iconName: "dialog-cancel";
0065         onTriggered: addPageSheet.close();
0066     }
0067 
0068     function addPage(afterWhatIndex) {
0069         addPageSheet.addPageAfter = afterWhatIndex;
0070         addPageSheet.open();
0071     }
0072 
0073     ListView {
0074         id: bookList;
0075         Component {
0076             id: editBookPage;
0077             BookPage {
0078                 model: root.model;
0079                 onSave: {
0080                    bookList.updateTitle(index, currentPage.title(""));
0081                 }
0082             }
0083         }
0084         function updateTitle(index, title) {
0085             //Need to add feature to update data here.
0086         }
0087 
0088         delegate: Kirigami.SwipeListItem {
0089             id: listItem;
0090             height: Kirigami.Units.iconSizes.huge + Kirigami.Units.smallSpacing * 2;
0091             supportsMouseEvents: true;
0092             onClicked: ;
0093             actions: [
0094                 Kirigami.Action {
0095                     text: i18nc("swap the position of this page with the previous one", "Move Up");
0096                     iconName: "go-up"
0097                     onTriggered: { root.model.swapPages(model.index, model.index - 1); }
0098                     enabled: model.index > 0;
0099                     visible: enabled;
0100                 },
0101                 Kirigami.Action {
0102                     text: i18nc("swap the position of this page with the next one", "Move Down");
0103                     iconName: "go-down"
0104                     onTriggered: { root.model.swapPages(model.index, model.index + 1); }
0105                     enabled: model.index < root.model.pageCount - 1;
0106                     visible: enabled;
0107                 },
0108                 Kirigami.Action {
0109                     text: i18nc("remove the page from the book", "Delete Page");
0110                     iconName: "list-remove"
0111                     onTriggered: root.model.removePage(model.index);
0112                 },
0113                 Kirigami.Action {
0114                     text: i18nc("add a page to the book after this one", "Add Page After This");
0115                     iconName: "list-add"
0116                     onTriggered: root.addPage(model.index);
0117                 },
0118                 Kirigami.Action {
0119                     text: i18nc("Edit page data such as title, frames, etc.", "Edit Page");
0120                     iconName: "document-edit";
0121                     onTriggered: {
0122                         pageStack.push(editBookPage, { index: model.index, pageUrl: model.url })
0123                     }
0124                 }
0125 
0126             ]
0127             contentItem: RowLayout {
0128                 Layout.fillWidth: true;
0129                 Layout.fillHeight: true;
0130                 Item {
0131                     id: bookCover;
0132                     Layout.fillHeight: true;
0133                     Layout.minimumWidth: height;
0134                     Layout.maximumWidth: height;
0135                     Image {
0136                         id: coverImage;
0137                         anchors {
0138                             fill: parent;
0139                             margins: Kirigami.Units.smallSpacing;
0140                         }
0141                         asynchronous: true;
0142                         fillMode: Image.PreserveAspectFit;
0143                         source: model.url;
0144                     }
0145                 }
0146                 QtControls.Label {
0147                     Layout.fillWidth: true;
0148                     Layout.fillHeight: true;
0149                     text: model.title;
0150                 }
0151             }
0152         }
0153         Rectangle {
0154             id: processingBackground;
0155             anchors.fill: parent;
0156             opacity: root.model && root.model.processing ? 0.5 : 0;
0157             Behavior on opacity { NumberAnimation { duration: mainWindow.animationDuration; } }
0158             MouseArea {
0159                 anchors.fill: parent;
0160                 enabled: parent.opacity > 0;
0161                 onClicked: { }
0162             }
0163             Kirigami.PlaceholderMessage {
0164                 anchors.centerIn: parent
0165                 width: parent.width - (Kirigami.Units.largeSpacing * 4)
0166                 text: root.model ? root.model.processingDescription : "";
0167             }
0168         }
0169         QtControls.BusyIndicator {
0170             anchors {
0171                 horizontalCenter: processingBackground.horizontalCenter;
0172                 top: parent.top
0173                 topMargin: x;
0174             }
0175             running: processingBackground.opacity > 0;
0176             visible: running;
0177         }
0178     }
0179 
0180     AddPageSheet {
0181         id: addPageSheet;
0182         model: root.model ? root.model : null;
0183     }
0184 }