]> git.alsa-project.org Git - alsa-gobject.git/commitdiff
ctl: elem_value: add properties and constructor
authorTakashi Sakamoto <o-takashi@sakamocchi.jp>
Fri, 29 Nov 2019 06:42:21 +0000 (15:42 +0900)
committerTakashi Sakamoto <o-takashi@sakamocchi.jp>
Thu, 12 Dec 2019 05:29:12 +0000 (14:29 +0900)
src/ctl/elem-value.c
src/ctl/elem-value.h
tests/alsactl-elem-value

index edf5df65977976e245dc0fca29015b70c2bda861..dcd5455661d6b5cc12c6fb099767a4b0762d02ca 100644 (file)
@@ -1,14 +1,67 @@
 // SPDX-License-Identifier: LGPL-3.0-or-later
 #include "elem-value.h"
 
-G_DEFINE_TYPE(ALSACtlElemValue, alsactl_elem_value, G_TYPE_OBJECT)
+#include <sound/asound.h>
+
+struct _ALSACtlElemValuePrivate {
+    struct snd_ctl_elem_value value;
+};
+G_DEFINE_TYPE_WITH_PRIVATE(ALSACtlElemValue, alsactl_elem_value, G_TYPE_OBJECT)
+
+enum ctl_elem_value_prop_type {
+    CTL_ELEM_VALUE_PROP_ELEM_ID = 1,
+    CTL_ELEM_VALUE_PROP_COUNT,
+};
+static GParamSpec *ctl_elem_value_props[CTL_ELEM_VALUE_PROP_COUNT] = { NULL, };
+
+static void ctl_elem_value_get_property(GObject *obj, guint id, GValue *val,
+                                        GParamSpec *spec)
+{
+    ALSACtlElemValue *self = ALSACTL_ELEM_VALUE(obj);
+    ALSACtlElemValuePrivate *priv =
+                                alsactl_elem_value_get_instance_private(self);
+
+    switch (id) {
+    case CTL_ELEM_VALUE_PROP_ELEM_ID:
+    {
+        g_value_set_static_boxed(val, (const ALSACtlElemId *)&priv->value.id);
+        break;
+    }
+    default:
+        G_OBJECT_WARN_INVALID_PROPERTY_ID(obj, id, spec);
+        break;
+    }
+}
 
 static void alsactl_elem_value_class_init(ALSACtlElemValueClass *klass)
 {
-    return;
+    GObjectClass *gobject_class = G_OBJECT_CLASS(klass);
+
+    gobject_class->get_property = ctl_elem_value_get_property;
+
+    ctl_elem_value_props[CTL_ELEM_VALUE_PROP_ELEM_ID] =
+        g_param_spec_boxed("elem-id", "elem-id",
+                           "The identifier of element",
+                           ALSACTL_TYPE_ELEM_ID,
+                           G_PARAM_READABLE);
+
+    g_object_class_install_properties(gobject_class, CTL_ELEM_VALUE_PROP_COUNT,
+                                      ctl_elem_value_props);
 }
 
 static void alsactl_elem_value_init(ALSACtlElemValue *self)
 {
     return;
 }
+
+/**
+ * alsactl_elem_value_new:
+ *
+ * Allocate and return an instance of ALSACtlElemValue.
+ *
+ * Returns: (transfer full): A #ALSACtlElemValue.
+ */
+ALSACtlElemValue *alsactl_elem_value_new()
+{
+    return g_object_new(ALSACTL_TYPE_ELEM_VALUE, NULL);
+}
index d89b9ce8bb1726a24b5ba9c05727b78e0d7f5b48..c31efb70a8f520fb04ac645926312fb4c1a8b7da 100644 (file)
@@ -5,6 +5,8 @@
 #include <glib.h>
 #include <glib-object.h>
 
+#include <ctl/elem-id.h>
+
 G_BEGIN_DECLS
 
 #define ALSACTL_TYPE_ELEM_VALUE     (alsactl_elem_value_get_type())
@@ -31,9 +33,12 @@ G_BEGIN_DECLS
 
 typedef struct _ALSACtlElemValue         ALSACtlElemValue;
 typedef struct _ALSACtlElemValueClass    ALSACtlElemValueClass;
+typedef struct _ALSACtlElemValuePrivate  ALSACtlElemValuePrivate;
 
 struct _ALSACtlElemValue {
     GObject parent_instance;
+
+    ALSACtlElemValuePrivate *priv;
 };
 
 struct _ALSACtlElemValueClass {
@@ -42,6 +47,8 @@ struct _ALSACtlElemValueClass {
 
 GType alsactl_elem_value_get_type() G_GNUC_CONST;
 
+ALSACtlElemValue *alsactl_elem_value_new();
+
 G_END_DECLS
 
 #endif
index 50d06db66b5ab777a51e46e8cac440adb80e121f..7e5675bd58c3388feee55f0ce3040320849a22ae 100644 (file)
@@ -10,7 +10,9 @@ gi.require_version('ALSACtl', '0.0')
 from gi.repository import ALSACtl
 
 target = ALSACtl.ElemValue()
-props = ()
+props = (
+    'elem-id',
+)
 methods = ()
 signals = ()