Warning, /graphics/spectacle/src/Gui/MainToolBarContents.qml is written in an unsupported language. File is not indexed.

0001 /* SPDX-FileCopyrightText: 2022 Noah Davis <noahadvs@gmail.com>
0002  * SPDX-License-Identifier: LGPL-2.0-or-later
0003  */
0004 
0005 import QtQuick
0006 import QtQuick.Controls as QQC
0007 import org.kde.kirigami as Kirigami
0008 import org.kde.spectacle.private
0009 
0010 ButtonGrid {
0011     id: root
0012     property size imageSize: Qt.size(0, 0)
0013     property bool showSizeLabel: false
0014     property bool showUndoRedo: false
0015     property bool showNewScreenshotButton: true
0016     property bool showOptionsMenu: true
0017 
0018     component ToolButton: QQC.ToolButton {
0019         implicitHeight: QmlUtils.iconTextButtonHeight
0020         width: display === QQC.ToolButton.IconOnly ? height : implicitWidth
0021         focusPolicy: root.focusPolicy
0022         display: root.displayMode
0023         QQC.ToolTip.text: text
0024         QQC.ToolTip.visible: (hovered || pressed) && display === QQC.ToolButton.IconOnly
0025         QQC.ToolTip.delay: Kirigami.Units.toolTipDelay
0026     }
0027 
0028     AnimatedLoader {
0029         id: sizeLabelLoader
0030         state: root.showSizeLabel && root.imageSize.width > 0 && root.imageSize.height > 0 ?
0031             "active" : "inactive"
0032         sourceComponent: SizeLabel {
0033             height: QmlUtils.iconTextButtonHeight
0034             size: root.imageSize
0035             leftPadding: Kirigami.Units.mediumSpacing + QmlUtils.fontMetrics.descent
0036             rightPadding: leftPadding
0037         }
0038     }
0039 
0040     AnimatedLoader {
0041         state: root.showUndoRedo ? "active" : "inactive"
0042         sourceComponent: UndoRedoGroup {
0043             animationsEnabled: root.animationsEnabled
0044             buttonHeight: QmlUtils.iconTextButtonHeight
0045             focusPolicy: root.focusPolicy
0046             flow: root.flow
0047             spacing: root.spacing
0048         }
0049     }
0050 
0051     // We don't show this in video mode because the video is already automatically saved.
0052     // and you can't edit the video.
0053     ToolButton {
0054         visible: !SpectacleCore.videoMode
0055         icon.name: "document-save"
0056         text: i18n("Save")
0057         onClicked: contextWindow.save()
0058     }
0059 
0060     ToolButton {
0061         icon.name: "document-save-as"
0062         text: i18n("Save As...")
0063         onClicked: contextWindow.saveAs()
0064     }
0065 
0066     // We don't show this in video mode because you can't copy raw video to the clipboard,
0067     // or at least not elegantly.
0068     ToolButton {
0069         visible: !SpectacleCore.videoMode
0070         icon.name: "edit-copy"
0071         text: i18n("Copy")
0072         onClicked: contextWindow.copyImage()
0073     }
0074 
0075     // We only show this in video mode to save space in screenshot mode
0076     ToolButton {
0077         visible: SpectacleCore.videoMode
0078         icon.name: "edit-copy-path"
0079         text: i18n("Copy Location")
0080         onClicked: contextWindow.copyLocation()
0081     }
0082 
0083     ToolButton {
0084         // FIXME: make export menu actually work with videos
0085         visible: !SpectacleCore.videoMode
0086         icon.name: "document-share"
0087         text: i18n("Export")
0088         down: pressed || ExportMenu.visible
0089         Accessible.role: Accessible.ButtonMenu
0090         onPressed: ExportMenu.popup(this)
0091     }
0092 
0093     ToolButton {
0094         id: annotationsButton
0095         icon.name: "edit-image"
0096         text: i18n("Show Annotation Tools")
0097         visible: !SpectacleCore.videoMode
0098         checkable: true
0099         checked: contextWindow.annotating
0100         onToggled: contextWindow.annotating = checked
0101     }
0102 
0103     ToolButton {
0104         // Can't rely on checked since clicking also toggles checked
0105         readonly property bool showCancel: SpectacleCore.captureTimeRemaining > 0
0106         readonly property real cancelWidth: QmlUtils.getButtonSize(display, cancelText(Settings.captureDelay), icon.name).width
0107 
0108         function cancelText(seconds) {
0109             return i18np("Cancel (%1 second)", "Cancel (%1 seconds)", Math.ceil(seconds))
0110         }
0111 
0112         visible: root.showNewScreenshotButton
0113         checked: showCancel
0114         width: if (showCancel) {
0115             return cancelWidth
0116         } else {
0117             return display === QQC.ToolButton.IconOnly ? height : implicitWidth
0118         }
0119         icon.name: showCancel ? "dialog-cancel" : "list-add"
0120         text: showCancel ?
0121             cancelText(SpectacleCore.captureTimeRemaining / 1000)
0122             : i18n("New Screenshot")
0123         onClicked: if (showCancel) {
0124             SpectacleCore.cancelScreenshot()
0125         } else {
0126             SpectacleCore.takeNewScreenshot()
0127         }
0128     }
0129 
0130     ToolButton {
0131         visible: root.showOptionsMenu
0132         icon.name: "configure"
0133         text: i18n("Options")
0134         down: pressed || OptionsMenu.visible
0135         Accessible.role: Accessible.ButtonMenu
0136         onPressed: OptionsMenu.popup(this)
0137     }
0138     ToolButton {
0139         visible: !root.showOptionsMenu
0140         icon.name: "configure"
0141         text: i18n("Configure...")
0142         onClicked: OptionsMenu.showPreferencesDialog();
0143     }
0144 
0145     ToolButton {
0146         id: helpButton
0147         icon.name: "help-contents"
0148         text: i18n("Help")
0149         down: pressed || HelpMenu.visible
0150         Accessible.role: Accessible.ButtonMenu
0151         onPressed: HelpMenu.popup(this)
0152     }
0153 }