⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 gui-dial.c

📁 支持网络和单机的麻将游戏
💻 C
📖 第 1 页 / 共 5 页
字号:
  u = gtk_hbox_new(1,dialog_button_spacing);  gtk_widget_show(u);  gtk_box_pack_start(GTK_BOX(box),u,0,0,0);  chow_accel = gtk_accel_group_new();  for (i=0;i<3;i++) {    static int keys[] = { GDK_l, GDK_m, GDK_u };    v = gtk_button_new_with_label(player_print_ChowPosition(i));    GTK_WIDGET_UNSET_FLAGS(v,GTK_CAN_FOCUS);    gtk_widget_show(v);    gtk_box_pack_start(GTK_BOX(u),v,1,1,0);    chowbuttons[i] = v;    gtk_signal_connect(GTK_OBJECT(v),"clicked",		       do_chow,(gpointer)i);    gtk_accel_group_add(chow_accel,keys[i],0,0,GTK_OBJECT(v),"clicked");    gtk_label_set_pattern(GTK_LABEL(GTK_BIN(v)->child),"_");  }  gtk_signal_connect(GTK_OBJECT(chow_dialog),"hide",    add_or_remove_chow_accels,(gpointer)0);  gtk_signal_connect(GTK_OBJECT(chow_dialog),"show",    add_or_remove_chow_accels,(gpointer)1);}/* now create the declaring specials dialog.   Contains a button for declare (special), kong, and done.   If no flowers, just kongs.*/static GtkWidget *ds_dialog_declare_button;static GtkWidget *ds_dialog_finish_button;static GtkAccelGroup *ds_accel;static void add_or_remove_ds_accels(GtkWidget *w UNUSED, gpointer data){  if ( ds_accel == NULL ) return;  if ( data ) {    gtk_window_add_accel_group(GTK_WINDOW(topwindow),ds_accel);  } else {    gtk_window_remove_accel_group(GTK_WINDOW(topwindow),ds_accel);  }}void ds_dialog_init(void) {  GtkWidget *box, *bbox, *w;  if ( ds_dialog ) {    gtk_widget_destroy(ds_dialog);    ds_dialog = NULL;  }  switch ( dialogs_position ) {  case DialogsCentral:  case DialogsUnspecified:    ds_dialog = gtk_event_box_new();    gtk_fixed_put(GTK_FIXED(discard_area),ds_dialog,0,0);    break;  case DialogsBelow:    ds_dialog = gtk_event_box_new();    gtk_box_pack_start(GTK_BOX(dialoglowerbox),ds_dialog,1,0,0);    break;  case DialogsPopup:    ds_dialog = gtk_window_new(GTK_WINDOW_DIALOG);    gtk_signal_connect (GTK_OBJECT (ds_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(ds_dialog),box);    bbox = gtk_hbox_new(1,dialog_button_spacing);  gtk_widget_show(bbox);  gtk_box_pack_end(GTK_BOX(box),bbox,0,0,0);  if ( game_get_option_value(the_game,GOFlowers,NULL) )    w = gtk_label_new("Declare Flowers/Seasons (and kongs)\nSelect tile and:");  else    w = gtk_label_new("Declare kongs\nSelect tile and:");  gtk_widget_show(w);  gtk_box_pack_end(GTK_BOX(box),w,0,0,0);    ds_accel = gtk_accel_group_new();  if ( game_get_option_value(the_game,GOFlowers,NULL) ) {    ds_dialog_declare_button = w = gtk_button_new_with_label("Declare");    gtk_widget_show(w);    gtk_box_pack_start(GTK_BOX(bbox),w,1,1,0);    gtk_signal_connect(GTK_OBJECT(w),"clicked",		       turn_callback,(gpointer)PMsgDeclareSpecial);    gtk_accel_group_add(ds_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("Kong");  gtk_widget_show(w);  gtk_box_pack_start(GTK_BOX(bbox),w,1,1,0);  gtk_signal_connect(GTK_OBJECT(w),"clicked",		     turn_callback,(gpointer)PMsgDeclareClosedKong);  gtk_accel_group_add(ds_accel,GDK_k,0,0,GTK_OBJECT(w),"clicked");  gtk_label_set_pattern(GTK_LABEL(GTK_BIN(w)->child),"_");  ds_dialog_finish_button = w = gtk_button_new_with_label("Finish");  gtk_widget_show(w);  gtk_box_pack_start(GTK_BOX(bbox),w,1,1,0);  gtk_signal_connect(GTK_OBJECT(w),"clicked",		     turn_callback,(gpointer)PMsgNoClaim);  gtk_accel_group_add(ds_accel,GDK_f,0,0,GTK_OBJECT(w),"clicked");  gtk_label_set_pattern(GTK_LABEL(GTK_BIN(w)->child),"_");  gtk_signal_connect(GTK_OBJECT(ds_dialog),"hide",    add_or_remove_ds_accels,(gpointer)0);  gtk_signal_connect(GTK_OBJECT(ds_dialog),"show",    add_or_remove_ds_accels,(gpointer)1);}void ds_dialog_popup(void) {  dialog_popup(ds_dialog,DPCentredOnce);  if ( game_get_option_value(the_game,GOFlowers,NULL) )    grab_focus_if_appropriate(ds_dialog_declare_button);  else     grab_focus_if_appropriate(ds_dialog_finish_button);}/* dialog to ask to continue with next hand */static GtkWidget *continue_dialog_continue_button;static GtkWidget *continue_dialog_label;void continue_dialog_init(void) {  GtkWidget *box, *w;  if ( continue_dialog ) {    gtk_widget_destroy(continue_dialog);    continue_dialog = NULL;  }  switch ( dialogs_position ) {  case DialogsCentral:  case DialogsUnspecified:    continue_dialog = gtk_event_box_new();    gtk_fixed_put(GTK_FIXED(discard_area),continue_dialog,0,0);    break;  case DialogsBelow:    continue_dialog = gtk_event_box_new();    gtk_box_pack_start(GTK_BOX(dialoglowerbox),continue_dialog,1,0,0);    break;  case DialogsPopup:    continue_dialog = gtk_window_new(GTK_WINDOW_DIALOG);    gtk_signal_connect (GTK_OBJECT (continue_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(continue_dialog),box);    continue_dialog_continue_button = w = gtk_button_new_with_label("Ready");  gtk_widget_show(w);  gtk_box_pack_end(GTK_BOX(box),w,0,0,0);  gtk_signal_connect(GTK_OBJECT(w),"clicked",		     continue_callback,(gpointer)PMsgDiscard);  /* created and packed second so things float to bottom */  continue_dialog_label = w = gtk_label_new("Here is some dummy text to space");  gtk_widget_show(w);  gtk_box_pack_end(GTK_BOX(box),w,0,0,0);  }void continue_dialog_popup(void) {  static char buf[256];  /* the text of the display depends on whether we've said we're ready */  if ( ! the_game->active ) {    strcpy(buf,"Waiting for game to (re)start");    gtk_label_set_text(GTK_LABEL(continue_dialog_label),buf);    gtk_widget_hide(continue_dialog_continue_button);  }  else if ( the_game->ready[our_seat] ) {    strcpy(buf,"Waiting for others ");    strcat(buf,the_game->paused);    gtk_label_set_text(GTK_LABEL(continue_dialog_label),buf);    gtk_widget_hide(continue_dialog_continue_button);  } else {    strcpy(buf,"Ready ");    strcat(buf,the_game->paused);    strcat(buf,"?");    gtk_label_set_text(GTK_LABEL(continue_dialog_label),buf);    gtk_widget_show(continue_dialog_continue_button);    grab_focus_if_appropriate(continue_dialog_continue_button);  }  dialog_popup(continue_dialog,DPCentredOnce);}static void continue_callback(GtkWidget *w UNUSED, gpointer data UNUSED) {  PMsgReadyMsg rm;  rm.type = PMsgReady;  send_packet(&rm);}/* how many are up; used for positioning - not multi-thread safe! */static int num_error_dialogs = 0; /* function called to close an error dialog */static void kill_error(GtkObject *data) {  gtk_widget_destroy(GTK_WIDGET(data));  num_error_dialogs--;}/* popup an error box (new for each message),   or an info box (which doesn't have error tile in it)' */static void _error_dialog_popup(char *msg,int iserror) {  GtkWidget *box, *hbox, *w, *error_dialog, *error_message;    if ( num_error_dialogs >= 10 ) {    warn("Too many error dialogs up to print error: %s",msg);    return;  }  error_dialog = gtk_window_new(GTK_WINDOW_DIALOG);  gtk_signal_connect_object(GTK_OBJECT (error_dialog), "delete_event",                               GTK_SIGNAL_FUNC (gtk_widget_destroy), 			    GTK_OBJECT(error_dialog));  gtk_container_set_border_width(GTK_CONTAINER(error_dialog),				 dialog_border_width);    box = gtk_vbox_new(0,dialog_vert_spacing);  gtk_widget_show(box);  gtk_container_add(GTK_CONTAINER(error_dialog),box);    hbox = gtk_hbox_new(0,dialog_button_spacing);  gtk_widget_show(hbox);  gtk_box_pack_start(GTK_BOX(box),hbox,0,0,0);  if ( iserror ) {    w = gtk_pixmap_new(tilepixmaps[0][ErrorTile],NULL);    gtk_widget_show(w);    gtk_box_pack_start(GTK_BOX(hbox),w,0,0,0);  }  error_message = gtk_label_new(msg);  gtk_widget_show(error_message);  gtk_box_pack_start(GTK_BOX(hbox),error_message,0,0,0);  w = gtk_button_new_with_label("OK");  gtk_widget_show(w);  gtk_box_pack_start(GTK_BOX(box),w,0,0,0);  gtk_signal_connect_object(GTK_OBJECT(w),"clicked",		     kill_error,GTK_OBJECT(error_dialog));  gtk_window_set_focus(GTK_WINDOW(error_dialog),w);  dialog_popup(error_dialog,DPErrorPos);  num_error_dialogs++;  gdk_window_raise(error_dialog->window);}void error_dialog_popup(char *msg) {  _error_dialog_popup(msg,1);}void info_dialog_popup(char *msg) {  _error_dialog_popup(msg,0);}GtkWidget *openfile, *openhost, *openport,  *openfiletext, *openhosttext, *openporttext, *openidtext, *opennametext,  *opengamefile, *opengamefiletext, *opentimeout;GtkWidget *openallowdisconnectbutton,*opensaveonexitbutton,*openrandomseatsbutton,  *openplayercheckboxes[3],*openplayernames[3],*openplayeroptions[3],*opentimeoutspinbutton;static GtkWidget *opengamepanel,*openplayeroptionboxes[3],  *openconnectbutton,*openstartbutton, *openresumebutton, *openhosttoggle, *openunixtoggle;/* callback used in next function */static void openbut_callback(GtkWidget *w, gpointer data) {  int active = GTK_TOGGLE_BUTTON(w)->active;  switch ( (int)data ) {  case 1:    if ( active ) {      /* selected network */      gtk_widget_set_sensitive(openfile,0);      gtk_widget_set_sensitive(openhost,1);      gtk_widget_set_sensitive(openport,1);    }    break;  case 2:    if ( active ) {      /* selected Unix socket */      gtk_widget_set_sensitive(openfile,1);      gtk_widget_set_sensitive(openhost,0);      gtk_widget_set_sensitive(openport,0);    }    break;  case 10:  case 11:  case 12:    gtk_widget_set_sensitive(openplayeroptionboxes[((int)data)-10],active);    break;  }}/* the dialog for opening a connection.   Arguments are initial values for id, name    text entry fields, */void open_dialog_init(char *idt, char *nt) {  /* Layout of the box:     x  Connect to host     x  Use Unix socket     Hostname     ........     Port      ....     Filename     ....     Player ID     ....     Name     ....     OPEN CANCEL  */  int i;  GtkWidget *box, *bbox, *but1, *but2, *w1, *w2;  open_dialog = gtk_window_new(GTK_WINDOW_TOPLEVEL);  /* This one is allowed to shrink, and should */  gtk_window_set_policy(GTK_WINDOW(open_dialog),1,1,1);  gtk_signal_connect (GTK_OBJECT (open_dialog), "delete_event",                               GTK_SIGNAL_FUNC (gtk_widget_hide), NULL);  gtk_container_set_border_width(GTK_CONTAINER(open_dialog),				 dialog_border_width);    box = gtk_vbox_new(0,dialog_vert_spacing);  gtk_widget_show(box);  gtk_container_add(GTK_CONTAINER(open_dialog),box);    w1 = gtk_hbox_new(0,dialog_button_spacing);  gtk_widget_show(w1);  gtk_box_pack_start(GTK_BOX(box),w1,0,0,0);  openhosttoggle = but1 = gtk_radio_button_new_with_label(NULL,"Internet server");  GTK_WIDGET_UNSET_FLAGS(but1,GTK_CAN_FOCUS);#ifndef WIN32  gtk_widget_show(but1);#endif  gtk_box_pack_start(GTK_BOX(w1),but1,0,0,0);  openunixtoggle = but2 = gtk_radio_button_new_with_label(gtk_radio_button_group(GTK_RADIO_BUTTON(but1)),"Unix socket server");  GTK_WIDGET_UNSET_FLAGS(but2,GTK_CAN_FOCUS);#ifndef WIN32  gtk_widget_show(but2);#endif  gtk_box_pack_end(GTK_BOX(w1),but2,0,0,0);  gtk_signal_connect(GTK_OBJECT(but1),"toggled",openbut_callback,(gpointer)1);  gtk_signal_connect(GTK_OBJECT(but2),"toggled",openbut_callback,(gpointer)2);  w2 = gtk_hbox_new(0,dialog_button_spacing);  gtk_widget_show(w2);  gtk_box_pack_start(GTK_BOX(box),w2,0,0,0);  openhost = gtk_hbox_new(0,0);  gtk_widget_show(openhost);  gtk_box_pack_start(GTK_BOX(w2),openhost,0,0,0);  w1 = gtk_label_new("Host: ");  gtk_widget_show(w1);  gtk_box_pack_start(GTK_BOX(openhost),w1,0,0,0);  openhosttext = gtk_entry_new();  gtk_widget_show(openhosttext);  gtk_box_pack_start(GTK_BOX(openhost),openhosttext,0,0,0);  openport = gtk_hbox_new(0,0);  gtk_widget_show(openport);  gtk_box_pack_start(GTK_BOX(w2),openport,0,0,0);  w1 = gtk_label_new("Port: ");  gtk_widget_show(w1);  gtk_box_pack_start(GTK_BOX(openport),w1,0,0,0);  openporttext = gtk_entry_new_with_max_length(5);  gtk_widget_set_usize(openporttext,75,0);  gtk_widget_show(openporttext);  gtk_box_pack_start(GTK_BOX(openport),openporttext,0,0,0);  openfile = gtk_hbox_new(0,0);

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -