main: Implement PpdAction object class

This commit is contained in:
Bastien Nocera 2020-07-17 15:36:07 +02:00
parent 844b4f43f1
commit a2972329fa
2 changed files with 159 additions and 2 deletions

View file

@ -8,16 +8,160 @@
*/
#include "ppd-action.h"
#include "ppd-enums.h"
G_DEFINE_TYPE (PpdAction, ppd_action, G_TYPE_OBJECT)
typedef struct
{
char *action_name;
PpdProfile profile;
} PpdActionPrivate;
enum {
PROP_0,
PROP_ACTION_NAME,
PROP_PROFILE,
};
#define PPD_ACTION_GET_PRIVATE(o) (ppd_action_get_instance_private (o))
G_DEFINE_TYPE_WITH_PRIVATE (PpdAction, ppd_action, G_TYPE_OBJECT)
static void
ppd_action_set_property (GObject *object,
guint property_id,
const GValue *value,
GParamSpec *pspec)
{
PpdAction *action = PPD_ACTION (object);
PpdActionPrivate *priv = PPD_ACTION_GET_PRIVATE (action);
switch (property_id) {
case PROP_ACTION_NAME:
g_assert (priv->action_name == NULL);
priv->action_name = g_value_dup_string (value);
break;
case PROP_PROFILE:
priv->profile = g_value_get_enum (value);
break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID(object, property_id, pspec);
}
}
static void
ppd_action_get_property (GObject *object,
guint property_id,
GValue *value,
GParamSpec *pspec)
{
PpdAction *action = PPD_ACTION (object);
PpdActionPrivate *priv = PPD_ACTION_GET_PRIVATE (action);
switch (property_id) {
case PROP_ACTION_NAME:
g_value_set_string (value, priv->action_name);
break;
case PROP_PROFILE:
g_value_set_enum (value, priv->profile);
break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID(object, property_id, pspec);
}
}
static void
ppd_action_finalize (GObject *object)
{
PpdActionPrivate *priv;
priv = PPD_ACTION_GET_PRIVATE (PPD_ACTION (object));
g_clear_pointer (&priv->action_name, g_free);
G_OBJECT_CLASS (ppd_action_parent_class)->finalize (object);
}
static void
ppd_action_class_init (PpdActionClass *klass)
{
//FIXME define props
GObjectClass *object_class;
object_class = G_OBJECT_CLASS(klass);
object_class->finalize = ppd_action_finalize;
object_class->get_property = ppd_action_get_property;
object_class->set_property = ppd_action_set_property;
g_object_class_install_property (object_class, PROP_ACTION_NAME,
g_param_spec_string("action-name",
"Action name",
"Action name",
NULL,
G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY));
g_object_class_install_property (object_class, PROP_PROFILE,
g_param_spec_enum("profile",
"Profile",
"Profile attached to this action",
PPD_TYPE_PROFILE,
PPD_PROFILE_UNSET,
G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY));
}
static void
ppd_action_init (PpdAction *self)
{
}
gboolean
ppd_action_probe (PpdAction *action)
{
g_return_val_if_fail (PPD_IS_ACTION (action), FALSE);
if (!PPD_ACTION_GET_CLASS (action)->probe)
return TRUE;
return PPD_ACTION_GET_CLASS (action)->probe (action);
}
gboolean
ppd_action_activate (PpdAction *action,
GError **error)
{
g_return_val_if_fail (PPD_IS_ACTION (action), FALSE);
if (!PPD_ACTION_GET_CLASS (action)->activate)
return TRUE;
return PPD_ACTION_GET_CLASS (action)->activate (action, error);
}
gboolean
ppd_action_deactivate (PpdAction *action,
GError **error)
{
g_return_val_if_fail (PPD_IS_ACTION (action), FALSE);
if (!PPD_ACTION_GET_CLASS (action)->deactivate)
return TRUE;
return PPD_ACTION_GET_CLASS (action)->deactivate (action, error);
}
const char *
ppd_action_get_action_name (PpdAction *action)
{
PpdActionPrivate *priv;
g_return_val_if_fail (PPD_IS_ACTION (action), NULL);
priv = PPD_ACTION_GET_PRIVATE (action);
return priv->action_name;
}
PpdProfile
ppd_action_get_profile (PpdAction *action)
{
PpdActionPrivate *priv;
g_return_val_if_fail (PPD_IS_ACTION (action), PPD_PROFILE_BALANCED);
priv = PPD_ACTION_GET_PRIVATE (action);
return priv->profile;
}

View file

@ -10,6 +10,7 @@
#pragma once
#include <glib-object.h>
#include "ppd-profile.h"
#define PPD_TYPE_ACTION (ppd_action_get_type())
G_DECLARE_DERIVABLE_TYPE(PpdAction, ppd_action, PPD, ACTION, GObject)
@ -17,4 +18,16 @@ G_DECLARE_DERIVABLE_TYPE(PpdAction, ppd_action, PPD, ACTION, GObject)
struct _PpdActionClass
{
GObjectClass parent_class;
gboolean (* probe) (PpdAction *action);
gboolean (* activate) (PpdAction *action,
GError **error);
gboolean (* deactivate) (PpdAction *action,
GError **error);
};
gboolean ppd_action_probe (PpdAction *action);
gboolean ppd_action_activate (PpdAction *action, GError **error);
gboolean ppd_action_deactivate (PpdAction *action, GError **error);
const char *ppd_action_get_action_name (PpdAction *action);
PpdProfile ppd_action_get_profile (PpdAction *action);