85 lines
4.4 KiB
C
85 lines
4.4 KiB
C
// Copyright (c) 2026 Storm Dragon
|
|
// Authors: Storm Dragon, Angus Kola
|
|
// SPDX-License-Identifier: GPL-3.0-or-later
|
|
#include "native_internal.h"
|
|
|
|
void prefs_voice_defaults(int kind) {
|
|
const char *ids[] = {"rate_default", "pitch_default", "volume_default"};
|
|
const char *server[] = {"Use server default rate", "Use server default pitch", "Use server default volume"};
|
|
const char *inherited[] = {"Use Default voice rate", "Use Default voice pitch", "Use Default voice volume"};
|
|
for (unsigned i = 0; i < G_N_ELEMENTS(ids); i++) {
|
|
const char *label = kind == 0 ? server[i] : inherited[i];
|
|
if (kind == 1 && i == 1) label = "Use automatic uppercase pitch";
|
|
GtkButton *button = GTK_BUTTON(prefs_widget(ids[i]));
|
|
if (g_strcmp0(gtk_button_get_label(button), label) != 0) gtk_button_set_label(button, label);
|
|
}
|
|
}
|
|
|
|
void prefs_number_set(const char *id, double value, int use_default) {
|
|
gchar *check = g_strconcat(id, "_default", NULL);
|
|
gtk_range_set_value(GTK_RANGE(prefs_widget(id)), value);
|
|
gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(prefs_widget(check)), use_default);
|
|
gtk_widget_set_sensitive(prefs_widget(id), !use_default);
|
|
g_free(check);
|
|
}
|
|
double prefs_number_value(const char *id) { return gtk_range_get_value(GTK_RANGE(prefs_widget(id))); }
|
|
int prefs_default(const char *id) {
|
|
gchar *check = g_strconcat(id, "_default", NULL);
|
|
int result = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(prefs_widget(check)));
|
|
g_free(check); return result;
|
|
}
|
|
void prefs_choice_set(const char *id, int value) {
|
|
gchar *name = g_strdup_printf("%s_%d", id, value);
|
|
gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(prefs_widget(name)), TRUE);
|
|
g_free(name);
|
|
}
|
|
int prefs_choice_get(const char *id) {
|
|
for (int i = 0; i < 4; i++) {
|
|
gchar *name = g_strdup_printf("%s_%d", id, i);
|
|
GtkWidget *button = prefs_widget(name);
|
|
g_free(name);
|
|
if (button && gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(button))) return i;
|
|
}
|
|
return -1;
|
|
}
|
|
void prefs_combo_set(const char *id, int value) {
|
|
gtk_combo_box_set_active(GTK_COMBO_BOX(prefs_widget(id)), value);
|
|
}
|
|
int prefs_combo_get(const char *id) {
|
|
return gtk_combo_box_get_active(GTK_COMBO_BOX(prefs_widget(id)));
|
|
}
|
|
|
|
void prefs_check_set(const char *id, int value) { gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(prefs_widget(id)), value); }
|
|
int prefs_check_get(const char *id) { return gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(prefs_widget(id))); }
|
|
|
|
void prefs_range_set(const char *id, double value) { gtk_range_set_value(GTK_RANGE(prefs_widget(id)), value); }
|
|
void prefs_spin_set(const char *id, double value) { gtk_spin_button_set_value(GTK_SPIN_BUTTON(prefs_widget(id)), value); }
|
|
double prefs_spin_get(const char *id) { return gtk_spin_button_get_value(GTK_SPIN_BUTTON(prefs_widget(id))); }
|
|
void prefs_combo_clear(const char *id) { gtk_combo_box_text_remove_all(GTK_COMBO_BOX_TEXT(prefs_widget(id))); }
|
|
void prefs_combo_append(const char *id, const char *text) { gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(prefs_widget(id)), text); }
|
|
void prefs_hardware_devices_clear(void) {
|
|
GtkEntryCompletion *completion = gtk_entry_get_completion(GTK_ENTRY(prefs_widget("hardwareDeviceEntry")));
|
|
gtk_list_store_clear(GTK_LIST_STORE(gtk_entry_completion_get_model(completion)));
|
|
}
|
|
void prefs_hardware_device_append(const char *text) {
|
|
GtkEntryCompletion *completion = gtk_entry_get_completion(GTK_ENTRY(prefs_widget("hardwareDeviceEntry")));
|
|
GtkListStore *model = GTK_LIST_STORE(gtk_entry_completion_get_model(completion));
|
|
GtkTreeIter row;
|
|
gtk_list_store_append(model, &row);
|
|
gtk_list_store_set(model, &row, 0, text, -1);
|
|
}
|
|
void prefs_hardware_device_set(const char *text) {
|
|
gtk_entry_set_text(GTK_ENTRY(prefs_widget("hardwareDeviceEntry")), text);
|
|
}
|
|
const char *prefs_hardware_device_get(void) {
|
|
return gtk_entry_get_text(GTK_ENTRY(prefs_widget("hardwareDeviceEntry")));
|
|
}
|
|
void prefs_hardware_sensitivity(int enabled) {
|
|
gtk_widget_set_sensitive(prefs_widget("hardwareDeviceEntry"), enabled);
|
|
gtk_widget_set_sensitive(prefs_widget("hardwareBaudCombo"), enabled);
|
|
gtk_widget_set_sensitive(prefs_widget("speechLanguages"), !enabled);
|
|
gtk_widget_set_sensitive(prefs_widget("speechFamilies"), !enabled);
|
|
}
|
|
void prefs_entry_set(const char *id, const char *text) { gtk_entry_set_text(GTK_ENTRY(prefs_widget(id)), text); }
|
|
const char *prefs_entry_get(const char *id) { return gtk_entry_get_text(GTK_ENTRY(prefs_widget(id))); }
|