/** menumdi.c **/ #include static GtkObject *mdi; static GtkWidget *firstView; static GtkWidget *secondView; static GtkWidget *thirdView; static GtkWidget *lastView; gint eventDelete(GtkWidget *widget, GdkEvent *event,gpointer data); gint eventDestroy(GtkWidget *widget, GdkEvent *event,gpointer data); static void addChild(gchar *name); static GtkWidget *setLabel(GnomeMDIChild *child, GtkWidget *currentLabel,gpointer data); static GtkWidget *createView(GnomeMDIChild *child, gpointer data); static void fileExit(GtkObject *object,gpointer data); static void modeNotebook(GtkObject *object,gpointer data); static void modeToplevel(GtkObject *object,gpointer data); static void modeModal(GtkObject *object,gpointer data); static void modeDefault(GtkObject *object,gpointer data); static void setFirstView(GtkObject *object,gpointer data); static void setSecondView(GtkObject *object,gpointer data); static void setThirdView(GtkObject *object,gpointer data); static void setLastView(GtkObject *object,gpointer data); GnomeUIInfo fileMenu[] = { GNOMEUIINFO_SEPARATOR, { GNOME_APP_UI_ITEM,"E_xit", "Close the window and cease", fileExit,NULL,NULL, GNOME_APP_PIXMAP_NONE, NULL,0,0,NULL }, GNOMEUIINFO_END }; GnomeUIInfo modeMenu[] = { { GNOME_APP_UI_ITEM,"Notebook", "Change to notebook display mode", modeNotebook,NULL,NULL, GNOME_APP_PIXMAP_NONE, NULL,0,0,NULL }, { GNOME_APP_UI_ITEM,"Toplevel", "Change to top-level display mode", modeToplevel,NULL,NULL, GNOME_APP_PIXMAP_NONE, NULL,0,0,NULL }, { GNOME_APP_UI_ITEM,"Modal", "Change to modal display mode", modeModal,NULL,NULL, GNOME_APP_PIXMAP_NONE, NULL,0,0,NULL }, { GNOME_APP_UI_ITEM,"Default", "Change to the default display mode", modeDefault,NULL,NULL, GNOME_APP_PIXMAP_NONE, NULL,0,0,NULL }, GNOMEUIINFO_END }; GnomeUIInfo selectMenu[] = { { GNOME_APP_UI_ITEM,"First", "Switch to the first document", setFirstView,NULL,NULL, GNOME_APP_PIXMAP_NONE, NULL,0,0,NULL }, { GNOME_APP_UI_ITEM,"Second", "Switch to the second document", setSecondView,NULL,NULL, GNOME_APP_PIXMAP_NONE, NULL,0,0,NULL }, { GNOME_APP_UI_ITEM,"Third", "Switch to the third document", setThirdView,NULL,NULL, GNOME_APP_PIXMAP_NONE, NULL,0,0,NULL }, { GNOME_APP_UI_ITEM,"Last", "Switch to the last document", setLastView,NULL,NULL, GNOME_APP_PIXMAP_NONE, NULL,0,0,NULL }, GNOMEUIINFO_END }; GnomeUIInfo mainMenu[] = { GNOMEUIINFO_SUBTREE("_File",fileMenu), GNOMEUIINFO_SUBTREE("_Mode",modeMenu), GNOMEUIINFO_SUBTREE("_Select",selectMenu), GNOMEUIINFO_END }; int main(int argc,char *argv[]) { gnome_init("menumdi","1.0",argc,argv); mdi = gnome_mdi_new("menumdi","Menu MDI"); gnome_mdi_set_menubar_template(GNOME_MDI(mdi), mainMenu); gtk_signal_connect(mdi,"destroy", GTK_SIGNAL_FUNC(eventDestroy),NULL); addChild("First"); addChild("Second"); addChild("Third"); addChild("Last"); gnome_mdi_open_toplevel(GNOME_MDI(mdi)); gtk_main(); exit(0); } static void addChild(gchar *name) { GnomeMDIGenericChild *child; child = gnome_mdi_generic_child_new(name); gnome_mdi_add_child(GNOME_MDI(mdi), GNOME_MDI_CHILD(child)); gnome_mdi_generic_child_set_view_creator(child, createView,name); gnome_mdi_generic_child_set_label_func(child,setLabel, NULL); gnome_mdi_add_view(GNOME_MDI(mdi), GNOME_MDI_CHILD(child)); } static GtkWidget *createView(GnomeMDIChild *child, gpointer data) { gchar *name; char str[80]; GtkWidget *view; name = (gchar *)data; sprintf(str,"View of the\n%s widget",name); view = gtk_label_new(str); gtk_widget_set_usize(view,250,100); if(!strcmp(name,"First")) firstView = view; else if(!strcmp(name,"Second")) secondView = view; else if(!strcmp(name,"Third")) thirdView = view; else lastView = view; return(view); } static GtkWidget *setLabel(GnomeMDIChild *child, GtkWidget *currentLabel,gpointer data) { if(currentLabel == NULL) return(gtk_label_new(child->name)); gtk_label_set_text(GTK_LABEL(currentLabel), child->name); return(currentLabel); } static void fileExit(GtkObject *object,gpointer data) { gtk_main_quit(); } static void modeNotebook(GtkObject *object,gpointer data) { gnome_mdi_set_mode(GNOME_MDI(mdi),GNOME_MDI_NOTEBOOK); } static void modeToplevel(GtkObject *object,gpointer data) { gnome_mdi_set_mode(GNOME_MDI(mdi),GNOME_MDI_TOPLEVEL); } static void modeModal(GtkObject *object,gpointer data) { gnome_mdi_set_mode(GNOME_MDI(mdi),GNOME_MDI_MODAL); } static void modeDefault(GtkObject *object,gpointer data) { gnome_mdi_set_mode(GNOME_MDI(mdi), GNOME_MDI_DEFAULT_MODE); } static void setFirstView(GtkObject *object,gpointer data) { gnome_mdi_set_active_view(GNOME_MDI(mdi),firstView); } static void setSecondView(GtkObject *object,gpointer data) { gnome_mdi_set_active_view(GNOME_MDI(mdi),secondView); } static void setThirdView(GtkObject *object,gpointer data) { gnome_mdi_set_active_view(GNOME_MDI(mdi),thirdView); } static void setLastView(GtkObject *object,gpointer data) { gnome_mdi_set_active_view(GNOME_MDI(mdi),lastView); } gint eventDestroy(GtkWidget *widget, GdkEvent *event,gpointer data) { gtk_main_quit(); return(0); }