MGtk Reference Manual | ||||
---|---|---|---|---|
| Description |
Example 4_bExample 4_b — From Gtk to MGtk |
Example 13. Example b MGtk 0.0.1
#include <stdio.h> #include <stdlib.h> #include <gtk/gtk.h> #include <mlib.h> #include <mgtk.h> static gboolean delete_event ( GtkWidget* widget, GdkEvent* event, gpointer data ) { gtk_main_quit (); return FALSE; m_warning_disable_var ( widget ); m_warning_disable_var ( event ); m_warning_disable_var ( data ); } static MIdArchive* make_box ( gboolean homogeneous, gint spacing, gboolean expand, gboolean fill, guint padding ) { GtkWidget* box = NULL; MId button[6] = { MNOID, MNOID, MNOID, MNOID, MNOID, MNOID }; char padstr[80] = { '\0' }; MIdArchive* archive = mgtk_idarchive_new (); box = gtk_hbox_new ( homogeneous, spacing ); button[0] = mgtk_button_insert ( "gtk_box_pack" ); button[1] = mgtk_button_insert ( "(box," ); button[2] = mgtk_button_insert ( "button," ); if (expand == TRUE) { button[3] = mgtk_button_insert ( "TRUE," ); } else { button[3] = mgtk_button_insert ( "FALSE," ); } button[4] = mgtk_button_insert ( fill ? "TRUE," : "FALSE," ); sprintf ( padstr, "%u);", padding ); button[5] = mgtk_button_insert ( padstr ); muint index; fortooffset ( index, 6 ) { gtk_box_pack_start ( GTK_BOX( box ), MGTK_BUTTON_( button[index] ), expand, fill, padding ); gtk_widget_show ( MGTK_BUTTON_( button[index] ) ); sprintf ( padstr, "button[%u]", index ); MGTK_BUTTON_ARCHIVE_ID ( archive, button[index], g_strdup (padstr) ); } M_IDARCHIVE_data (archive) = (MPublic)box; return archive; } int mgtk_main ( argc, argv ) { mgtk_main_init ( argc, argv ); MId window = MNOID; MId box1 = MNOID; MId quitbox = MNOID; MId quitbutton = MNOID; MId box2[5] = { MNOID, MNOID, MNOID, MNOID, MNOID }; MId label[2] = { MNOID, MNOID }; MId separator[2] = { MNOID, MNOID }; MIdArchive* archive[5] = { NULL, NULL, NULL, NULL, NULL }; int which; if (argc != 2) { fprintf (stderr, "usage: packbox num, where num is 1, 2, or 3.\n"); exit (1); } which = atoi ( argv[1] ); window = mgtk_window_insert ( GTK_WINDOW_TOPLEVEL, NULL ); box1 = mgtk_vbox_insert ( HOMOGENEOUS_OFF, SPACING_OFF ); switch ( which ) { case 1: label[0] = mgtk_label_insert ( "gtk_hbox_new (FALSE, 0);" ); gtk_misc_set_alignment ( GTK_MISC ( MGTK_LABEL_(label[0]) ), 0, 0 ); gtk_box_pack_start ( GTK_BOX( MGTK_VBOX_(box1) ), MGTK_LABEL_(label[0]), EXPAND_OFF, FILL_OFF, PADDING_OFF ); archive[0] = make_box ( FALSE, 0, FALSE, FALSE, 0 ); box2[0] = mgtk_hbox_insert_attach ( GTK_HBOX ( M_IDARCHIVE_data (archive[0]) ) ); gtk_box_pack_start ( GTK_BOX( MGTK_VBOX_(box1) ), MGTK_HBOX_(box2[0]), EXPAND_OFF, FILL_OFF, PADDING_OFF ); archive[1] = make_box ( FALSE, 0, TRUE, FALSE, 0 ); box2[1] = mgtk_hbox_insert_attach ( GTK_HBOX ( M_IDARCHIVE_data (archive[1]) ) ); gtk_box_pack_start ( GTK_BOX( MGTK_VBOX_(box1) ), MGTK_HBOX_(box2[1]), EXPAND_OFF, FILL_OFF, PADDING_OFF ); archive[2] = make_box ( FALSE, 0, TRUE, TRUE, 0 ); box2[2] = mgtk_hbox_insert_attach ( GTK_HBOX ( M_IDARCHIVE_data (archive[2]) ) ); gtk_box_pack_start ( GTK_BOX( MGTK_VBOX_(box1) ), MGTK_HBOX_(box2[2]), EXPAND_OFF, FILL_OFF, PADDING_OFF ); separator[0] = mgtk_hseparator_insert (); gtk_box_pack_start ( GTK_BOX( MGTK_VBOX_(box1) ), MGTK_HSEPARATOR_(separator[0]), EXPAND_OFF, FILL_ON, 5 ); label[1] = mgtk_label_insert ( "gtk_hbox_new (TRUE, 0);" ); gtk_misc_set_alignment ( GTK_MISC ( MGTK_LABEL_(label[1]) ), 0, 0 ); gtk_box_pack_start ( GTK_BOX( MGTK_VBOX_(box1) ), MGTK_LABEL_(label[1]), EXPAND_OFF, FILL_OFF, PADDING_OFF ); archive[3] = make_box ( TRUE, 0, TRUE, FALSE, 0 ); box2[3] = mgtk_hbox_insert_attach ( GTK_HBOX ( M_IDARCHIVE_data (archive[3]) ) ); gtk_box_pack_start ( GTK_BOX( MGTK_VBOX_(box1) ), MGTK_HBOX_(box2[3]), EXPAND_OFF, FILL_OFF, PADDING_OFF ); archive[4] = make_box ( TRUE, 0, TRUE, TRUE, 0 ); box2[4] = mgtk_hbox_insert_attach ( GTK_HBOX ( M_IDARCHIVE_data (archive[4]) ) ); gtk_box_pack_start ( GTK_BOX( MGTK_VBOX_(box1) ), MGTK_HBOX_(box2[4]), EXPAND_OFF, FILL_OFF, PADDING_OFF ); separator[1] = mgtk_hseparator_insert (); gtk_box_pack_start ( GTK_BOX( MGTK_VBOX_(box1) ), MGTK_HSEPARATOR_(separator[1]), EXPAND_OFF, FILL_ON, 5 ); gtk_widget_show ( MGTK_HSEPARATOR_(separator[0]) ); gtk_widget_show ( MGTK_HSEPARATOR_(separator[1]) ); gtk_widget_show ( MGTK_LABEL_(label[0]) ); gtk_widget_show ( MGTK_LABEL_(label[1]) ); gtk_widget_show ( MGTK_HBOX_(box2[0]) ); gtk_widget_show ( MGTK_HBOX_(box2[1]) ); gtk_widget_show ( MGTK_HBOX_(box2[2]) ); gtk_widget_show ( MGTK_HBOX_(box2[3]) ); gtk_widget_show ( MGTK_HBOX_(box2[4]) ); break; case 2: label[0] = mgtk_label_insert ( "gtk_hbox_new (FALSE, 10);" ); gtk_misc_set_alignment ( GTK_MISC ( MGTK_LABEL_(label[0]) ), 0, 0); gtk_box_pack_start ( GTK_BOX( MGTK_VBOX_(box1) ), MGTK_LABEL_(label[0]), EXPAND_OFF, FILL_OFF, PADDING_OFF ); archive[0] = make_box ( FALSE, 10, TRUE, FALSE, 0 ); box2[0] = mgtk_hbox_insert_attach ( GTK_HBOX ( M_IDARCHIVE_data (archive[0]) ) ); gtk_box_pack_start ( GTK_BOX( MGTK_VBOX_(box1) ), MGTK_HBOX_(box2[0]), EXPAND_OFF, FILL_OFF, PADDING_OFF ); archive[1] = make_box ( FALSE, 10, TRUE, TRUE, 0 ); box2[1] = mgtk_hbox_insert_attach ( GTK_HBOX ( M_IDARCHIVE_data (archive[1]) ) ); gtk_box_pack_start ( GTK_BOX( MGTK_VBOX_(box1) ), MGTK_HBOX_(box2[1]), EXPAND_OFF, FILL_OFF, PADDING_OFF ); separator[0] = mgtk_hseparator_insert (); gtk_box_pack_start ( GTK_BOX( MGTK_VBOX_(box1) ), MGTK_HSEPARATOR_(separator[0]), EXPAND_OFF, FILL_ON, 5 ); label[1] = mgtk_label_insert ( "gtk_hbox_new (FALSE, 0);" ); gtk_misc_set_alignment ( GTK_MISC ( MGTK_LABEL_(label[1]) ), 0, 0); gtk_box_pack_start ( GTK_BOX( MGTK_VBOX_(box1) ), MGTK_LABEL_(label[1]), EXPAND_OFF, FILL_OFF, PADDING_OFF ); archive[2] = make_box ( FALSE, 0, TRUE, FALSE, 10 ); box2[2] = mgtk_hbox_insert_attach ( GTK_HBOX ( M_IDARCHIVE_data (archive[2]) ) ); gtk_box_pack_start ( GTK_BOX( MGTK_VBOX_(box1) ), MGTK_HBOX_(box2[2]), EXPAND_OFF, FILL_OFF, PADDING_OFF ); archive[3] = make_box ( FALSE, 0, TRUE, TRUE, 10 ); box2[3] = mgtk_hbox_insert_attach ( GTK_HBOX ( M_IDARCHIVE_data (archive[3]) ) ); gtk_box_pack_start ( GTK_BOX( MGTK_VBOX_(box1) ), MGTK_HBOX_(box2[3]), EXPAND_OFF, FILL_OFF, PADDING_OFF ); separator[1] = mgtk_hseparator_insert (); gtk_box_pack_start ( GTK_BOX( MGTK_VBOX_(box1) ), MGTK_HSEPARATOR_(separator[1]), EXPAND_OFF, FILL_ON, 5 ); gtk_widget_show ( MGTK_HSEPARATOR_(separator[0]) ); gtk_widget_show ( MGTK_HSEPARATOR_(separator[1]) ); gtk_widget_show ( MGTK_LABEL_(label[0]) ); gtk_widget_show ( MGTK_LABEL_(label[1]) ); gtk_widget_show ( MGTK_HBOX_(box2[0]) ); gtk_widget_show ( MGTK_HBOX_(box2[1]) ); gtk_widget_show ( MGTK_HBOX_(box2[2]) ); gtk_widget_show ( MGTK_HBOX_(box2[3]) ); break; case 3: archive[0] = make_box ( FALSE, 0, FALSE, FALSE, 0 ); box2[0] = mgtk_hbox_insert_attach ( GTK_HBOX ( M_IDARCHIVE_data (archive[0]) ) ); label[0] = mgtk_label_insert ( "end" ); gtk_box_pack_end ( GTK_BOX( MGTK_HBOX_(box2[0]) ), MGTK_LABEL_(label[0]), EXPAND_OFF, FILL_OFF, PADDING_OFF ); gtk_box_pack_start ( GTK_BOX( MGTK_VBOX_(box1) ), MGTK_HBOX_(box2[0]), EXPAND_OFF, FILL_OFF, PADDING_OFF ); separator[0] = mgtk_hseparator_insert (); gtk_widget_set_size_request ( MGTK_HSEPARATOR_(separator[0]), 400, 5 ); gtk_box_pack_start ( GTK_BOX( MGTK_VBOX_(box1) ), MGTK_HSEPARATOR_(separator[0]), EXPAND_OFF, FILL_ON, 5 ); gtk_widget_show ( MGTK_HSEPARATOR_(separator[0]) ); gtk_widget_show ( MGTK_LABEL_(label[0]) ); gtk_widget_show ( MGTK_HBOX_(box2[0]) ); } quitbox = mgtk_hbox_insert ( HOMOGENEOUS_OFF, SPACING_OFF ); quitbutton = mgtk_button_insert ( "Quit" ); gtk_container_set_border_width (GTK_CONTAINER ( MGTK_WINDOW_(window) ), 10); m_signal_connect ( "delete-event", MGTK_WINDOW_(window), G_CALLBACK (delete_event), NULL ); m_signal_connect_swapped ( "clicked", MGTK_BUTTON_(quitbutton), G_CALLBACK (gtk_main_quit), MGTK_WINDOW_(window) ); gtk_container_add ( GTK_CONTAINER ( MGTK_WINDOW_(window) ), MGTK_VBOX_(box1) ); gtk_box_pack_start ( GTK_BOX( MGTK_HBOX_(quitbox) ), MGTK_BUTTON_(quitbutton), EXPAND_ON, FILL_OFF, PADDING_OFF ); gtk_box_pack_start ( GTK_BOX( MGTK_VBOX_(box1) ), MGTK_HBOX_(quitbox), EXPAND_OFF, FILL_OFF, PADDING_OFF ); gtk_widget_show ( MGTK_BUTTON_(quitbutton) ); gtk_widget_show ( MGTK_HBOX_(quitbox) ); gtk_widget_show ( MGTK_VBOX_(box1) ); gtk_widget_show ( MGTK_WINDOW_(window) ); muint i, index; fortooffset ( i, 5 ) { if ( archive[i] != NULL ) { g_print ( "\n\n\n archive[%u] : %p \n", i, archive[i] ); fortooffset ( index, 6 ) { g_print ( "\n index(%u) - label: %s \n", index, M_IDARCHIVE_GET_LABEL_FROM_IDELEMENT ( archive[i], index) ); } } } gtk_main (); return 0; }