ref: c4e7743fc560f9c74539e21da8892d44cf7dfe20
parent: 22f7e9038ca004a322d82d3ee543eb8ed42dbec9
author: Sigrid Haflínudóttir <[email protected]>
date: Thu Mar 19 09:18:17 EDT 2020
uiglue: add userdata support for ui controls
--- a/aux.h
+++ b/aux.h
@@ -14,9 +14,9 @@
typedef struct Aux Aux;
typedef struct Auxdsp Auxdsp;
-typedef struct Meta Meta;
-typedef struct UI UI;
+struct UI;
+
struct Aux {
Auxtype type;
int id;
@@ -24,26 +24,6 @@
int data;
int metadata;
- struct Auxdsp *dsp;
- UI *ui;
-};
-
-struct Meta {
- const char *k;
- const char *v;
-};
-
-struct UI {
- UItype type;
- const char *label;
- float *zone;
- float init;
- float min;
- float max;
- float step;
- char *(*readstr)(UI *ui, int auxtype, char *s, int sz);
- int (*writestr)(UI *ui, int auxtype, char *s);
-
- Meta *meta;
- int nummeta;
+ Auxdsp *dsp;
+ struct UI *ui;
};
--- a/cfg/cfg.c
+++ b/cfg/cfg.c
@@ -15,7 +15,7 @@
typedef struct UI UI;
struct UI {
- UItype type;
+ int type;
const char *label;
int index;
--- a/common.h
+++ b/common.h
@@ -1,4 +1,4 @@
-typedef enum {
+enum {
UITGroup,
UIHGroup,
UIVGroup,
@@ -10,6 +10,6 @@
UIHBarGraph,
UIVBarGraph,
UInum,
-}UItype;
+};
extern char *uitypenames[UInum];
--- a/uiglue.c
+++ b/uiglue.c
@@ -3,8 +3,8 @@
#include <fcall.h>
#include <thread.h>
#include <9p.h>
-#include "uiglue.h"
#include "common.h"
+#include "uiglue.h"
#include "aux.h"
static struct {
@@ -112,7 +112,7 @@
{
Aux *a;
- a = calloc(1, sizeof(*a)+sizeof(UI) + sizeof(Meta)*decl.nummeta);
+ a = calloc(1, sizeof(*a) + sizeof(UI) + sizeof(Meta)*decl.nummeta);
a->type = Xui;
a->ui = (UI*)(a+1);
a->ui->type = type;
@@ -125,6 +125,7 @@
a->ui->label = label;
a->ui->readstr = uiglue.readstr != nil ? uiglue.readstr : ui_readstr;
a->ui->writestr = uiglue.writestr != nil ? uiglue.writestr : ui_writestr;
+ a->ui->userdata = uiglue.userdata;
if ((uiglue.f = createfile(f, label, nil, DMDIR|0775, a)) == nil)
sysfatal("failed to create ui: %r");
if ((f = createfile(uiglue.f, "ctl", nil, 0664, &a->ctl)) == nil)
--- a/uiglue.h
+++ b/uiglue.h
@@ -2,8 +2,31 @@
typedef struct MetaGlue MetaGlue;
struct File;
-struct UI;
+typedef struct Meta Meta;
+typedef struct UI UI;
+
+struct Meta {
+ const char *k;
+ const char *v;
+};
+
+struct UI {
+ int type;
+ const char *label;
+ float *zone;
+ float init;
+ float min;
+ float max;
+ float step;
+ char *(*readstr)(UI *ui, int auxtype, char *s, int sz);
+ int (*writestr)(UI *ui, int auxtype, char *s);
+
+ void *userdata;
+ Meta *meta;
+ int nummeta;
+};
+
struct UIGlue {
union {
void *uiInterface;
@@ -22,8 +45,10 @@
void (*addVerticalBargraph)(void *uiInterface, const char *label, float *zone, float min, float max);
void (*declare)(void *uiInterface, float *zone, const char *key, const char *value);
- char *(*readstr)(struct UI *ui, int auxtype, char *s, int sz);
- int (*writestr)(struct UI *ui, int auxtype, char *s);
+ char *(*readstr)(UI *ui, int auxtype, char *s, int sz);
+ int (*writestr)(UI *ui, int auxtype, char *s);
+
+ void *userdata;
};
struct MetaGlue {
@@ -33,5 +58,5 @@
extern UIGlue uiglue;
-char *ui_readstr(struct UI *ui, int type, char *s, int sz);
-int ui_writestr(struct UI *ui, int type, char *s);
+char *ui_readstr(UI *ui, int auxtype, char *s, int sz);
+int ui_writestr(UI *ui, int auxtype, char *s);