#!/usr/bin/mumps #+ Copyright (C) 2022 by Kevin C. O'Kane #+ #+ Kevin C. O'Kane, Ph.D. #+ Professor Emeritus #+ Computer Science Department #+ University of Northern Iowa #+ Cedar Falls, IA 50614-0507 #+ kc.okane@gmail.com #+ https://threadsafebooks.com/ #+ https://www.cs.uni.edu/~okane/ #+ #+ This program is free software; you can redistribute it and/or modify #+ it under the terms of the GNU General Public License as published by #+ the Free Software Foundation; either version 2 of the License, or #+ (at your option) any later version. #+ #+ This program is distributed in the hope that it will be useful, #+ but WITHOUT ANY WARRANTY; without even the implied warranty of #+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the #+ GNU General Public License for more details. #+ #+ You should have received a copy of the GNU General Public License #+ along with this program; if not, write to the Free Software #+ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA #+ # Jan 11, 2021 write !!,"Mumps GTK Application Builder ",$zd,!! open 1:"gtk1.h,new" open 2:"gtk2.h,new" open 3:"gtk3.h,new" use 1 write "#include ",! use 1 write "#include ",! use 1 write "GtkBuilder *builder;",! use 2 write "FILE *f=fopen(""gtk4.h"",""w"");",! use 2 write "gtk_init(&argc, &argv);",! use 2 write "builder = gtk_builder_new_from_file (""mumps.glade"");",! for do . use 5 . read line . if '$test break . set i=$find(line,"object class=") . if i'=0 do .. set p1=$extract(line,i,255) .. set widget=$piece(p1,"""",2) .. set id=$p(p1,"""",4) .. if widget="GtkCellRendererText" use 2 write "GtkCellRenderer *",id,";",! .. else use 1 write widget," *",id,";",! .. use 2 write !,id,"=" .. if widget="GtkWindow" use 2 write "GTK_WINDOW(" .. if widget="GtkFixed" use 2 write "GTK_FIXED(" .. if widget="GtkButton" use 2 write "GTK_BUTTON(" .. if widget="GtkAdjustment" use 2 write "GTK_ADJUSTMENT(" .. if widget="GtkRadioButton" use 2 write "GTK_RADIO_BUTTON(" .. if widget="GtkSpinButton" use 2 write "GTK_SPIN_BUTTON(" .. if widget="GtkLabel" use 2 write "GTK_LABEL(" .. if widget="GtkToggleButton" use 2 write "GTK_TOGGLE_BUTTON(" .. if widget="GtkEntry" use 2 write "GTK_ENTRY(" .. if widget="GtkViewport" use 2 write "GTK_VIEWPORT(" .. if widget="GtkScrolledWindow" use 2 write "GTK_SCROLLED_WINDOW(" .. if widget="GtkTextView" use 2 write "GTK_TEXT_VIEW(" .. if widget="GtkTextBuffer" use 2 write "GTK_TEXT_BUFFER(" .. if widget="GtkCheckButton" use 2 write "GTK_CHECK_BUTTON(" .. if widget="GtkTreeView" use 2 write "GTK_TREE_VIEW(" .. if widget="GtkTreeSelection" use 2 write "GTK_TREE_SELECTION(" .. if widget="GtkTreeViewColumn" use 2 write "GTK_TREE_VIEW_COLUMN(" .. if widget="GtkCellRendererText" use 2 write "GTK_CELL_RENDERER(" .. if widget="GtkListStore" use 2 write "GTK_LIST_STORE(" .. if widget="GtkTreeStore" use 2 write "GTK_TREE_STORE(" .. use 2 write "gtk_builder_get_object(builder,""",id,"""));",! .. use 2 write "{ char tmp[128]; sprintf(tmp,""%p"", ",id,");",! .. use 2 write " SymPut(""",id,""",tmp); fprintf(f,"" set ",id,"=\""%s\""\n"",tmp); }",! .. if widget="GtkCellRendererText" do ... set c=$p(id,"col",2) set c=$p(c,"r",1) ... use 2 write !,"gtk_tree_view_column_add_attribute(",$p(id,"r",1),",",id,",""text"",",c,");",! . set i=$find(line,"signal name=") . if i'=0 do .. set sig=$piece(line,"""",4,4) .. set sig1=$translate(sig,"_",".")_".mps" .. use 3 write "extern ""C"" void ",sig,"(GtkWidget *w) ",! .. write "{struct MSV * Ptr = AllocSV(); char tmp[512]; ",! .. write "sprintf(tmp,""set widget=\""%p\"" g ^",sig1,""",w); ",! .. write "Interpret((const char *) tmp, Ptr); free(Ptr);}",! .. if '$zfile(sig1) do ... use 5 write "Creating signal handler: ",sig1,! ... set sig2=sig1_",new" ... open 4:sig2 ... use 4 write "#!/usr/bin/mumps",! ... use 4 write !,"# Mumps GTK Signal Handler",! ... use 4 write !," do ^gtk4.h",! ... use 4 write " write """,sig1,""","" "",widget,!",! ... if widget="GtkTreeSelection" use 4 write " write $z~gtk~tree~selection~get~selected("_id_",0),!",! ... if widget="GtkToggleButton" use 4 write " write $z~gtk~toggle~button~get~active("_id_"),!",! ... if widget="GtkSpinButton" use 4 write " write $z~gtk~spin~button~get~value("_id_"),!",! ... if widget="GtkCheckButton" use 4 write " write $z~gtk~toggle~button~get~active("_id_"),!",! ... if widget="GtkEntry" use 4 write " write $z~gtk~entry~get~text("_id_"),!",! ... close 4 use 2 write !,"g_signal_connect(window, ""destroy"", G_CALLBACK(gtk_main_quit), NULL);",! use 2 write "gtk_builder_connect_signals(builder, NULL);",! use 2 write "gtk_widget_show(GTK_WIDGET(window));",! use 2 write "fclose(f);",! # use 2 write "gtk_main();",! close 1 close 2 close 3