File indexing completed on 2024-04-28 16:52:24

0001 /*
0002  *  SPDX-FileCopyrightText: 2015 Marco Martin <mart@kde.org>
0003  *  SPDX-FileCopyrightText: 2021-2022 Devin Lin <devin@kde.org>
0004  *
0005  *  SPDX-License-Identifier: GPL-2.0-or-later
0006  */
0007 
0008 #pragma once
0009 
0010 #include <QObject>
0011 #include <QQuickItem>
0012 
0013 #include <KConfigWatcher>
0014 #include <KIO/ApplicationLauncherJob>
0015 #include <KSharedConfig>
0016 
0017 /**
0018  * Miscellaneous class to put utility functions used in the shell.
0019  *
0020  * @author Devin Lin <devin@kde.org>
0021  **/
0022 class ShellUtil : public QObject
0023 {
0024     Q_OBJECT
0025     Q_PROPERTY(bool isSystem24HourFormat READ isSystem24HourFormat NOTIFY isSystem24HourFormatChanged)
0026 
0027 public:
0028     ShellUtil(QObject *parent = nullptr);
0029     static ShellUtil *instance();
0030 
0031     /**
0032      * Change the stacking order to have the first item behind the second item.
0033      *
0034      * @param item1 The item to move behind.
0035      * @param item2 The item to move in front.
0036      */
0037     Q_INVOKABLE void stackItemBefore(QQuickItem *item1, QQuickItem *item2);
0038 
0039     /**
0040      * Change the stacking order to have the first item in front of the second item.
0041      *
0042      * @param item1 The item to move in front.
0043      * @param item2 The item to move behind.
0044      */
0045     Q_INVOKABLE void stackItemAfter(QQuickItem *item1, QQuickItem *item2);
0046 
0047     /**
0048      * Execute the command given.
0049      *
0050      * @param command The command to execute.
0051      */
0052     Q_INVOKABLE void executeCommand(const QString &command);
0053 
0054     /**
0055      * Launch an application by name. Sets the internal "launched app" state.
0056      *
0057      * @param storageId The storage id of the application to launch.
0058      */
0059     Q_INVOKABLE void launchApp(const QString &storageId);
0060 
0061     /**
0062      * Whether the system is using 24 hour format.
0063      */
0064     Q_INVOKABLE bool isSystem24HourFormat();
0065 
0066 Q_SIGNALS:
0067     void isSystem24HourFormatChanged();
0068 
0069 private:
0070     KConfigWatcher::Ptr m_localeConfigWatcher;
0071     KSharedConfig::Ptr m_localeConfig;
0072 };