]> git.alsa-project.org Git - alsa-gobject.git/commitdiff
ctl: elem_info_bool: add properties for specific information and constructor
authorTakashi Sakamoto <o-takashi@sakamocchi.jp>
Mon, 18 Nov 2019 04:22:44 +0000 (13:22 +0900)
committerTakashi Sakamoto <o-takashi@sakamocchi.jp>
Thu, 12 Dec 2019 05:29:12 +0000 (14:29 +0900)
src/ctl/alsactl.map
src/ctl/elem-info-bool.c
src/ctl/elem-info-bool.h
src/ctl/elem-info.c
src/ctl/privates.h
tests/alsactl-elem-info-bool

index cfb13c18f3e199632c6195bd77ad1fb845ae6a01..ae2a381483efb069abcbb4e3643fba5ee90cb45f 100644 (file)
@@ -33,6 +33,7 @@ ALSA_GOBJECT_0_0_0 {
     "alsactl_elem_info_get_type";
 
     "alsactl_elem_info_bool_get_type";
+    "alsactl_elem_info_bool_new";
   local:
     *;
 };
index 0a72ce037756127ab3a64e0f664fe99cded42544..ac2623f06a39c8d51f6b878aebb8fee1246a70cc 100644 (file)
@@ -1,11 +1,68 @@
 // SPDX-License-Identifier: LGPL-3.0-or-later
 #include "elem-info-bool.h"
+#include "privates.h"
 
 G_DEFINE_TYPE(ALSACtlElemInfoBool, alsactl_elem_info_bool, ALSACTL_TYPE_ELEM_INFO)
 
+enum ctl_elem_info_bool_prop_type {
+    CTL_ELEM_INFO_BOOL_PROP_VALUE_COUNT = 1,
+    CTL_ELEM_INFO_BOOL_PROP_COUNT,
+};
+static GParamSpec *ctl_elem_info_bool_props[CTL_ELEM_INFO_BOOL_PROP_COUNT] = { NULL, };
+
+static void ctl_elem_info_bool_set_property(GObject *obj, guint id,
+                                       const GValue *val, GParamSpec *spec)
+{
+    ALSACtlElemInfo *parent = ALSACTL_ELEM_INFO(obj);
+    struct snd_ctl_elem_info *info;
+
+    ctl_elem_info_refer_private(parent, &info);
+
+    switch (id) {
+    case CTL_ELEM_INFO_BOOL_PROP_VALUE_COUNT:
+        info->count = g_value_get_uint(val);
+        break;
+    default:
+        G_OBJECT_WARN_INVALID_PROPERTY_ID(obj, id, spec);
+        break;
+    }
+}
+static void ctl_elem_info_bool_get_property(GObject *obj, guint id, GValue *val,
+                                            GParamSpec *spec)
+{
+    ALSACtlElemInfo *parent = ALSACTL_ELEM_INFO(obj);
+    struct snd_ctl_elem_info *info;
+
+    ctl_elem_info_refer_private(parent, &info);
+
+    switch (id) {
+    case CTL_ELEM_INFO_BOOL_PROP_VALUE_COUNT:
+        g_value_set_uint(val, info->count);
+        break;
+    default:
+        G_OBJECT_WARN_INVALID_PROPERTY_ID(obj, id, spec);
+        break;
+    }
+}
+
+
 static void alsactl_elem_info_bool_class_init(ALSACtlElemInfoBoolClass *klass)
 {
-    return;
+    GObjectClass *gobject_class = G_OBJECT_CLASS(klass);
+
+    gobject_class->set_property = ctl_elem_info_bool_set_property;
+    gobject_class->get_property = ctl_elem_info_bool_get_property;
+
+    ctl_elem_info_bool_props[CTL_ELEM_INFO_BOOL_PROP_VALUE_COUNT] =
+        g_param_spec_uint("value-count", "value-count",
+                          "The number of members as value of this element",
+                          0, G_MAXUINT,
+                          0,
+                          G_PARAM_READWRITE);
+
+    g_object_class_install_properties(gobject_class,
+                                      CTL_ELEM_INFO_BOOL_PROP_COUNT,
+                                      ctl_elem_info_bool_props);
 }
 
 static void alsactl_elem_info_bool_init(ALSACtlElemInfoBool *self)
@@ -13,3 +70,15 @@ static void alsactl_elem_info_bool_init(ALSACtlElemInfoBool *self)
     return;
 }
 
+/**
+ * alsactl_elem_info_bool_new:
+ *
+ * Allocate and return an instance of ALSACtlElemInfoBool.
+ *
+ * Returns: (transfer full): A #ALSACtlElemInfoBool.
+ */
+ALSACtlElemInfoBool *alsactl_elem_info_bool_new()
+{
+    return g_object_new(ALSACTL_TYPE_ELEM_INFO_BOOL,
+                        "type", ALSACTL_ELEM_TYPE_BOOLEAN, NULL);
+}
index 96f26659bb0ff5abfa15ef9c8d6d8083625563c2..d79a5164732ae88a6b09c95b57fb28a8370deece 100644 (file)
@@ -44,6 +44,8 @@ struct _ALSACtlElemInfoBoolClass {
 
 GType alsactl_elem_info_bool_get_type(void) G_GNUC_CONST;
 
+ALSACtlElemInfoBool *alsactl_elem_info_bool_new();
+
 G_END_DECLS
 
 #endif
index 1dc0c7b6c2bd307567c2b7ac69a23936632d4281..79744de3401836139c38d18685f33e978d528987 100644 (file)
@@ -1,7 +1,5 @@
 // SPDX-License-Identifier: LGPL-3.0-or-later
-#include "elem-info.h"
-
-#include <sound/asound.h>
+#include "privates.h"
 
 struct _ALSACtlElemInfoPrivate {
     struct snd_ctl_elem_info info;
@@ -107,3 +105,11 @@ static void alsactl_elem_info_init(ALSACtlElemInfo *self)
 {
     return;
 }
+
+void ctl_elem_info_refer_private(ALSACtlElemInfo *self,
+                                 struct snd_ctl_elem_info **info)
+{
+    ALSACtlElemInfoPrivate *priv = alsactl_elem_info_get_instance_private(self);
+
+    *info = &priv->info;
+}
index 986c7de299f1cfd1bc3c278f8b8823b4e3681de4..48683869d9e1276e7989c0a025a2969fdd01835a 100644 (file)
@@ -9,6 +9,7 @@
 
 #include "card-info.h"
 #include "elem-id.h"
+#include "elem-info.h"
 
 #include <sound/asound.h>
 
@@ -23,6 +24,9 @@ GQuark alsactl_error_quark(void);
 void ctl_card_info_refer_private(ALSACtlCardInfo *self,
                                  struct snd_ctl_card_info **info);
 
+void ctl_elem_info_refer_private(ALSACtlElemInfo *self,
+                                 struct snd_ctl_elem_info **info);
+
 G_END_DECLS
 
 #endif
index 0493eec0ed6f4920d336217901f76110f836d5b4..c4b6cc391d7ebadf047c6670b726341a2d3f2a54 100644 (file)
@@ -10,8 +10,12 @@ gi.require_version('ALSACtl', '0.0')
 from gi.repository import ALSACtl
 
 target = ALSACtl.ElemInfoBool()
-props = ()
-methods = ()
+props = (
+    'value-count',
+)
+methods = (
+    'new',
+)
 signals = ()
 
 if not test(target, props, methods, signals):