Move label into boolean controls and use button state to show status

Rather than having a label "Air" and the button toggle between "Off"
and "On", have the button just be "Air" and no separate label.
This commit is contained in:
Geoffrey D. Bennett
2024-01-19 16:26:30 +10:30
parent 099e50b91e
commit 54b99aca29
2 changed files with 47 additions and 55 deletions

View File

@@ -156,36 +156,36 @@ static void create_input_link_control(
struct alsa_elem *elem,
GtkWidget *grid,
int current_row,
int line_num
int column_num
) {
GtkWidget *w = make_boolean_alsa_elem(elem, "Off", "On");
GtkWidget *w = make_boolean_alsa_elem(elem, "Link", NULL);
int from, to;
get_two_num_from_string(elem->name, &from, &to);
if (to == -1)
to = from;
gtk_grid_attach(GTK_GRID(grid), w, from, current_row, to - from + 1, 1);
gtk_grid_attach(GTK_GRID(grid), w, from - 1, current_row, to - from + 1, 1);
}
static void create_input_gain_control(
struct alsa_elem *elem,
GtkWidget *grid,
int current_row,
int line_num
int column_num
) {
GtkWidget *w = make_gain_alsa_elem(elem, 0, WIDGET_GAIN_TAPER_LINEAR);
gtk_grid_attach(GTK_GRID(grid), w, line_num, current_row, 1, 1);
gtk_grid_attach(GTK_GRID(grid), w, column_num, current_row, 1, 1);
}
static void create_input_autogain_control(
struct alsa_elem *elem,
GtkWidget *grid,
int current_row,
int line_num
int column_num
) {
GtkWidget *w = make_boolean_alsa_elem(elem, "Off", "On");
GtkWidget *w = make_boolean_alsa_elem(elem, "Autogain", NULL);
gtk_widget_set_tooltip_text(
w,
"Autogain will listen to the input signal for 10 seconds and "
@@ -193,95 +193,95 @@ static void create_input_autogain_control(
"best signal level."
);
gtk_grid_attach(GTK_GRID(grid), w, line_num, current_row, 1, 1);
gtk_grid_attach(GTK_GRID(grid), w, column_num, current_row, 1, 1);
}
static void create_input_autogain_status_control(
struct alsa_elem *elem,
GtkWidget *grid,
int current_row,
int line_num
int column_num
) {
GtkWidget *w = make_label_alsa_elem(elem);
gtk_grid_attach(GTK_GRID(grid), w, line_num, current_row, 1, 1);
gtk_grid_attach(GTK_GRID(grid), w, column_num, current_row, 1, 1);
}
static void create_input_safe_control(
struct alsa_elem *elem,
GtkWidget *grid,
int current_row,
int line_num
int column_num
) {
GtkWidget *w = make_boolean_alsa_elem(elem, "Off", "On");
GtkWidget *w = make_boolean_alsa_elem(elem, "Safe", NULL);
gtk_widget_set_tooltip_text(
w,
"Enabling Safe Mode prevents the input from clipping by "
"automatically reducing the gain if the signal is too hot."
);
gtk_grid_attach(GTK_GRID(grid), w, line_num, current_row, 1, 1);
gtk_grid_attach(GTK_GRID(grid), w, column_num, current_row, 1, 1);
}
static void create_input_level_control(
struct alsa_elem *elem,
GtkWidget *grid,
int current_row,
int line_num
int column_num
) {
GtkWidget *w = make_boolean_alsa_elem(elem, "Line", "Inst");
GtkWidget *w = make_boolean_alsa_elem(elem, "Inst", NULL);
gtk_widget_set_tooltip_text(w, level_descr);
gtk_grid_attach(GTK_GRID(grid), w, line_num, current_row, 1, 1);
gtk_grid_attach(GTK_GRID(grid), w, column_num, current_row, 1, 1);
}
static void create_input_air_switch_control(
struct alsa_elem *elem,
GtkWidget *grid,
int current_row,
int line_num
int column_num
) {
GtkWidget *w = make_boolean_alsa_elem(elem, "Off", "On");
GtkWidget *w = make_boolean_alsa_elem(elem, "Air", NULL);
gtk_widget_set_tooltip_text(w, air_descr);
gtk_grid_attach(GTK_GRID(grid), w, line_num, current_row, 1, 1);
gtk_grid_attach(GTK_GRID(grid), w, column_num, current_row, 1, 1);
}
static void create_input_air_enum_control(
struct alsa_elem *elem,
GtkWidget *grid,
int current_row,
int line_num
int column_num
) {
GtkWidget *w = make_combo_box_alsa_elem(elem);
gtk_widget_set_tooltip_text(w, air_descr);
gtk_grid_attach(GTK_GRID(grid), w, line_num, current_row, 1, 1);
gtk_grid_attach(GTK_GRID(grid), w, column_num, current_row, 1, 1);
}
static void create_input_pad_control(
struct alsa_elem *elem,
GtkWidget *grid,
int current_row,
int line_num
int column_num
) {
GtkWidget *w = make_boolean_alsa_elem(elem, "Off", "On");
GtkWidget *w = make_boolean_alsa_elem(elem, "Pad", NULL);
gtk_widget_set_tooltip_text(
w,
"Enabling Pad engages a 10dB attenuator in the channel, giving "
"you more headroom for very hot signals."
);
gtk_grid_attach(GTK_GRID(grid), w, line_num, current_row, 1, 1);
gtk_grid_attach(GTK_GRID(grid), w, column_num, current_row, 1, 1);
}
static void create_input_phantom_control(
struct alsa_elem *elem,
GtkWidget *grid,
int current_row,
int line_num
int column_num
) {
GtkWidget *w = make_boolean_alsa_elem(elem, "48V Off", "48V On");
GtkWidget *w = make_boolean_alsa_elem(elem, "48V", NULL);
gtk_widget_set_tooltip_text(w, phantom_descr);
int from, to;
@@ -289,18 +289,17 @@ static void create_input_phantom_control(
if (to == -1)
to = from;
gtk_grid_attach(GTK_GRID(grid), w, from, current_row, to - from + 1, 1);
gtk_grid_attach(GTK_GRID(grid), w, from - 1, current_row, to - from + 1, 1);
}
static void create_input_controls_by_type(
GArray *elems,
GtkWidget *grid,
int *current_row,
char *label,
char *control,
void (*create_func)(struct alsa_elem *, GtkWidget *, int, int)
) {
GtkWidget *l = NULL;
int count = 0;
for (int i = 0; i < elems->len; i++) {
struct alsa_elem *elem = &g_array_index(elems, struct alsa_elem, i);
@@ -312,17 +311,13 @@ static void create_input_controls_by_type(
if (!strstr(elem->name, control))
continue;
int line_num = get_num_from_string(elem->name);
int column_num = get_num_from_string(elem->name) - 1;
create_func(elem, grid, *current_row, column_num);
if (!l) {
l = gtk_label_new(label);
gtk_grid_attach(GTK_GRID(grid), l, 0, *current_row, 1, 1);
}
create_func(elem, grid, *current_row, line_num);
count++;
}
if (l)
if (count)
(*current_row)++;
}
@@ -367,50 +362,49 @@ static void create_input_controls(
snprintf(s, 20, "%d", i);
label = gtk_label_new(s);
}
gtk_grid_attach(GTK_GRID(input_grid), label, i, 0, 1, 1);
gtk_grid_attach(GTK_GRID(input_grid), label, i - 1, 0, 1, 1);
}
int current_row = 1;
create_input_controls_by_type(
elems, input_grid, &current_row,
"Link", "Link Capture Switch", create_input_link_control
"Link Capture Switch", create_input_link_control
);
create_input_controls_by_type(
elems, input_grid, &current_row,
"Gain", "Gain Capture Volume", create_input_gain_control
"Gain Capture Volume", create_input_gain_control
);
create_input_controls_by_type(
elems, input_grid, &current_row,
"Autogain", "Autogain Capture Switch", create_input_autogain_control
"Autogain Capture Switch", create_input_autogain_control
);
create_input_controls_by_type(
elems, input_grid, &current_row,
"Autogain Status", "Autogain Status Capture Enum",
create_input_autogain_status_control
"Autogain Status Capture Enum", create_input_autogain_status_control
);
create_input_controls_by_type(
elems, input_grid, &current_row,
"Safe", "Safe Capture Switch", create_input_safe_control
"Safe Capture Switch", create_input_safe_control
);
create_input_controls_by_type(
elems, input_grid, &current_row,
"Level", "Level Capture Enum", create_input_level_control
"Level Capture Enum", create_input_level_control
);
create_input_controls_by_type(
elems, input_grid, &current_row,
"Air", "Air Capture Switch", create_input_air_switch_control
"Air Capture Switch", create_input_air_switch_control
);
create_input_controls_by_type(
elems, input_grid, &current_row,
"Air", "Air Capture Enum", create_input_air_enum_control
"Air Capture Enum", create_input_air_enum_control
);
create_input_controls_by_type(
elems, input_grid, &current_row,
"Pad", "Pad Capture Switch", create_input_pad_control
"Pad Capture Switch", create_input_pad_control
);
create_input_controls_by_type(
elems, input_grid, &current_row,
NULL, "Phantom Power Capture Switch", create_input_phantom_control
"Phantom Power Capture Switch", create_input_phantom_control
);
(*x)++;

View File

@@ -67,23 +67,21 @@ GtkWidget *create_iface_no_mixer_main(struct alsa_card *card) {
int line_num = get_num_from_string(elem->name);
if (strstr(elem->name, "Level Capture Enum")) {
w = make_boolean_alsa_elem(elem, "Line", "Inst");
w = make_boolean_alsa_elem(elem, "Inst", NULL);
gtk_widget_set_tooltip_text(w, level_descr);
gtk_grid_attach(GTK_GRID(input_grid), w, line_num - 1, 1, 1, 1);
} else if (strstr(elem->name, "Air Capture Switch")) {
w = make_boolean_alsa_elem(elem, "Air Off", "Air On");
w = make_boolean_alsa_elem(elem, "Air", NULL);
gtk_widget_set_tooltip_text(w, air_descr);
gtk_grid_attach(
GTK_GRID(input_grid), w, line_num - 1, 1 + !is_solo, 1, 1
);
} else if (strstr(elem->name, "Phantom Power Capture Switch")) {
w = make_boolean_alsa_elem(elem, "48V Off", "48V On");
w = make_boolean_alsa_elem(elem, "48V", NULL);
gtk_widget_set_tooltip_text(w, phantom_descr);
gtk_grid_attach(GTK_GRID(input_grid), w, 0, 3, 1 + !is_solo, 1);
} else if (strcmp(elem->name, "Direct Monitor Playback Switch") == 0) {
w = make_boolean_alsa_elem(
elem, "Direct Monitor Off", "Direct Monitor On"
);
w = make_boolean_alsa_elem(elem, "Direct Monitor", NULL);
gtk_widget_set_tooltip_text(
w,
"Direct Monitor sends the analogue input signals to the "