Exemple #1
0
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 );
  }

}
Exemple #2
0
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();
}
Exemple #6
0
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);
}