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.
 
 
 
 
 
 

217 lines
6.3 KiB

/***************************************************************************
* task.h *
* *
* Copyright (C) 2008 Jason Stubbs <jasonbstubbs@gmail.com> *
* *
* 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; either version 2 of the License, or *
* (at your option) any later version. *
* *
* 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, write to the *
* Free Software Foundation, Inc., *
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA . *
***************************************************************************/
#ifndef SYSTEMTRAYTASK_H
#define SYSTEMTRAYTASK_H
#include <QtCore/QObject>
#include <QtGui/QIcon>
#include <QQuickItem>
#include "debug.h"
namespace SystemTray
{
/**
* @short System tray task base class
*
* To support a new system tray protocol, Protocol and this class should
* be subclassed.
**/
class Task : public QObject
{
Q_OBJECT
Q_ENUMS(Status)
Q_ENUMS(Category)
Q_ENUMS(TaskType)
Q_PROPERTY(TaskType type READ type CONSTANT)
Q_PROPERTY(QString taskId READ taskId CONSTANT)
Q_PROPERTY(QQuickItem* taskItem READ taskItem NOTIFY taskItemChanged)
Q_PROPERTY(QQuickItem* taskItemExpanded READ taskItem NOTIFY taskItemExpandedChanged)
Q_PROPERTY(Status status READ status NOTIFY changedStatus)
Q_PROPERTY(QString name READ name NOTIFY changedName)
Q_PROPERTY(Category category READ category NOTIFY changedCategory)
Q_PROPERTY(bool expanded READ expanded WRITE setExpanded NOTIFY expandedChanged)
public:
enum Status {
UnknownStatus = 0,
Passive = 1,
Active = 2,
NeedsAttention = 3
};
enum Category {
UnknownCategory = 0,
ApplicationStatus = 1,
Communications = 2,
SystemServices = 3,
Hardware = 4
};
/**
* Derived classes should provide its type. We assume that number of different types of tasks is
* a limited value. So, it's easier to provide constants for each type of tasks than always
* try to cast classes. Moreover, these contants are used in QML code.
*/
enum TaskType {
TypePlasmoid,
TypeX11Task,
TypeStatusItem,
TypeUserDefined
};
Task(QObject *parent = 0);
virtual ~Task();
/**
* Returns whether this task can be embeddable
*
* Depending on the protocol, there may be circumstances under which
* a new widget can not be created. isEmbeddable() will return false
* under these circumstances.
**/
virtual bool isEmbeddable() const = 0;
/**
* Returns whether this task is represented as widget or it provides only information (icon, name, state, etc)
* @return true if task is represented as widget.
*/
virtual bool isWidget() const = 0;
/**
* Returns the name of this task that should be presented to the user
**/
QString name() const;
void setName(QString name);
bool shown() const;
void setShown(bool show);
/**
* Returns a unique identifier for this task
*
* The identifier is valid between restarts and so is safe to save
**/
virtual QString taskId() const = 0;
virtual QQuickItem* taskItem();
virtual QQuickItem* taskItemExpanded();
/**
* Returns an icon that can be associated with this task
*
* The icon returned is not necessarily the same icon that appears
* in the tray icon itself.
**/
virtual QIcon icon() const = 0;
/**
* @return true if this task is current being used, e.g. it has created
* widgets for one or more hosts
*/
// bool isUsed() const;
/**
* Sets the category of the task, UnknownCategory by default
* @arg category the category for this task
*/
void setCategory(Category category);
/**
* @return the category of this task
*/
Category category() const;
/**
* Sets the status of the task, UnknownStatus by default.
* @arg status the status for this task
*/
void setStatus(Status status);
/**
* @return the status for this task
*/
Status status() const;
virtual bool expanded() const;
virtual void setExpanded(bool expanded);
/**
* This function must always return type of task (an integer value). This value must always be
* the same for each call of function.
* @return a type of task.
*/
virtual TaskType type() const = 0;
Q_INVOKABLE QPointF popupPosition(QQuickItem *visualParent, int x, int y);
Q_SIGNALS:
/**
* Emitted when something about the task has changed
**/
//TODO: this should also state _what_ was changed so we can react more
// precisely (and therefore with greater efficiency)
void changed(SystemTray::Task *task);
void shownChanged();
void taskItemChanged();
void taskItemExpandedChanged();
void expandedChanged(bool expanded);
/**
* Special signal for changed status
*/
void changedStatus();
// if a category of task has been changed
void changedCategory();
// If a name of task has been changed
void changedName();
/// if visibility preference of task is changed
void changedVisibilityPreference();
/**
* Emitted when the task is about to be destroyed
**/
void destroyed(SystemTray::Task *task);
private Q_SLOTS:
void emitChanged();
private:
class Private;
Private* const d;
};
}
#endif