pragma ComponentBehavior: Bound import QtQuick import QtCore import QtQuick.Controls as Controls import QtQuick.Layouts import org.kde.kirigami as Kirigami import org.kde.kirigamiaddons.formcard as FormCard import org.deprecated.kodereviewer 1.0 Kirigami.ApplicationWindow { id: root title: qsTr("Kode Reviewer") minimumWidth: Kirigami.Units.gridUnit * 20 //minimumHeight: Kirigami.Units.gridUnit * 20 width: minimumWidth height: minimumHeight signal projectSelected() property Project project property bool isProjectSelected: false property NetworkManager connection: NetworkManager { project: root.project } property PullRequest pullRequest Settings { id: settings property alias width: root.width property alias height: root.height property string githubToken: "" } pageStack.initialPage: initPage property list commonActions: [ Kirigami.Action { id: reviewChangesAction text: "Review changes" icon.name: "preview-symbolic" enabled: !!root.pullRequest onTriggered: reviewChangesDialog.open() } ] ReviewDialog { id: reviewChangesDialog onAccepted: { root.connection.createReview( root.pullRequest.number, root.pullRequest.last_commit, reviewBodyText, event ) clearForm() } } Component { id: initPage WelcomePage { onProjectSelected: project => { root.project = project root.projectSelected() } } } Loader { id: treeFileModelLoader active: !!pullRequest property var pullRequest: root.pullRequest sourceComponent: TreeFileModel { pullRequest: treeFileModelLoader.pullRequest } onPullRequestChanged: { if (pullRequest) root.connection.getFiles(pullRequest.number) } } contextDrawer: FilesDrawer { id: contextDrawer enabled: treeFileModelLoader.active model: treeFileModelLoader.item } Loader { id: projectListPageLoader active: root.isProjectSelected sourceComponent: Component { ProjectListPage { connection: root.connection project: root.project onPullRequestSelected: number => { const pullRequest = project.pullRequest(number) root.pullRequest = pullRequest treeFileModelLoader.pullRequest = pullRequest } } } } Kirigami.PagePool { id: pagePool } Loader { id: commentsPageLoader active: root.isProjectSelected sourceComponent: CommentPage { connection: root.connection pullRequest: root.pullRequest } } Loader { id: pullRequestPageLoader active: root.isProjectSelected sourceComponent: PullRequestDescriptionPage { connection: root.connection pullRequest: root.pullRequest } } Loader { id: reviewListPageLoader active: root.isProjectSelected sourceComponent: ReviewListPage { connection: root.connection pullRequest: root.pullRequest } } Loader { id: filesChangedPageLoader active: root.isProjectSelected sourceComponent: FilesChangedPage { connection: root.connection pullRequest: root.pullRequest } } onProjectSelected: { navigationFooter.visible = true root.isProjectSelected = true pageStack.replace(projectListPageLoader.item) pageStack.push(pullRequestPageLoader.item) } footer: Kirigami.NavigationTabBar { id: navigationFooter visible: false actions: [ Kirigami.Action { icon.name: "info" text: i18n("Info") onTriggered: { root.pageStack.pop() root.pageStack.push(pullRequestPageLoader.item) } }, Kirigami.Action { icon.name: "comment-symbolic" text: i18n("Comments") onTriggered: { root.pageStack.pop() root.pageStack.push(commentsPageLoader.item) } }, Kirigami.Action { icon.name: "file-catalog-symbolic" text: i18n("Files") onTriggered: { root.pageStack.pop() root.pageStack.push(filesChangedPageLoader.item) } }, Kirigami.Action { icon.name: "document-preview-symbolic" text: i18n("Reviews") onTriggered: { root.pageStack.pop() root.pageStack.push(reviewListPageLoader.item) } } ] } }