/* * Copyright (C) 2013 Canonical, Ltd. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; version 3. * * 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 General Public License * along with this program. If not, see . */ #ifndef APPLICATION_H #define APPLICATION_H #include #include class QQuickItem; // unity-api #include // A pretty dumb file. Just a container for properties. // Implemented in C++ instead of QML just because of the enumerations // See QTBUG-14861 using namespace unity::shell::application; class ApplicationInfo : public ApplicationInfoInterface { Q_OBJECT Q_PROPERTY(bool fullscreen READ fullscreen WRITE setFullscreen NOTIFY fullscreenChanged) Q_PROPERTY(Stage stage READ stage WRITE setStage NOTIFY stageChanged) // Only exists in this fake implementation // QML component used to represent its image/screenhot Q_PROPERTY(QString imageQml READ imageQml WRITE setImageQml NOTIFY imageQmlChanged) // QML component used to represent the application window Q_PROPERTY(QString windowQml READ windowQml WRITE setWindowQml NOTIFY windowQmlChanged) public: ApplicationInfo(QObject *parent = NULL); ApplicationInfo(const QString &appId, QObject *parent = NULL); #define IMPLEMENT_PROPERTY(name, Name, type) \ public: \ type name() const { return m_##name; } \ void set##Name(const type& value) \ { \ if (m_##name != value) { \ m_##name = value; \ Q_EMIT name##Changed(); \ } \ } \ Q_SIGNALS: \ void name##Changed(); \ private: \ type m_##name; IMPLEMENT_PROPERTY(appId, AppId, QString) IMPLEMENT_PROPERTY(name, Name, QString) IMPLEMENT_PROPERTY(comment, Comment, QString) IMPLEMENT_PROPERTY(icon, Icon, QUrl) IMPLEMENT_PROPERTY(stage, Stage, Stage) IMPLEMENT_PROPERTY(state, State, State) IMPLEMENT_PROPERTY(focused, Focused, bool) IMPLEMENT_PROPERTY(fullscreen, Fullscreen, bool) IMPLEMENT_PROPERTY(imageQml, ImageQml, QString) IMPLEMENT_PROPERTY(windowQml, WindowQml, QString) #undef IMPLEMENT_PROPERTY public: void showWindow(QQuickItem *parent); void hideWindow(); private Q_SLOTS: void onWindowComponentStatusChanged(QQmlComponent::Status status); private: void createWindowItem(); void doCreateWindowItem(); void createWindowComponent(); QQuickItem *m_windowItem; QQmlComponent *m_windowComponent; QQuickItem *m_parentItem; }; Q_DECLARE_METATYPE(ApplicationInfo*) #endif // APPLICATION_H