Warning, /frameworks/knewstuff/src/qtquick/qml/Button.qml is written in an unsupported language. File is not indexed.

0001 /*
0002     SPDX-FileCopyrightText: 2019 Dan Leinir Turthra Jensen <admin@leinir.dk>
0003     SPDX-FileCopyrightText: 2023 ivan tkachenko <me@ratijas.tk>
0004 
0005     SPDX-License-Identifier: LGPL-2.1-only OR LGPL-3.0-only OR LicenseRef-KDE-Accepted-LGPL
0006 */
0007 
0008 /**
0009  * @brief A button which when clicked will open a dialog with a NewStuff.Page at the base
0010  *
0011  * This component is equivalent to the old Button
0012  * @see KNewStuff::Button
0013  * @since 5.63
0014  */
0015 
0016 import QtQuick
0017 import QtQuick.Controls as QQC2
0018 import org.kde.newstuff as NewStuff
0019 
0020 QQC2.Button {
0021     id: component
0022 
0023     /*
0024      * The configuration file is not aliased, because then we end up initialising the
0025      * Engine immediately the Button is shown, which we want to avoid (as that
0026      * is effectively a phone-home scenario, and causes internet traffic in situations
0027      * where it would not seem likely that there should be any).
0028      * If we want, in the future, to add some status display to Button (such as "there
0029      * are updates to be had" or somesuch, then we can do this, but until that choice is
0030      * made, let's not)
0031      */
0032     /**
0033      * The configuration file to use for this button
0034      */
0035     property string configFile
0036 
0037     /**
0038      * Set the text that should appear on the button. Will be set as
0039      * i18nd("knewstuff6", "Download New %1…").
0040      *
0041      * @note For the sake of consistency, you should NOT override the text property, just set this one
0042      */
0043     property string downloadNewWhat: i18ndc("knewstuff6", "Used to construct the button's label (which will become Download New 'this value'…)", "Stuff")
0044     text: i18nd("knewstuff6", "Download New %1…", downloadNewWhat)
0045 
0046     /**
0047      * The default view mode of the dialog spawned by this button. This should be
0048      * set using the NewStuff.Page.ViewMode enum
0049      * @see NewStuff.Page.ViewMode
0050      */
0051     property int viewMode: NewStuff.Page.ViewMode.Preview
0052 
0053     /**
0054      * emitted when the Hot New Stuff dialog is about to be shown, usually
0055      * as a result of the user having click on the button
0056      */
0057     signal aboutToShowDialog();
0058 
0059     /**
0060      * The engine which handles the content in this Button
0061      */
0062     property QtObject engine: null
0063 
0064     /**
0065      * This forwards the entryEvent from the QtQuick engine
0066      * @see Engine::entryEvent
0067      * @since 5.82
0068      */
0069     signal entryEvent(var entry, int event)
0070 
0071     property Connections engineConnections: Connections {
0072         target: component.engine
0073         function onEntryEvent(entry, event) {
0074             component.entryEvent(entry, event);
0075         }
0076     }
0077 
0078     /**
0079      * If this is true (default is false), the button will be shown when the Kiosk settings are such
0080      * that Get Hot New Stuff is disallowed (and any other time enabled is set to false).
0081      * Usually you would want to leave this alone, but occasionally you may have a reason to
0082      * leave a button in place that the user is unable to enable.
0083      */
0084     property bool visibleWhenDisabled: false
0085 
0086     /**
0087      * @internal The NewStuff dialog that is opened by the button.
0088      * Use showDialog() to create and open the dialog.
0089      */
0090     property NewStuff.Dialog __ghnsDialog: null
0091 
0092     /**
0093      * Show the dialog (same as clicking the button), if allowed by the Kiosk settings
0094      */
0095     function showDialog() {
0096         if (!NewStuff.Settings.allowedByKiosk) {
0097             // make some noise, because silently doing nothing is a bit annoying
0098             console.warn("Not allowed by Kiosk");
0099             return;
0100         }
0101         component.aboutToShowDialog();
0102         // Use this function to open the dialog. It seems roundabout, but this ensures
0103         // that the dialog is not constructed until we want it to be shown the first time,
0104         // since it will initialise itself/compile itself when using Loader on the first
0105         // load and we don't want that until the user explicitly asks for it.
0106         if (component.__ghnsDialog === null) {
0107             const dialogComponent = Qt.createComponent("Dialog.qml");
0108             component.__ghnsDialog = dialogComponent.createObject(component, {
0109                 "configFile": Qt.binding(() => component.configFile),
0110                 "viewMode": Qt.binding(() => component.viewMode),
0111             });
0112             dialogComponent.destroy();
0113         }
0114         component.__ghnsDialog.open();
0115         component.engine = component.__ghnsDialog.engine;
0116     }
0117 
0118     onClicked: showDialog()
0119 
0120     icon.name: "get-hot-new-stuff"
0121     visible: enabled || visibleWhenDisabled
0122     enabled: NewStuff.Settings.allowedByKiosk
0123     onEnabledChanged: {
0124         // If the user resets this when kiosk has disallowed ghns, force enabled back to false
0125         if (enabled && !NewStuff.Settings.allowedByKiosk) {
0126             enabled = false;
0127         }
0128     }
0129 }