plasma-framework/src/plasmaquick/appletquickitem.h
2021-03-13 17:35:34 +00:00

173 lines
5.8 KiB
C++

/*
SPDX-FileCopyrightText: 2014 Marco Martin <mart@kde.org>
SPDX-License-Identifier: LGPL-2.0-or-later
*/
#ifndef APPLETQUICKITEM_H
#define APPLETQUICKITEM_H
#include <QQmlComponent>
#include <QQmlEngine>
#include <QQuickItem>
#include <QTimer>
#include <Plasma/Package>
#include <plasmaquick/plasmaquick_export.h>
//
// W A R N I N G
// -------------
//
// This file is not part of the public Plasma API. It exists purely as an
// implementation detail. This header file may change from version to
// version without notice, or even be removed.
//
// We mean it.
//
namespace Plasma
{
class Applet;
}
namespace KDeclarative
{
class QmlObject;
}
namespace PlasmaQuick
{
class AppletQuickItemPrivate;
class PLASMAQUICK_EXPORT AppletQuickItem : public QQuickItem
{
Q_OBJECT
Q_PROPERTY(int switchWidth READ switchWidth WRITE setSwitchWidth NOTIFY switchWidthChanged)
Q_PROPERTY(int switchHeight READ switchHeight WRITE setSwitchHeight NOTIFY switchHeightChanged)
Q_PROPERTY(QQmlComponent *compactRepresentation READ compactRepresentation WRITE setCompactRepresentation NOTIFY compactRepresentationChanged)
Q_PROPERTY(QQuickItem *compactRepresentationItem READ compactRepresentationItem NOTIFY compactRepresentationItemChanged)
Q_PROPERTY(QQmlComponent *fullRepresentation READ fullRepresentation WRITE setFullRepresentation NOTIFY fullRepresentationChanged)
Q_PROPERTY(QQuickItem *fullRepresentationItem READ fullRepresentationItem NOTIFY fullRepresentationItemChanged)
/**
* this is supposed to be either one between compactRepresentation or fullRepresentation
*/
Q_PROPERTY(QQmlComponent *preferredRepresentation READ preferredRepresentation WRITE setPreferredRepresentation NOTIFY preferredRepresentationChanged)
/**
* True when the applet is showing its full representation. either as the main only view, or in a popup.
* Setting it will open or close the popup if the plasmoid is iconified, however it won't have effect if the applet is open
*/
Q_PROPERTY(bool expanded WRITE setExpanded READ isExpanded NOTIFY expandedChanged)
/**
* True when the applet wants the activation signal act in toggle mode, i.e. while being expanded
* the signal shrinks the applet to its not expanded state instead of reexpanding it.
*/
Q_PROPERTY(bool activationTogglesExpanded WRITE setActivationTogglesExpanded READ isActivationTogglesExpanded NOTIFY activationTogglesExpandedChanged)
/**
* the applet root QML item: sometimes is the same as fullRepresentationItem
* if a fullrepresentation was not declared explicitly
*/
Q_PROPERTY(QObject *rootItem READ rootItem CONSTANT)
public:
AppletQuickItem(Plasma::Applet *applet, QQuickItem *parent = nullptr);
~AppletQuickItem() override;
////API NOT SUPPOSED TO BE USED BY QML
Plasma::Applet *applet() const;
// Make the constructor lighter and delay the actual instantiation of the qml in the applet
virtual void init();
#if PLASMAQUICK_ENABLE_DEPRECATED_SINCE(5, 36)
PLASMAQUICK_DEPRECATED_VERSION(5, 36, "No longer use")
Plasma::Package appletPackage() const;
PLASMAQUICK_DEPRECATED_VERSION(5, 36, "No longer use")
void setAppletPackage(const Plasma::Package &package);
PLASMAQUICK_DEPRECATED_VERSION(5, 36, "No longer use")
Plasma::Package coronaPackage() const;
PLASMAQUICK_DEPRECATED_VERSION(5, 36, "No longer use")
void setCoronaPackage(const Plasma::Package &package);
#endif
QQuickItem *compactRepresentationItem();
QQuickItem *fullRepresentationItem();
QObject *rootItem();
QObject *testItem();
////PROPERTY ACCESSORS
int switchWidth() const;
void setSwitchWidth(int width);
int switchHeight() const;
void setSwitchHeight(int width);
QQmlComponent *compactRepresentation();
void setCompactRepresentation(QQmlComponent *component);
QQmlComponent *fullRepresentation();
void setFullRepresentation(QQmlComponent *component);
QQmlComponent *preferredRepresentation();
void setPreferredRepresentation(QQmlComponent *component);
bool isExpanded() const;
void setExpanded(bool expanded);
bool isActivationTogglesExpanded() const;
void setActivationTogglesExpanded(bool activationTogglesExpanded);
////NEEDED BY QML TO CREATE ATTACHED PROPERTIES
static AppletQuickItem *qmlAttachedProperties(QObject *object);
Q_SIGNALS:
// Property signals
void switchWidthChanged(int width);
void switchHeightChanged(int height);
void expandedChanged(bool expanded);
void activationTogglesExpandedChanged(bool activationTogglesExpanded);
void compactRepresentationChanged(QQmlComponent *compactRepresentation);
void fullRepresentationChanged(QQmlComponent *fullRepresentation);
void preferredRepresentationChanged(QQmlComponent *preferredRepresentation);
void compactRepresentationItemChanged(QObject *compactRepresentationItem);
void fullRepresentationItemChanged(QObject *fullRepresentationItem);
protected:
KDeclarative::QmlObject *qmlObject();
// Reimplementation
void childEvent(QChildEvent *event) override;
void geometryChanged(const QRectF &newGeometry, const QRectF &oldGeometry) override;
void itemChange(ItemChange change, const ItemChangeData &value) override;
private:
AppletQuickItemPrivate *const d;
Q_PRIVATE_SLOT(d, void minimumWidthChanged())
Q_PRIVATE_SLOT(d, void minimumHeightChanged())
Q_PRIVATE_SLOT(d, void preferredWidthChanged())
Q_PRIVATE_SLOT(d, void preferredHeightChanged())
Q_PRIVATE_SLOT(d, void maximumWidthChanged())
Q_PRIVATE_SLOT(d, void maximumHeightChanged())
Q_PRIVATE_SLOT(d, void fillWidthChanged())
Q_PRIVATE_SLOT(d, void fillHeightChanged())
};
}
QML_DECLARE_TYPEINFO(PlasmaQuick::AppletQuickItem, QML_HAS_ATTACHED_PROPERTIES)
#endif