You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

181 lines
5.4 KiB

/*
* Copyright (C) 2007 by Ivan Cukic <ivan.cukic+kde@gmail.com>
* Copyright (C) 2009 by Ana Cecília Martins <anaceciliamb@gmail.com>
* Copyright 2013 by Sebastian Kügler <sebas@kde.org>
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU Library/Lesser General Public License
* version 2, or (at your option) any later version, as published by the
* Free Software Foundation
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details
*
* You should have received a copy of the GNU Library/Lesser General Public
* License along with this program; if not, write to the
* Free Software Foundation, Inc.,
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*/
#ifndef WIDGETEXPLORER_H
#define WIDGETEXPLORER_H
#include <QAction>
#include <QObject>
#include <QQmlParserStatus>
#include "plasmaappletitemmodel_p.h"
namespace Plasma {
class Corona;
class Containment;
class Applet;
}
class WidgetExplorerPrivate;
//We need to access the separator property that is not exported by QAction
class WidgetAction : public QAction
{
Q_OBJECT
Q_PROPERTY(bool separator READ isSeparator WRITE setSeparator NOTIFY separatorChanged)
public:
explicit WidgetAction(QObject *parent = nullptr);
WidgetAction(const QIcon &icon, const QString &text, QObject *parent);
Q_SIGNALS:
void separatorChanged();
};
class WidgetExplorer : public QObject, public QQmlParserStatus
{
Q_OBJECT
Q_INTERFACES(QQmlParserStatus)
/**
* Model that lists all applets
*/
Q_PROPERTY(QObject * widgetsModel READ widgetsModel CONSTANT)
/**
* Model that lists all applets filters and categories
*/
Q_PROPERTY(QObject * filterModel READ filterModel CONSTANT)
/**
* Whether to show special filters such as "Running" and "Uninstallable" in the filterModel.
*/
Q_PROPERTY(bool showSpecialFilters READ showSpecialFilters WRITE setShowSpecialFilters NOTIFY showSpecialFiltersChanged)
/**
* Actions for adding widgets, like download plasma widgets, download google gadgets, install from local file
*/
Q_PROPERTY(QList<QObject *> widgetsMenuActions READ widgetsMenuActions NOTIFY widgetsMenuActionsChanged)
/**
* Extra actions assigned by the shell, like switch to activity manager
*/
Q_PROPERTY(QList<QObject *> extraActions READ extraActions NOTIFY extraActionsChanged)
/**
* The application that owns the widget list. different application may show different lists
*/
Q_PROPERTY(QString application READ application WRITE setApplication NOTIFY applicationChanged)
/**
* Set the features the listed applets must provide: needed for listing alternatives
* to a particular applet
*/
Q_PROPERTY(QStringList provides READ provides WRITE setProvides NOTIFY providesChanged)
Q_PROPERTY(Plasma::Containment *containment READ containment WRITE setContainment NOTIFY containmentChanged)
public:
explicit WidgetExplorer(QObject *parent = nullptr);
~WidgetExplorer() override;
QString application();
/**
* Populates the widget list for the given application. This must be called
* before the widget explorer will be usable as the widget list will remain
* empty up to that point.
*
* @arg application the application which the widgets should be loaded for.
*/
void setApplication(const QString &application = QString());
QStringList provides() const;
void setProvides(const QStringList &provides);
/**
* Changes the current default containment to add applets to
*
* @arg containment the new default
*/
void setContainment(Plasma::Containment *containment);
/**
* @return the current default containment to add applets to
*/
Plasma::Containment *containment() const;
/**
* @return the current corona this widget is added to
*/
Plasma::Corona *corona() const;
QObject *widgetsModel() const;
QObject *filterModel() const;
bool showSpecialFilters() const;
void setShowSpecialFilters(bool show);
QList <QObject *> widgetsMenuActions();
QList <QObject *> extraActions() const;
/**
* Uninstall a plasmoid with a given plugin name. only user-installed ones are uninstallable
*/
Q_INVOKABLE void uninstall(const QString &pluginName);
void classBegin() override;
void componentComplete() override;
Q_SIGNALS:
void widgetsMenuActionsChanged();
void extraActionsChanged();
void shouldClose();
void viewChanged();
void applicationChanged();
void containmentChanged();
void providesChanged();
public Q_SLOTS:
/**
* Adds currently selected applets
*/
void addApplet(const QString &pluginName);
void openWidgetFile();
void downloadWidgets();
Q_SIGNALS:
void showSpecialFiltersChanged() const;
protected Q_SLOTS:
void immutabilityChanged(Plasma::Types::ImmutabilityType);
private:
Q_PRIVATE_SLOT(d, void appletAdded(Plasma::Applet*))
Q_PRIVATE_SLOT(d, void appletRemoved(Plasma::Applet*))
Q_PRIVATE_SLOT(d, void containmentDestroyed())
WidgetExplorerPrivate * const d;
friend class WidgetExplorerPrivate;
};
#endif // WIDGETEXPLORER_H