]> git.alsa-project.org Git - alsa-gobject.git/commitdiff
ctl: elem_info_bytes: 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-bytes.c
src/ctl/elem-info-bytes.h
tests/alsactl-elem-info-bytes

index b7465970a1887e8f4c956e0893b12656fc35d29e..131339c69f8c18d62af9d617fd261e3a756e0697 100644 (file)
@@ -42,6 +42,7 @@ ALSA_GOBJECT_0_0_0 {
     "alsactl_elem_info_enum_new";
 
     "alsactl_elem_info_bytes_get_type";
+    "alsactl_elem_info_bytes_new";
   local:
     *;
 };
index 9991cea462fe5f1badb3c83e535014b48510d527..0992650d130a89d5f8657a30b26b1abe872ea27b 100644 (file)
@@ -1,14 +1,84 @@
 // SPDX-License-Identifier: LGPL-3.0-or-later
 #include "elem-info-bytes.h"
+#include "privates.h"
 
 G_DEFINE_TYPE(ALSACtlElemInfoBytes, alsactl_elem_info_bytes, ALSACTL_TYPE_ELEM_INFO)
 
+enum ctl_elem_info_bytes_prop_type {
+    CTL_ELEM_INFO_BYTES_PROP_VALUE_COUNT = 1,
+    CTL_ELEM_INFO_BYTES_PROP_COUNT,
+};
+static GParamSpec *ctl_elem_info_bytes_props[CTL_ELEM_INFO_BYTES_PROP_COUNT] = { NULL, };
+
+static void ctl_elem_info_bytes_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_BYTES_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_bytes_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_BYTES_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_bytes_class_init(ALSACtlElemInfoBytesClass *klass)
 {
-    return;
+    GObjectClass *gobject_class = G_OBJECT_CLASS(klass);
+
+    gobject_class->set_property = ctl_elem_info_bytes_set_property;
+    gobject_class->get_property = ctl_elem_info_bytes_get_property;
+
+    ctl_elem_info_bytes_props[CTL_ELEM_INFO_BYTES_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_BYTES_PROP_COUNT,
+                                      ctl_elem_info_bytes_props);
 }
 
 static void alsactl_elem_info_bytes_init(ALSACtlElemInfoBytes *self)
 {
     return;
 }
+
+/**
+ * alsactl_elem_info_bytes_new:
+ *
+ * Allocate and return an instance of ALSACtlElemInfoBytes.
+ *
+ * Returns: (transfer full): A #ALSACtlElemInfoBytes.
+ */
+ALSACtlElemInfoBytes *alsactl_elem_info_bytes_new()
+{
+    return g_object_new(ALSACTL_TYPE_ELEM_INFO_BYTES,
+                        "type", ALSACTL_ELEM_TYPE_BYTES, NULL);
+}
index e8daf0fa1932b19afec9c314e3458d71d4897d79..4089d6b16de69a6caf80f83550ec40a87ff73b8c 100644 (file)
@@ -44,6 +44,8 @@ struct _ALSACtlElemInfoBytesClass {
 
 GType alsactl_elem_info_bytes_get_type(void) G_GNUC_CONST;
 
+ALSACtlElemInfoBytes *alsactl_elem_info_bytes_new();
+
 G_END_DECLS
 
 #endif
index c228678ec7a5d9d8f5171d11b9440f21fb5fabe4..4feebbf023f35cb82133f0392262b5473458e014 100644 (file)
@@ -10,8 +10,12 @@ gi.require_version('ALSACtl', '0.0')
 from gi.repository import ALSACtl
 
 target = ALSACtl.ElemInfoBytes()
-props = ()
-methods = ()
+props = (
+    'value-count',
+)
+methods = (
+    'new',
+)
 signals = ()
 
 if not test(target, props, methods, signals):