static void ModifyClickButton ( GtkWidget *pw, movefilterwidget *pmfw ) { int fOK; GtkWidget *pwDialog; GtkWidget *pwMoveFilterSetup; movefilter aamf[ MAX_FILTER_PLIES ][ MAX_FILTER_PLIES ]; memcpy ( aamf, pmfw->pmf, sizeof ( aamf ) ); pwMoveFilterSetup = MoveFilterSetup( aamf, &fOK ); pwDialog = GTKCreateDialog( _("GNU Backgammon - Move filter setup"), DT_QUESTION, pw, DIALOG_FLAG_MODAL, G_CALLBACK( MoveFilterSetupOK ), pwMoveFilterSetup ); gtk_container_add( GTK_CONTAINER( DialogArea( pwDialog, DA_MAIN ) ), pwMoveFilterSetup ); GTKRunDialog(pwDialog); if( fOK ) { memcpy ( pmfw->pmf, aamf, sizeof ( aamf ) ); MoveFilterChanged ( pmfw ); } }
extern void GTKShowMatchEquityTable( const unsigned int nMatchTo, const int anScore[ 2 ] ) { /* FIXME: Widget should update after 'Invert' or 'Load ...' */ int i; char sz[ 50 ]; GtkWidget *pwDialog = GTKCreateDialog( _("GNU Backgammon - Match equity table"), DT_INFO, NULL, DIALOG_FLAG_MODAL, NULL, NULL ); GtkWidget *pwNotebook = gtk_notebook_new (); GtkWidget *pwLoad = gtk_button_new_with_label(_("Load table...")); GtkWidget *pwInvertButton = gtk_toggle_button_new_with_label(_("Invert table")); metwidget mw; mw.nMatchTo = nMatchTo; mw.anAway[ 0 ] = (nMatchTo - (unsigned)anScore[ 0 ]) - 1; mw.anAway[ 1 ] = (nMatchTo - (unsigned)anScore[ 1 ]) - 1; gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(pwInvertButton), fInvertMET); gtk_container_set_border_width( GTK_CONTAINER( pwNotebook ), 4 ); gtk_container_add( GTK_CONTAINER( DialogArea( pwDialog, DA_MAIN ) ), pwNotebook ); gtk_container_add( GTK_CONTAINER( DialogArea( pwDialog, DA_BUTTONS ) ), pwInvertButton ); gtk_container_add( GTK_CONTAINER( DialogArea( pwDialog, DA_BUTTONS ) ), pwLoad ); mw.pwPreCrawford = GTKWriteMET ( (unsigned)mw.nMatchTo, (unsigned)mw.nMatchTo, mw.anAway[ 0 ], mw.anAway[ 1 ] ); gtk_notebook_append_page ( GTK_NOTEBOOK ( pwNotebook ), mw.pwPreCrawford, gtk_label_new ( _("Pre-Crawford") ) ); for ( i = 0; i < 2; i++ ) { sprintf ( sz, _("Post-Crawford for player %s"), ap[ i ].szName ); mw.apwPostCrawford[ i ] = GTKWriteMET ( nMatchTo , 1, mw.anAway[ i ], mw.anAway[ !i ] ); gtk_notebook_append_page ( GTK_NOTEBOOK ( pwNotebook ), mw.apwPostCrawford[ i ], gtk_label_new ( sz ) ); } gtk_window_set_default_size( GTK_WINDOW( pwDialog ), 500, 300 ); g_signal_connect( G_OBJECT( pwInvertButton ), "toggled", G_CALLBACK( invertMETlocal ), &mw ); g_signal_connect( G_OBJECT( pwLoad ), "clicked", G_CALLBACK ( loadMET ), &mw ); UpdateAllTables ( &mw ); GTKRunDialog(pwDialog); }
static void GTKViewRolloutStatistics(GtkWidget *UNUSED(widget), gpointer data){ /* Rollout statistics information */ rolloutprogress *prp = (rolloutprogress *) data; rolloutstat *prs = prp->prs; int cGames = prp->nGamesDone; int nRollouts = gtk_tree_model_iter_n_children(GTK_TREE_MODEL(prp->pwRolloutResultList), NULL ); int i; /* GTK Widgets */ GtkWidget *pwDialog; GtkWidget *pwNotebook; /* Temporary variables */ char *sz; /* Create dialog */ pwDialog = GTKCreateDialog ( _("Rollout statistics"), DT_INFO, prp->pwRolloutDialog, DIALOG_FLAG_MODAL, NULL, NULL ); gtk_window_set_default_size( GTK_WINDOW( pwDialog ), 0, 400 ); /* Create notebook pages */ pwNotebook = gtk_notebook_new (); gtk_container_set_border_width( GTK_CONTAINER( pwNotebook ), 4 ); gtk_container_add( GTK_CONTAINER( DialogArea( pwDialog, DA_MAIN ) ), pwNotebook ); for ( i = 0; i < nRollouts; i++ ) { GtkTreeIter iter; gtk_tree_model_iter_nth_child(GTK_TREE_MODEL(prp->pwRolloutResultList), &iter, NULL, i); gtk_tree_model_get(GTK_TREE_MODEL(prp->pwRolloutResultList), &iter, 0, &sz, -1); gtk_notebook_append_page ( GTK_NOTEBOOK ( pwNotebook ), GTKRolloutStatPage ( &prs[ i * 2 ], cGames ), gtk_label_new ( sz ) ); g_free(sz); } GTKRunDialog(pwDialog); }
static void GTKRolloutProgressStart( const cubeinfo *UNUSED(pci), const int n, rolloutstat aars[][ 2 ], rolloutcontext *prc, char asz[][ 40 ], gboolean multiple, void **pp ) { gchar *sz; GtkWidget *pwVbox; GtkWidget *pwButtons; GtkWidget *pwhbox; rolloutprogress *prp = (rolloutprogress *) g_malloc( sizeof ( rolloutprogress ) ); *pp = prp; prp->prs = (rolloutstat *) aars; prp->n = n; prp->stopped = 0; fInterrupt = FALSE; AllocTextList(prp); prp->pwRolloutDialog = GTKCreateDialog( _("GNU Backgammon - Rollout"), DT_INFO, NULL, DIALOG_FLAG_MODAL | DIALOG_FLAG_MINMAXBUTTONS | DIALOG_FLAG_NOTIDY, NULL, NULL ); prp->pwRolloutViewStat = gtk_button_new_with_label ( _("View statistics") ); prp->pwRolloutStop = gtk_button_new_with_label( _("Stop") ); if (multiple) prp->pwRolloutStopAll = gtk_button_new_with_label( _("Stop All") ); pwOldGrab = pwGrab; pwGrab = prp->pwRolloutDialog; prp->nRolloutSignal = g_signal_connect( G_OBJECT( prp->pwRolloutDialog ), "destroy", G_CALLBACK( RolloutCancel ), prp ); /* Buttons */ pwButtons = DialogArea( prp->pwRolloutDialog, DA_BUTTONS ); prp->pwRolloutOK = DialogArea( prp->pwRolloutDialog, DA_OK ); gtk_container_add( GTK_CONTAINER( pwButtons ), prp->pwRolloutStop ); if (multiple) gtk_container_add( GTK_CONTAINER( pwButtons ), prp->pwRolloutStopAll ); if ( aars && (prc->nGamesDone == 0) ) gtk_container_add( GTK_CONTAINER( pwButtons ), prp->pwRolloutViewStat ); gtk_widget_set_sensitive( prp->pwRolloutOK, FALSE ); gtk_widget_set_sensitive( prp->pwRolloutViewStat, FALSE ); /* Setup signal */ g_signal_connect( G_OBJECT( prp->pwRolloutStop ), "clicked", G_CALLBACK( RolloutStop ), prp ); if (multiple) g_signal_connect( G_OBJECT( prp->pwRolloutStopAll ), "clicked", G_CALLBACK( RolloutStopAll ), prp); g_signal_connect( G_OBJECT( prp->pwRolloutViewStat ), "clicked", G_CALLBACK( GTKViewRolloutStatistics ), prp ); pwVbox = gtk_vbox_new( FALSE, 4 ); create_rollout_list(n, asz, &prp->pwRolloutResult, &prp->pwRolloutResultList, prc->fCubeful); prp->pwRolloutProgress = gtk_progress_bar_new(); gtk_box_pack_start( GTK_BOX( pwVbox ), prp->pwRolloutResult, TRUE, TRUE, 0 ); gtk_box_pack_start( GTK_BOX( pwVbox ), prp->pwRolloutProgress, FALSE, FALSE, 0 ); /* time elapsed and left */ pwhbox = gtk_hbox_new( FALSE, 4 ); gtk_box_pack_start( GTK_BOX( pwVbox ), pwhbox, FALSE, FALSE, 0 ); gtk_box_pack_start( GTK_BOX( pwhbox ), gtk_label_new( _("Time elapsed" ) ), FALSE, FALSE, 4 ); gtk_box_pack_start( GTK_BOX( pwhbox ), prp->pwElapsed = gtk_label_new( _("n/a") ), FALSE, FALSE, 4 ); gtk_box_pack_start( GTK_BOX( pwhbox ), gtk_label_new( _("Estimated time left" ) ), FALSE, FALSE, 4 ); gtk_box_pack_start( GTK_BOX( pwhbox ), prp->pwLeft = gtk_label_new( _("n/a") ), FALSE, FALSE, 4 ); if ( asz && asz[ 0 ] && *asz[ 0 ] ) sz = g_strdup_printf( _("Estimated SE for \"%s\" after %d trials " ), asz[ 0 ], prc->nTrials ); else sz = g_strdup_printf( _("Estimated SE after %d trials " ), prc->nTrials ); gtk_box_pack_start( GTK_BOX( pwhbox ), gtk_label_new( sz ), FALSE, FALSE, 4 ); g_free( sz ); gtk_box_pack_start( GTK_BOX( pwhbox ), prp->pwSE = gtk_label_new( _("n/a") ), FALSE, FALSE, 4 ); gtk_container_add( GTK_CONTAINER( DialogArea( prp->pwRolloutDialog, DA_MAIN ) ), pwVbox ); gtk_widget_show_all( prp->pwRolloutDialog ); /* record start time */ time( &prp->tStart ); }
static void UpdateColour3d(GtkButton * UNUSED(button), UpdateDetails * pDetails) { curDetails = pDetails; col3d = pDetails->mat; if (pwColourDialog3d == NULL) { pwColourDialog3d = GTKCreateDialog(_("3d Colour selection"), DT_QUESTION, pDetails->preview, DIALOG_FLAG_MODAL | DIALOG_FLAG_NORESPONSE, NULL, NULL); AddWidgets(DialogArea(pwColourDialog3d, DA_MAIN)); g_signal_connect(pwColourDialog3d, "response", G_CALLBACK(DialogClose), NULL); } else gtk_widget_show(pwColourDialog3d); /* Avoid updating preview */ bUpdate = FALSE; /* Setup widgets */ gtk_color_button_set_from_farray(GTK_COLOR_BUTTON(pcpAmbient), col3d.ambientColour); gtk_color_button_set_from_farray(GTK_COLOR_BUTTON(pcpDiffuse), col3d.diffuseColour); gtk_color_button_set_from_farray(GTK_COLOR_BUTTON(pcpSpecular), col3d.specularColour); gtk_adjustment_set_value(padjShine, (double) col3d.shine); if (IsFlagSet(pDetails->opacity, DF_VARIABLE_OPACITY)) { useOpacity = 1; gtk_adjustment_set_value(padjOpacity, col3d.alphaBlend ? (col3d.ambientColour[3] + .001) * 100 : 100.0); } else { useOpacity = 0; if (IsFlagSet(pDetails->opacity, DF_FULL_ALPHA)) opacityValue = 1; else opacityValue = 0; } if (IsFlagSet(pDetails->textureType, TT_NONE)) useTexture = 0; else { GList *glist = GetTextureList(pDetails->textureType); gtk_list_store_clear(GTK_LIST_STORE(gtk_combo_box_get_model(GTK_COMBO_BOX(textureComboBox)))); g_list_foreach(glist, append_to_combo_box, textureComboBox); g_list_free(glist); texture_set_active(); useTexture = 1; gtk_widget_set_sensitive(GTK_WIDGET(textureComboBox), !IsFlagSet(pDetails->textureType, TT_DISABLED)); } /* Copy material - to reset if cancel pressed */ memcpy(&cancelValue, &col3d, sizeof(Material)); /* show dialog */ gtk_widget_show_all(pwColourDialog3d); if (!useOpacity) { gtk_widget_hide(psOpacity); gtk_widget_hide(pOpacitylabel); } if (!useTexture) { gtk_widget_hide(textureComboBox); gtk_widget_hide(pTexturelabel); } /* Update preview */ bUpdate = TRUE; UpdateColourPreview(); gtk_main(); }
extern void GTKShowRolls(const gint nDepth, evalcontext * pec, matchstate * pms) { GtkWidget *vbox, *hbox, *vb2; GtkAdjustment *padj; int n; rollswidget *prw = (rollswidget *) g_malloc(sizeof(rollswidget)); prw->closing = FALSE; prw->pDialog = GTKCreateDialog(_("Distribution of rolls"), DT_INFO, NULL, DIALOG_FLAG_MODAL, NULL, NULL); n = (nDepth < 1) ? 1 : nDepth; prw->pms = pms; prw->pec = pec; prw->nDepth = -1; /* not yet calculated */ /* vbox to hold tree widget and buttons */ vbox = gtk_vbox_new(FALSE, 8); gtk_container_set_border_width(GTK_CONTAINER(vbox), 8); gtk_container_add(GTK_CONTAINER(DialogArea(prw->pDialog, DA_MAIN)), vbox); /* hook to free rollswidget on widget destruction */ g_object_set_data_full(G_OBJECT(vbox), "rollswidget", prw, g_free); /* scrolled window to hold tree widget */ prw->psw = gtk_scrolled_window_new(NULL, NULL); gtk_scrolled_window_set_shadow_type(GTK_SCROLLED_WINDOW(prw->psw), GTK_SHADOW_ETCHED_IN); gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(prw->psw), GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC); gtk_box_pack_start(GTK_BOX(vbox), prw->psw, TRUE, TRUE, 0); /* buttons */ gtk_box_pack_start(GTK_BOX(vbox), gtk_hseparator_new(), FALSE, FALSE, 0); hbox = gtk_hbox_new(FALSE, 0); gtk_box_pack_start(GTK_BOX(vbox), hbox, FALSE, FALSE, 4); gtk_box_pack_start(GTK_BOX(hbox), gtk_label_new(_("Depth")), FALSE, FALSE, 4); /* Set page size to 1 */ padj = GTK_ADJUSTMENT(gtk_adjustment_new(1., 1., 5., 1., 1., 0.)); prw->pScale = gtk_hscale_new(padj); gtk_widget_set_size_request(prw->pScale, 100, -1); gtk_box_pack_start(GTK_BOX(hbox), prw->pScale, FALSE, FALSE, 4); gtk_scale_set_digits(GTK_SCALE(prw->pScale), 0); gtk_scale_set_draw_value(GTK_SCALE(prw->pScale), TRUE); /* Separate vbox to make button height correct */ vb2 = gtk_vbox_new(FALSE, 0); gtk_box_pack_start(GTK_BOX(hbox), vb2, FALSE, FALSE, 4); prw->pCancel = gtk_button_new_with_label(_("Cancel")); gtk_widget_set_size_request(prw->pCancel, -1, 27); gtk_widget_set_sensitive(prw->pCancel, FALSE); g_signal_connect(G_OBJECT(prw->pCancel), "clicked", G_CALLBACK(CancelRolls), NULL); gtk_box_pack_start(GTK_BOX(vb2), prw->pCancel, FALSE, FALSE, 4); g_signal_connect(G_OBJECT(prw->pScale), "button-press-event", G_CALLBACK(DepthEvent), prw); g_signal_connect(G_OBJECT(prw->pScale), "button-release-event", G_CALLBACK(DepthEvent), prw); g_signal_connect(G_OBJECT(prw->pScale), "value-changed", G_CALLBACK(DepthChanged), prw); /* tree */ if ((prw->ptv = RollsTree(n, pec, pms)) != 0) { gtk_container_add(GTK_CONTAINER(prw->psw), prw->ptv); prw->nDepth = n; } gtk_window_set_default_size(GTK_WINDOW(prw->pDialog), 560, 400); g_signal_connect(G_OBJECT(prw->pDialog), "delete_event", G_CALLBACK(RollsClose), prw); /* In case closed mid calculation */ GTKRunDialog(prw->pDialog); }