static GtkBuilder *builder = NULL;
static int chldin[2], chldout[2];
+// pre declaration
+void init_widgets(gpointer wp, gpointer data);
+
// typedef struct wdg_command {
// GType wdg;
// const char *cmd;
);
}
-gboolean s_switch_state_set(GtkWidget *wdg, gboolean state, gpointer d) {
- GtkSwitch *s = GTK_SWITCH(wdg);
- printf(
- "STATE-SET %s %i\n",
- gtk_buildable_get_name(GTK_BUILDABLE(wdg)),
- state
- );
- return 0;
-}
-
void e_entry_activate(GtkWidget *wdg, gpointer user_data) {
GtkEntry *e = GTK_ENTRY(wdg);
printf(
);
}
+gboolean s_switch_state_set(GtkWidget *wdg, gboolean state, gpointer d) {
+ GtkSwitch *s = GTK_SWITCH(wdg);
+ printf(
+ "STATE-SET %s %i\n",
+ gtk_buildable_get_name(GTK_BUILDABLE(wdg)),
+ state
+ );
+ return 0;
+}
+
// ====== CLI ACTIONS ======
void a_text_view_set(GtkTextView *v, char *c) {
);
}
+void a_listbox_add(GtkListBox *w, char *arg) {
+ GtkWidget *wdg;
+ if (wdg = GTK_WIDGET(gtk_builder_get_object(builder, arg))) {
+ gtk_list_box_insert(w, wdg, -1);
+ //gtk_widget_set_visible(wdg, TRUE);
+ } else {
+ dprintf(STDERR_FILENO, "Unknown Widget-ID: %s\n", arg);
+ }
+}
+
+void a_listbox_remove(GtkListBox *w, char *arg) {
+ // ListBox children are silently wrapped into a GtkListBoxRow
+ // so we really detroy that wrapper after removing the child
+ GtkWidget *wdg, *p;
+ if (wdg = GTK_WIDGET(gtk_builder_get_object(builder, arg))) {
+ p = gtk_widget_get_parent(wdg);
+ gtk_container_remove(GTK_CONTAINER(p), wdg);
+ gtk_widget_destroy(p);
+ } else {
+ dprintf(STDERR_FILENO, "Unknown Widget-ID: %s\n", arg);
+ }
+}
+
+void a_builder_load(char *file) {
+ GSList *widgets; GError *gerr = NULL;
+
+ if ( ! gtk_builder_add_from_file(builder, file, &gerr) ) {
+ dprintf(STDERR_FILENO, "Error during \"load\": %s\n", gerr->message);
+ free(gerr);
+ } else {
+ widgets = gtk_builder_get_objects(builder);
+ g_slist_foreach(widgets, *init_widgets, NULL);
+ g_slist_free(widgets);
+ }
+}
+
+void a_builder_add(char *xml) {
+ GSList *widgets; GError *gerr = NULL;
+
+ if ( ! gtk_builder_add_from_string(builder, xml, -1, &gerr) ) {
+ dprintf(STDERR_FILENO, "Error during \"add\": %s\n", gerr->message);
+ free(gerr);
+ } else {
+ widgets = gtk_builder_get_objects(builder);
+ g_slist_foreach(widgets, *init_widgets, NULL);
+ g_slist_free(widgets);
+ }
+}
+
+
+// ====== CLI ACTIONS PARSING ======
+
int a_editable(GtkEditable *w, char *cmd, char *args) {
+ printf("ED\n");
if (!w || !cmd || !cmd[0]) return 0;
else if (!strcmp(cmd, "lock")) gtk_editable_set_editable(w, FALSE);
else if (!strcmp(cmd, "unlock")) gtk_editable_set_editable(w, TRUE);
else return 0;
return 1;
}
+
+// Toggle Button, Toggle Tool Button, and Check Menu Item are all forms of
+// check boxes and radio buttons, depending on whether they appear in
+// a drop down menu, in a tool bar, or elsewhere.
+
int a_tb(GtkToggleButton *w, char *cmd, char *args) {
if (!w || !cmd || !cmd[0]) return 0;
else if (!strcmp(cmd, "check")) gtk_toggle_button_set_active(w, TRUE);
}
int a_text_view(GtkTextView *w, char *cmd, char *args) {
if (!w || !cmd || !cmd[0]) return 0;
- else if (!strcmp(cmd, "set")) a_text_view_set(w, args);
+ else if (!strcmp(cmd, "set")) a_text_view_set(w, args);
+ // text view is unrelated to editable
+ else if (!strcmp(cmd, "lock")) gtk_text_view_set_editable(w, FALSE);
+ else if (!strcmp(cmd, "unlock")) gtk_text_view_set_editable(w, TRUE);
else return 0;
return 1;
}
-void a_listbox_add(GtkListBox *w, char *arg) {
- GtkWidget *wdg;
- if (wdg = GTK_WIDGET(gtk_builder_get_object(builder, arg))) {
- gtk_list_box_insert(w, wdg, -1);
- //gtk_widget_set_visible(wdg, TRUE);
- } else {
- dprintf(STDERR_FILENO, "Unknown Widget-ID: %s\n", arg);
- }
-}
-
-void a_listbox_remove(GtkListBox *w, char *arg) {
- // ListBox children are silently wrapped into a GtkListBoxRow
- // so we really detroy that wrapper after removing the child
- GtkWidget *wdg, *p;
- if (wdg = GTK_WIDGET(gtk_builder_get_object(builder, arg))) {
- p = gtk_widget_get_parent(wdg);
- gtk_container_remove(GTK_CONTAINER(p), wdg);
- gtk_widget_destroy(p);
- } else {
- dprintf(STDERR_FILENO, "Unknown Widget-ID: %s\n", arg);
- }
-}
-
int a_listbox(GtkListBox *w, char *cmd, char *args) {
if (!w || !cmd || !cmd[0]) return 0;
else if (!strcmp(cmd, "add")) a_listbox_add(w, args);
return 1;
}
-void init_widgets(gpointer wp, gpointer data);
-
-void a_builder_load(char *file) {
- GSList *widgets; GError *gerr = NULL;
-
- if ( ! gtk_builder_add_from_file(builder, file, &gerr) ) {
- dprintf(STDERR_FILENO, "Error during \"load\": %s\n", gerr->message);
- free(gerr);
- } else {
- widgets = gtk_builder_get_objects(builder);
- g_slist_foreach(widgets, *init_widgets, NULL);
- g_slist_free(widgets);
- }
-}
-
-void a_builder_add(char *xml) {
- GSList *widgets; GError *gerr = NULL;
-
- if ( ! gtk_builder_add_from_string(builder, xml, -1, &gerr) ) {
- dprintf(STDERR_FILENO, "Error during \"add\": %s\n", gerr->message);
- free(gerr);
- } else {
- widgets = gtk_builder_get_objects(builder);
- g_slist_foreach(widgets, *init_widgets, NULL);
- g_slist_free(widgets);
- }
-}
-
int a_builder(char *cmd, char *args) {
if (!cmd || !cmd[0]) return 0;
else if (!strcmp(cmd, "load")) a_builder_load(args);
|| (GTK_IS_TOGGLE_TOOL_BUTTON(wdg) && a_ttb(GTK_TOGGLE_TOOL_BUTTON(wdg), cmd, args))
|| (GTK_IS_ENTRY(wdg) && a_entry(GTK_ENTRY(wdg), cmd, args))
|| (GTK_IS_LIST_BOX(wdg) && a_listbox(GTK_LIST_BOX(wdg), cmd, args))
- || (GTK_IS_TEXT_VIEW(wdg) && a_text_view(GTK_TEXT_VIEW(wdg), cmd, args))
|| (GTK_IS_EDITABLE(wdg) && a_editable(GTK_EDITABLE(wdg), cmd, args))
+ || (GTK_IS_TEXT_VIEW(wdg) && a_text_view(GTK_TEXT_VIEW(wdg), cmd, args))
|| (GTK_IS_BUTTON(wdg) && a_button(GTK_BUTTON(wdg), cmd, args))
|| (GTK_IS_WIDGET(wdg) && a_widget(GTK_WIDGET(wdg), cmd, args))
) return 1;