]> git.alsa-project.org Git - alsa-gobject.git/commitdiff
ctl: elem_info_int: add properties for type-dependent parameters 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-int.c
src/ctl/elem-info-int.h
tests/alsactl-elem-info-int

index f828f0970c573efe53676a64078144f91ed21245..cd24eedde43c098774518003c417d446f58a9a6a 100644 (file)
@@ -36,6 +36,7 @@ ALSA_GOBJECT_0_0_0 {
     "alsactl_elem_info_bool_new";
 
     "alsactl_elem_info_int_get_type";
+    "alsactl_elem_info_int_new";
   local:
     *;
 };
index 64ac57019d83f7e99e6f088ad96f5d6bfdc6448f..2bdfe36dcf8faf0d143572de19cccfabece32e0d 100644 (file)
 // SPDX-License-Identifier: LGPL-3.0-or-later
 #include "elem-info-int.h"
+#include "privates.h"
 
 G_DEFINE_TYPE(ALSACtlElemInfoInt, alsactl_elem_info_int, ALSACTL_TYPE_ELEM_INFO)
 
+enum ctl_elem_info_int_prop_type {
+    CTL_ELEM_INFO_INT_PROP_VALUE_COUNT = 1,
+    CTL_ELEM_INFO_INT_PROP_MIN,
+    CTL_ELEM_INFO_INT_PROP_MAX,
+    CTL_ELEM_INFO_INT_PROP_STEP,
+    CTL_ELEM_INFO_INT_PROP_COUNT,
+};
+static GParamSpec *ctl_elem_info_int_props[CTL_ELEM_INFO_INT_PROP_COUNT] = { NULL, };
+
+static void ctl_elem_info_int_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_INT_PROP_VALUE_COUNT:
+        info->count = g_value_get_uint(val);
+        break;
+    case CTL_ELEM_INFO_INT_PROP_MIN:
+        info->value.integer.min = (long)g_value_get_int(val);
+        break;
+    case CTL_ELEM_INFO_INT_PROP_MAX:
+        info->value.integer.min = (long)g_value_get_int(val);
+        break;
+    case CTL_ELEM_INFO_INT_PROP_STEP:
+        info->value.integer.min = (long)g_value_get_int(val);
+        break;
+    default:
+        G_OBJECT_WARN_INVALID_PROPERTY_ID(obj, id, spec);
+        break;
+    }
+}
+
+static void ctl_elem_info_int_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_INT_PROP_VALUE_COUNT:
+        g_value_set_uint(val, info->count);
+        break;
+    case CTL_ELEM_INFO_INT_PROP_MIN:
+        g_value_set_int(val, (int)info->value.integer.min);
+        break;
+    case CTL_ELEM_INFO_INT_PROP_MAX:
+        g_value_set_int(val, (int)info->value.integer.max);
+        break;
+    case CTL_ELEM_INFO_INT_PROP_STEP:
+        g_value_set_int(val, (int)info->value.integer.step);
+        break;
+    default:
+        G_OBJECT_WARN_INVALID_PROPERTY_ID(obj, id, spec);
+        break;
+    }
+}
+
 static void alsactl_elem_info_int_class_init(ALSACtlElemInfoIntClass *klass)
 {
-    return;
+    GObjectClass *gobject_class = G_OBJECT_CLASS(klass);
+
+    gobject_class->set_property = ctl_elem_info_int_set_property;
+    gobject_class->get_property = ctl_elem_info_int_get_property;
+
+    ctl_elem_info_int_props[CTL_ELEM_INFO_INT_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);
+
+    ctl_elem_info_int_props[CTL_ELEM_INFO_INT_PROP_MIN] =
+        g_param_spec_int("min", "min",
+                         "The minimum value for data of this element",
+                         G_MININT, G_MAXINT,
+                         0,
+                         G_PARAM_READWRITE);
+
+    ctl_elem_info_int_props[CTL_ELEM_INFO_INT_PROP_MAX] =
+        g_param_spec_int("max", "max",
+                         "The maximum value for data of this element",
+                         G_MININT, G_MAXINT,
+                         0,
+                         G_PARAM_READWRITE);
+
+    ctl_elem_info_int_props[CTL_ELEM_INFO_INT_PROP_STEP] =
+        g_param_spec_int("step", "step",
+                         "The gap of value for data of this element",
+                         G_MININT, G_MAXINT,
+                         0,
+                         G_PARAM_READWRITE);
+
+    g_object_class_install_properties(gobject_class,
+                        CTL_ELEM_INFO_INT_PROP_COUNT, ctl_elem_info_int_props);
 }
 
 static void alsactl_elem_info_int_init(ALSACtlElemInfoInt *self)
 {
     return;
 }
+
+/**
+ * alsactl_elem_info_int:
+ *
+ * Allocate and return an instance of ALSACtlElemInfoInt.
+ *
+ * Returns: (transfer full): A #ALSACtlElemInfoInt.
+ */
+ALSACtlElemInfoInt *alsactl_elem_info_int_new()
+{
+    return g_object_new(ALSACTL_TYPE_ELEM_INFO_INT,
+                        "type", ALSACTL_ELEM_TYPE_INTEGER, NULL);
+}
index 433fabdbd8480800dd83f10a73725e9d9aaf443b..6f8df9a54d3581387b3f7e275cc38b2e3e7a5e85 100644 (file)
@@ -42,6 +42,8 @@ struct _ALSACtlElemInfoIntClass {
 
 GType alsactl_elem_info_int_get_type(void) G_GNUC_CONST;
 
+ALSACtlElemInfoInt *alsactl_elem_info_int_new();
+
 G_END_DECLS
 
 #endif
index 168e2e92d7ac4e78d43aa709e26f4b8e80a79cbd..111d8581ed7033c0e783f49cbdf65380eed35415 100644 (file)
@@ -10,8 +10,15 @@ gi.require_version('ALSACtl', '0.0')
 from gi.repository import ALSACtl
 
 target = ALSACtl.ElemInfoInt()
-props = ()
-methods = ()
+props = (
+    'value-count',
+    'min',
+    'max',
+    'step',
+)
+methods = (
+    'new',
+)
 signals = ()
 
 if not test(target, props, methods, signals):