Files

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))); }