From: Paul Hänsch Date: Sun, 12 Jul 2026 19:08:26 +0000 (+0200) Subject: worked on command parsing X-Git-Url: https://git.plutz.net/?a=commitdiff_plain;h=904e50b97dc4aad8f8aa56477997788057313679;p=gladerunner worked on command parsing --- diff --git a/glade1.c b/glade1.c index 2a2d79d..712c86d 100644 --- a/glade1.c +++ b/glade1.c @@ -23,7 +23,7 @@ void text_content(GtkWidget *wdg, gpointer user_data) { GtkEntry *e; if (GTK_IS_ENTRY(wdg)) { e = GTK_ENTRY( wdg ); - printf( "ENTRY:%s:%s\n", + printf( "%s CHANGED %s\n", gtk_buildable_get_name(GTK_BUILDABLE(wdg)), gtk_entry_buffer_get_text( gtk_entry_get_buffer( e ) ) ); @@ -31,66 +31,71 @@ void text_content(GtkWidget *wdg, gpointer user_data) { } void button_click(GtkWidget *wdg, gpointer d) { - printf( "BUTTON:%s:clicked\n", - gtk_buildable_get_name(GTK_BUILDABLE(wdg)) + printf( "%s CLICKED\n", + GTK_IS_BUILDABLE(wdg)?gtk_buildable_get_name(GTK_BUILDABLE(wdg)):(char *)d ); } // ====== CLI ACTIONS ======= -void a_widget_enable(GtkWidget *w) { - gtk_widget_set_sensitive(w, TRUE); -} -void a_widget_disable(GtkWidget *w) { - gtk_widget_set_sensitive(w, FALSE); -} - void a_text_view_set(GtkTextView *v, char *c) { gtk_text_buffer_set_text( gtk_text_view_get_buffer( v ), c, -1 ); } -void a_button(GtkButton *w, char *cli) { - char *cmd = strtok(cli, " \n"); - - if (!w || !cmd || !cmd[0]) return; - else if (!strcmp(cli, "enable")) a_widget_enable(GTK_WIDGET(w)); - else if (!strcmp(cli, "disable")) a_widget_disable(GTK_WIDGET(w)); +int a_editable(GtkEditable *w, char *cmd, char *args) { + 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; } -void a_entry(GtkEntry *w, char *cli) { - char *cmd = strtok(cli, " \n"); - - if (!w || !cmd || !cmd[0]) return; - else if (!strcmp(cli, "enable")) a_widget_enable(GTK_WIDGET(w)); - else if (!strcmp(cli, "disable")) a_widget_disable(GTK_WIDGET(w)); - else if (!strcmp(cli, "lock")) gtk_editable_set_editable(GTK_EDITABLE(w), FALSE); - else if (!strcmp(cli, "unlock")) gtk_editable_set_editable(GTK_EDITABLE(w), TRUE); +int a_widget(GtkWidget *w, char *cmd, char *args) { + if (!w || !cmd || !cmd[0]) return 0; + else if (!strcmp(cmd, "enable")) gtk_widget_set_sensitive(w, TRUE); + else if (!strcmp(cmd, "disable")) gtk_widget_set_sensitive(w, FALSE); + else if (!strcmp(cmd, "show")) gtk_widget_set_visible(w, TRUE); + else if (!strcmp(cmd, "hide")) gtk_widget_set_visible(w, FALSE); + else return 0; + return 1; } -void a_window(GtkWindow *w, char *cli) { - char *cmd = strtok(cli, " \n"); - if (!w || !cmd || !cmd[0]) return; - else if (!strcmp(cli, "enable")) a_widget_enable(GTK_WIDGET(w)); - else if (!strcmp(cli, "disable")) a_widget_disable(GTK_WIDGET(w)); +int a_button(GtkButton *w, char *cmd, char *args) { + if (!w || !cmd || !cmd[0]) return 0; + else return 0; + return 1; } -void a_text_view(GtkTextView *w, char *cli) { - char *cmd = strtok(cli, " \n"); - - if (!w || !cmd || !cmd[0]) return; - else if (!strcmp(cli, "set")) a_text_view_set(w, strtok(NULL, "")); - else if (!strcmp(cli, "enable")) a_widget_enable(GTK_WIDGET(w)); - else if (!strcmp(cli, "disable")) a_widget_disable(GTK_WIDGET(w)); - else if (!strcmp(cli, "lock")) gtk_text_view_set_editable(w, FALSE); - else if (!strcmp(cli, "unlock")) gtk_text_view_set_editable(w, TRUE); +int a_entry(GtkEntry *w, char *cmd, char *args) { + if (!w || !cmd || !cmd[0]) return 0; + else return 0; + return 1; +} +int a_window(GtkWindow *w, char *cmd, char *args) { + if (!w || !cmd || !cmd[0]) return 0; + else return 0; + return 1; +} +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 return 0; + return 1; } -void a_widget(GtkWidget *wdg, char *cli) { - if (!wdg) return; - else if (GTK_IS_BUTTON(wdg)) a_button( GTK_BUTTON(wdg), cli ); - else if (GTK_IS_ENTRY(wdg)) a_entry( GTK_ENTRY(wdg), cli ); - else if (GTK_IS_WINDOW(wdg)) a_window( GTK_WINDOW(wdg), cli ); - else if (GTK_IS_TEXT_VIEW(wdg)) a_text_view( GTK_TEXT_VIEW(wdg), cli ); +int action(GtkWidget *wdg, char *cli) { + char *cmd = strtok(cli, " \n"); + char *args = strtok(NULL, ""); + + if (!wdg) return 0; + else if ( (GTK_IS_BUTTON(wdg) && a_button(GTK_BUTTON(wdg), cmd, args)) + || (GTK_IS_ENTRY(wdg) && a_entry(GTK_ENTRY(wdg), cmd, args)) + || (GTK_IS_WINDOW(wdg) && a_window(GTK_WINDOW(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_WIDGET(wdg) && a_widget(GTK_WIDGET(wdg), cmd, args)) + ) return 1; + else return 0; } void a_command(char *cli) { @@ -98,7 +103,7 @@ void a_command(char *cli) { char *wid = strtok(cli, " \n"); // Separator: Space, Tab if ( wdg = GTK_WIDGET(gtk_builder_get_object(builder, wid)) ) { - a_widget(wdg, strtok(NULL, "")); + action(wdg, strtok(NULL, "")); } } @@ -117,20 +122,17 @@ gboolean idle_readline(gpointer d) { void init_widgets(gpointer wp, gpointer data) { GtkWidget *wdg; - fcntl(0, F_SETFL, fcntl(0, F_GETFL) | O_NONBLOCK); - - if (GTK_IS_WIDGET(wp)) { + if (GTK_IS_BUILDABLE(wp)) { wdg = GTK_WIDGET(wp); - printf("WIDGET:%s:load\n", gtk_widget_get_name(wdg)); + printf("%s load\n", gtk_buildable_get_name(GTK_BUILDABLE(wp))); if (GTK_IS_BUTTON(wdg)) g_signal_connect(wdg, "clicked", G_CALLBACK(button_click), NULL); else if (GTK_IS_ENTRY(wdg) ) g_signal_connect(wdg, "changed", G_CALLBACK(text_content), NULL); else if (GTK_IS_WINDOW(wdg)) g_signal_connect(wdg, "destroy", G_CALLBACK(app_quit), NULL); } else if (GTK_IS_STATUS_ICON(wp)) { - // printf("WIDGET:%s:load\n", gtk_status_icon_get_title(GTK_STATUS_ICON(wp))); - printf("WIDGET:StatusIcon:load\n"); - g_signal_connect(wp, "activate", G_CALLBACK(button_click), NULL); + printf("StatusIcon load\n"); + g_signal_connect(wp, "activate", G_CALLBACK(button_click), "StatusIcon"); } } @@ -143,6 +145,7 @@ int main(int argc, char *argv[]) { g_slist_foreach(widgets, *init_widgets, NULL); g_slist_free(widgets); + fcntl(0, F_SETFL, fcntl(0, F_GETFL) | O_NONBLOCK); g_idle_add(idle_readline, builder); // gtk_builder_connect_signals(builder, NULL); diff --git a/glade1.glade b/glade1.glade index dcc665c..a09f50d 100644 --- a/glade1.glade +++ b/glade1.glade @@ -9,7 +9,11 @@ True False + True + mouse applications-science + True + True