📄 gui-dial.c
字号:
#ifndef WIN32 gtk_widget_show(openfile);#endif gtk_box_pack_start(GTK_BOX(box),openfile,0,0,0); w1 = gtk_label_new("Socket file: "); gtk_widget_show(w1); gtk_box_pack_start(GTK_BOX(openfile),w1,0,0,0); openfiletext = gtk_entry_new(); gtk_widget_show(openfiletext); gtk_box_pack_start(GTK_BOX(openfile),openfiletext,0,0,0); opengamefile = gtk_hbox_new(0,0); gtk_widget_show(opengamefile); gtk_box_pack_start(GTK_BOX(box),opengamefile,0,0,0); w1 = gtk_label_new("Saved game file: "); gtk_widget_show(w1); gtk_box_pack_start(GTK_BOX(opengamefile),w1,0,0,0); opengamefiletext = gtk_entry_new(); gtk_widget_show(opengamefiletext); gtk_box_pack_start(GTK_BOX(opengamefile),opengamefiletext,0,0,0); w2 = gtk_hbox_new(0,0); gtk_widget_show(w2); gtk_box_pack_start(GTK_BOX(box),w2,0,0,0); w1 = gtk_label_new("Player ID: "); gtk_widget_show(w1); gtk_box_pack_start(GTK_BOX(w2),w1,0,0,0); openidtext = gtk_entry_new(); gtk_widget_show(openidtext); gtk_entry_set_text(GTK_ENTRY(openidtext),idt); gtk_box_pack_start(GTK_BOX(w2),openidtext,0,0,0); w2 = gtk_hbox_new(0,0); gtk_widget_show(w2); gtk_box_pack_start(GTK_BOX(box),w2,0,0,0); w1 = gtk_label_new("Name: "); gtk_widget_show(w1); gtk_box_pack_start(GTK_BOX(w2),w1,0,0,0); opennametext = gtk_entry_new(); gtk_widget_show(opennametext); if ( ! nt || !nt[0] ) nt = getenv("LOGNAME"); if ( ! nt ) nt = getlogin(); /* may need to be in sysdep.c */ gtk_entry_set_text(GTK_ENTRY(opennametext),nt); gtk_box_pack_start(GTK_BOX(w2),opennametext,0,0,0); /* Now some stuff for when this panel is in its personality as a start game panel */ opengamepanel = bbox = gtk_vbox_new(0,dialog_vert_spacing); /* gtk_widget_show(bbox); */ gtk_box_pack_start(GTK_BOX(box),bbox,0,0,0); for ( i = 0 ; i < 3 ; i++ ) { static const char *playerlabs[] = { "Second player:" , "Third player:", "Fourth player:" }; w2 = gtk_hbox_new(0,dialog_button_spacing); gtk_widget_show(w2); gtk_box_pack_start(GTK_BOX(bbox),w2,0,0,0); w1 = gtk_label_new(playerlabs[i]); gtk_widget_show(w1); gtk_box_pack_start(GTK_BOX(w2),w1,0,0,0); openplayercheckboxes[i] = w1 = gtk_check_button_new_with_label("Start computer player "); gtk_widget_show(w1); gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(w1),1); gtk_box_pack_end(GTK_BOX(w2),w1,0,0,0); gtk_signal_connect(GTK_OBJECT(w1),"toggled",openbut_callback,(gpointer)(10+i)); openplayeroptionboxes[i] = w2 = gtk_hbox_new(0,dialog_button_spacing); gtk_widget_show(w2); gtk_box_pack_start(GTK_BOX(bbox),w2,0,0,0); w1 = gtk_label_new(" Name:"); gtk_widget_show(w1); gtk_box_pack_start(GTK_BOX(w2),w1,0,0,0); openplayernames[i] = w1 = gtk_entry_new(); gtk_entry_set_text(GTK_ENTRY(w1),robot_names[i]); gtk_widget_show(w1); gtk_box_pack_start(GTK_BOX(w2),w1,0,0,0); w1 = gtk_label_new(" Options:"); gtk_widget_show(w1); gtk_box_pack_start(GTK_BOX(w2),w1,0,0,0); openplayeroptions[i] = w1 = gtk_entry_new(); gtk_widget_show(w1); gtk_box_pack_start(GTK_BOX(w2),w1,0,0,0); } openallowdisconnectbutton = w1 = gtk_check_button_new_with_label("Allow disconnection from game"); gtk_widget_show(w1); gtk_box_pack_start(GTK_BOX(bbox),w1,0,0,0); opensaveonexitbutton = w1 = gtk_check_button_new_with_label("Save game state on exit"); gtk_widget_show(w1); gtk_box_pack_start(GTK_BOX(bbox),w1,0,0,0); openrandomseatsbutton = w1 = gtk_check_button_new_with_label("Seat players randomly"); gtk_widget_show(w1); gtk_box_pack_start(GTK_BOX(bbox),w1,0,0,0); opentimeoutspinbutton = w1 = gtk_spin_button_new(GTK_ADJUSTMENT(gtk_adjustment_new(1.0*game_get_option_entry_from_table(&prefs_table,GOTimeout,NULL)->value.optnat,0.0,300.0,1.0,10.0,0.0)), 0.0,0); gtk_widget_show(w1); opentimeout = w2 = gtk_hbox_new(0,dialog_button_spacing); gtk_widget_show(w2); gtk_box_pack_start(GTK_BOX(w2),w1,0,0,0); w1 = gtk_label_new("seconds allowed for claims"); gtk_widget_show(w1); gtk_box_pack_start(GTK_BOX(w2),w1,0,0,0); gtk_box_pack_start(GTK_BOX(bbox),w2,0,0,0); w1 = gtk_hbox_new(0,dialog_button_spacing); gtk_widget_show(w1); gtk_box_pack_start(GTK_BOX(box),w1,0,0,0); openconnectbutton = w2 = gtk_button_new_with_label("Connect"); gtk_widget_show(w2); gtk_box_pack_start(GTK_BOX(w1),w2,0,0,0); gtk_signal_connect(GTK_OBJECT(w2),"clicked",open_connection,0); openstartbutton = w2 = gtk_button_new_with_label("Start Game"); /* gtk_widget_show(w2); */ gtk_box_pack_start(GTK_BOX(w1),w2,0,0,0); gtk_signal_connect(GTK_OBJECT(w2),"clicked",open_connection,(gpointer)1); openresumebutton = w2 = gtk_button_new_with_label("Resume Game"); /* gtk_widget_show(w2); */ gtk_box_pack_start(GTK_BOX(w1),w2,0,0,0); gtk_signal_connect(GTK_OBJECT(w2),"clicked",open_connection,(gpointer)2); w2 = gtk_button_new_with_label("Cancel"); gtk_widget_show(w2); gtk_box_pack_end(GTK_BOX(w1),w2,0,0,0); gtk_signal_connect_object(GTK_OBJECT(w2),"clicked", close_saving_posn,GTK_OBJECT(open_dialog)); /* initialize dialog values */ open_dialog_popup(NULL,(gpointer)-1);}/* if data is -1, just set the values of the open dialog fields, to be picked up by do_connect */void open_dialog_popup(GtkWidget *w UNUSED, gpointer data) { int new = 0, join = 0, resume = 0; char buf[256]; char ht[256], pt[10], ft[256], idt[10]; int usehost = 1; ht[0] = pt[0] = idt[0] = ft[0] = 0; if ( strchr(address,':') ) { /* grrr */ if ( address[0] == ':' ) { strcpy(ht,"localhost"); strcpy(pt,address+1); } else { sscanf(address,"%[^:]:%s",ht,pt); } } else { strcpy(ft,address); usehost = 0; } /* set the default id to be our current id */ sprintf(buf,"%d",our_id); if ( (int)data == 1 ) new = 1; if ( (int)data == 0 ) join = 1; if ( (int)data == 2 ) resume = 1; gtk_entry_set_text(GTK_ENTRY(openidtext),buf); /* set the host and port etc from the address */ gtk_widget_set_sensitive(openhost,usehost); gtk_entry_set_text(GTK_ENTRY(openhosttext),ht); gtk_widget_set_sensitive(openport,usehost); gtk_entry_set_text(GTK_ENTRY(openporttext),pt); gtk_widget_set_sensitive(openfile,!usehost); gtk_entry_set_text(GTK_ENTRY(openfiletext),ft); if ( (int)data == -1 ) return; if ( join ) { gtk_widget_show(openhost); } else { gtk_widget_hide(openhost); gtk_entry_set_text(GTK_ENTRY(openhosttext),"localhost"); } gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(usehost ? openhosttoggle : openunixtoggle),1); if ( resume ) gtk_widget_show(opengamefile); else gtk_widget_hide(opengamefile); if ( new || resume ) gtk_widget_show(opengamepanel); else gtk_widget_hide(opengamepanel); if ( new ) gtk_widget_show(opentimeout); else gtk_widget_hide(opentimeout); if ( new ) gtk_widget_show(openrandomseatsbutton); else gtk_widget_hide(openrandomseatsbutton); if ( new ) gtk_widget_show(openstartbutton); else gtk_widget_hide(openstartbutton); if ( join ) gtk_widget_show(openconnectbutton); else gtk_widget_hide(openconnectbutton); if ( resume ) gtk_widget_show(openresumebutton); else gtk_widget_hide(openresumebutton); dialog_popup(open_dialog,DPCentredOnce); if ( new ) gtk_widget_grab_focus(openstartbutton); if ( join ) gtk_widget_grab_focus(openconnectbutton); if ( resume ) gtk_widget_grab_focus(openresumebutton);}/* an accelerator group for the turn dialog */static GtkAccelGroup *turn_accel;/* this little function is used to install or remove the turn accelerators */static void add_or_remove_turn_accels(GtkWidget *w UNUSED, gpointer data){ if ( turn_accel == NULL ) return; if ( data ) { gtk_window_add_accel_group(GTK_WINDOW(topwindow),turn_accel); } else { gtk_window_remove_accel_group(GTK_WINDOW(topwindow),turn_accel); }}/* the turn dialog: buttons for Discard (also declares specs), Kong (concealed, of course), Add to Pung, Mah Jong */void turn_dialog_init(void) { GtkWidget *box, *butbox, *w; if ( turn_dialog ) { gtk_widget_destroy(turn_dialog); turn_dialog = NULL; } switch ( dialogs_position ) { case DialogsCentral: case DialogsUnspecified: turn_dialog = gtk_event_box_new(); gtk_fixed_put(GTK_FIXED(discard_area),turn_dialog,0,0); break; case DialogsBelow: turn_dialog = gtk_event_box_new(); gtk_box_pack_start(GTK_BOX(dialoglowerbox),turn_dialog,1,0,0); break; case DialogsPopup: turn_dialog = gtk_window_new(GTK_WINDOW_DIALOG); gtk_signal_connect (GTK_OBJECT (turn_dialog), "delete_event", GTK_SIGNAL_FUNC (gtk_widget_hide), NULL); } box = gtk_vbox_new(0,dialog_vert_spacing); gtk_container_set_border_width(GTK_CONTAINER(box), dialog_border_width); gtk_widget_show(box); gtk_container_add(GTK_CONTAINER(turn_dialog),box); butbox = gtk_hbox_new(1,dialog_button_spacing); gtk_widget_show(butbox); gtk_box_pack_end(GTK_BOX(box),butbox,0,0,0); turn_dialog_label = w = gtk_label_new("Select tile and:"); gtk_widget_show(w); gtk_box_pack_end(GTK_BOX(box),w,0,0,0); turn_accel = gtk_accel_group_new(); w = gtk_button_new_with_label("Discard"); gtk_widget_show(w); gtk_box_pack_start(GTK_BOX(butbox),w,1,1,0); /* so other function can set it */ turn_dialog_discard_button = w; gtk_signal_connect(GTK_OBJECT(w),"clicked", turn_callback,(gpointer)PMsgDiscard); gtk_accel_group_add(turn_accel,GDK_d,0,0,GTK_OBJECT(w),"clicked"); gtk_label_set_pattern(GTK_LABEL(GTK_BIN(w)->child),"_"); w = gtk_button_new_with_label("& Calling"); gtk_widget_show(w); gtk_box_pack_start(GTK_BOX(butbox),w,1,1,0); /* so other function can set it */ turn_dialog_calling_button = w; /* this assumes knowledge that protocol enums don't go above 1000000 */ gtk_signal_connect(GTK_OBJECT(w),"clicked", turn_callback,(gpointer)(PMsgDiscard+1000000)); gtk_accel_group_add(turn_accel,GDK_c,0,0,GTK_OBJECT(w),"clicked"); gtk_label_set_pattern(GTK_LABEL(GTK_BIN(w)->child)," _"); w = gtk_button_new_with_label("Kong"); GTK_WIDGET_UNSET_FLAGS(w,GTK_CAN_FOCUS); gtk_widget_show(w); gtk_box_pack_start(GTK_BOX(butbox),w,1,1,0); gtk_signal_connect(GTK_OBJECT(w),"clicked", turn_callback,(gpointer)PMsgDeclareClosedKong); gtk_accel_group_add(turn_accel,GDK_k,0,0,GTK_OBJECT(w),"clicked"); gtk_label_set_pattern(GTK_LABEL(GTK_BIN(w)->child),"_"); w = gtk_button_new_with_label("Add to Pung"); GTK_WIDGET_UNSET_FLAGS(w,GTK_CAN_FOCUS); gtk_widget_show(w); gtk_box_pack_start(GTK_BOX(butbox),w,1,1,0); gtk_signal_connect(GTK_OBJECT(w),"clicked", turn_callback,(gpointer)PMsgAddToPung); gtk_accel_group_add(turn_accel,GDK_p,0,0,GTK_OBJECT(w),"clicked"); gtk_label_set_pattern(GTK_LABEL(GTK_BIN(w)->child)," _"); w = gtk_button_new_with_label("Mah Jong!"); GTK_WIDGET_UNSET_FLAGS(w,GTK_CAN_FOCUS); gtk_widget_show(w); gtk_box_pack_start(GTK_BOX(butbox),w,1,1,0); gtk_signal_connect(GTK_OBJECT(w),"clicked", turn_callback,(gpointer)PMsgMahJong); gtk_accel_group_add(turn_accel,GDK_m,0,0,GTK_OBJECT(w),"clicked"); gtk_label_set_pattern(GTK_LABEL(GTK_BIN(w)->child),"_"); gtk_signal_connect(GTK_OBJECT(turn_dialog),"hide", add_or_remove_turn_accels,(gpointer)0); gtk_signal_connect(GTK_OBJECT(turn_dialog),"show", add_or_remove_turn_accels,(gpointer)1);} /* dialog for scoring phase: forming closed sets */static GtkWidget *scoring_done, *scoring_special;static GtkAccelGroup *scoring_accel;static void add_or_remove_scoring_accels(GtkWidget *w UNUSED, gpointer data){ if ( scoring_accel == NULL ) return; if ( data ) { gtk_window_add_accel_group(GTK_WINDOW(topwindow),scoring_accel); } else { gtk_window_remove_accel_group(GTK_WINDOW(topwindow),scoring_accel); }}void scoring_dialog_init(void) { GtkWidget *box, *butbox, *w; if ( scoring_dialog ) { gtk_widget_destroy(scoring_dialog); scoring_dialog = NULL; } switch ( dialogs_position ) { case DialogsCentral: case DialogsUnspecified: scoring_dialog = gtk_event_box_new(); gtk_fixed_put(GTK_FIXED(discard_area),scoring_dialog,0,0); break; case DialogsBelow: scoring_dialog = gtk_event_box_new(); gtk_box_pack_start(GTK_BOX(dialoglowerbox),scoring_dialog,1,0,0); break; case DialogsPopup: scoring_dialog = gtk_window_new(GTK_WINDOW_DIALOG); gtk_signal_connect (GTK_OBJECT (scoring_dialog), "delete_event", GTK_SIGNAL_FUNC (gtk_widget_hide), NULL); } box = gtk_vbox_new(0,dialog_vert_spacing); gtk_container_set_border_width(GTK_CONTAINER(box), dialog_border_width); gtk_widget_show(box); gtk_container_add(GTK_CONTAINER(scoring_dialog),box); butbox = gtk_hbox_new(1,dialog_button_spacing); gtk_widget_show(butbox); gtk_box_pack_end(GTK_BOX(box),butbox,0,0,0); w = gtk_label_new("Declare concealed sets\nSelect 1st tile and:"); gtk_widget_show(w); gtk_box_pack_end(GTK_BOX(box),w,0,0,0); scoring_accel = gtk_accel_group_new(); w = gtk_button_new_with_label("Eyes"); GTK_WIDGET_UNSET_FLAGS(w,GTK_CAN_FOCUS); gtk_widget_show(w); gtk_box_pack_start(GTK_BOX(butbox),w,1,1,0); gtk_signal_connect(GTK_OBJECT(w),"clicked", turn_callback,(gpointer)PMsgFormClosedPair); gtk_accel_group_add(scoring_accel,GDK_e,0,0,GTK_OBJECT(w),"clicked"); gtk_label_set_pattern(GTK_LABEL(GTK_BIN(w)->child),"_"); w = gtk_button_new_with_label("Chow");
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -