/*
* Copyright 2014 Canonical Ltd.
*
* This program is free software: you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 3, 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 warranties of
* MERCHANTABILITY, SATISFACTORY QUALITY, 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 .
*
* Authors:
* Charles Kerr
*/
#ifndef INDICATOR_DISPLAY_INDICATOR_H
#define INDICATOR_DISPLAY_INDICATOR_H
#include
#include // GIcon
#include
#include
struct Header
{
bool is_visible = false;
std::string title;
std::string label;
std::string a11y;
std::shared_ptr icon;
bool operator== (const Header& that) const {
return (is_visible == that.is_visible) &&
(title == that.title) &&
(label == that.label) &&
(a11y == that.a11y) &&
(icon == that.icon);
}
bool operator!= (const Header& that) const { return !(*this == that);}
};
class Profile
{
public:
virtual std::string name() const =0;
virtual const core::Property& header() const =0;
virtual std::shared_ptr menu_model() const =0;
protected:
Profile() =default;
};
class SimpleProfile: public Profile
{
public:
SimpleProfile(const char* name, const std::shared_ptr& menu): m_name(name), m_menu(menu) {}
std::string name() const {return m_name;}
core::Property& header() {return m_header;}
const core::Property& header() const {return m_header;}
std::shared_ptr menu_model() const {return m_menu;}
protected:
const std::string m_name;
core::Property m_header;
std::shared_ptr m_menu;
};
class Indicator
{
public:
virtual ~Indicator() =default;
virtual const char* name() const =0;
virtual GSimpleActionGroup* action_group() const =0;
virtual std::vector> profiles() const =0;
};
#endif