Ejemplo n.º 1
0
static void
EvalMoves(hintdata * phd, evalcontext * pec)
{
    GList *pl;
    cubeinfo ci;
    int *ai;
    GList *plSelList = MoveListGetSelectionList(phd);

    if (!plSelList)
        return;

    GetMatchStateCubeInfo(&ci, &ms);

    for (pl = plSelList; pl; pl = pl->next) {
        scoreData sd;
        sd.pm = MoveListGetMove(phd, pl);
        sd.pci = &ci;
        sd.pec = pec;

        if (RunAsyncProcess((AsyncFun) asyncScoreMove, &sd, _("Evaluating positions...")) != 0) {
            MoveListFreeSelectionList(plSelList);
            return;
        }

        /* Calling RefreshMoveList here requires some extra work, as
         * it may reorder moves */
        MoveListUpdate(phd);
    }
    MoveListFreeSelectionList(plSelList);

    MoveListClearSelection(0, 0, phd);

    ai = (int *) malloc(phd->pml->cMoves * sizeof(int));
    RefreshMoveList(phd->pml, ai);

    if (phd->piHighlight && phd->pml->cMoves)
        *phd->piHighlight = ai[*phd->piHighlight];

    free(ai);

    find_skills(phd->pmr, &ms, -1, -1);
    MoveListUpdate(phd);
    if (phd->hist) {
        SetAnnotation(pmrCurAnn);
        ChangeGame(NULL);
    }
}
Ejemplo n.º 2
0
extern void MoveListRefreshSize(void)
{
  custom_cell_renderer_invalidate_size();
  if (pwMoveAnalysis)
  {
    hintdata *phd = (hintdata *)g_object_get_data(G_OBJECT(pwMoveAnalysis), "user_data");
    MoveListUpdate(phd);
  }
}
Ejemplo n.º 3
0
static void
MoveListMWC(GtkWidget * pw, hintdata * phd)
{
    char sz[80];
    int f = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(pw));

    if (f != fOutputMWC) {
        sprintf(sz, "set output mwc %s", fOutputMWC ? "off" : "on");

        UserCommand(sz);
        UserCommand("save settings");
    }

    gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(pw), fOutputMWC);

    /* Make sure display is up to date */
    MoveListUpdate(phd);
    SetAnnotation(pmrCurAnn);

}
Ejemplo n.º 4
0
static void
MoveListCmarkClicked(GtkWidget * UNUSED(pw), hintdata * phd)
{
    guint new_mark;
    guint all_marked = TRUE;
    GList *pl;
    GList *plSelList = MoveListGetSelectionList(phd);
    if (!plSelList)
        return;
    for (pl = plSelList; pl; pl = pl->next) {

        move *m = MoveListGetMove(phd, pl);
        if (m->cmark == CMARK_NONE)
            all_marked = FALSE;
    }
    new_mark = all_marked ? 0 : 1;
    for (pl = plSelList; pl; pl = pl->next) {

        move *m = MoveListGetMove(phd, pl);
        m->cmark = new_mark;
    }
    MoveListFreeSelectionList(plSelList);
    MoveListUpdate(phd);
}
Ejemplo n.º 5
0
extern void MoveListCreate(hintdata *phd)
{
  static const char *aszTitleDetails[] = {
    N_("Rank"), 
    N_("Type"), 
    N_("Win"), 
    N_("W g"), 
    N_("W bg"), 
    N_("Lose"), 
    N_("L g"), 
    N_("L bg"),
    NULL, 
    N_("Diff."), 
    N_("Move")
  };
  unsigned int i;
  int showWLTree = showMoveListDetail && !phd->fDetails;

  /* Create list widget */
  GtkListStore *store;
  GtkTreeIter iter;
  GtkTreeSelection* sel;
  GtkWidget *view = gtk_tree_view_new();
  int offset = (phd->fDetails) ? 0 : MIN_COLUMN_COUNT - DETAIL_COLUMN_COUNT;

  if (showWLTree)
  {
    GtkStyle *psDefault = gtk_widget_get_style(view);

    GtkCellRenderer *renderer = custom_cell_renderer_movelist_new();
    gtk_tree_view_insert_column_with_attributes(GTK_TREE_VIEW(view), -1, aszTitleDetails[ML_COL_RANK], renderer, "movelist", 0, "rank", 1, NULL);
    gtk_tree_view_set_headers_visible(GTK_TREE_VIEW(view), FALSE);
    g_object_set(renderer, "cell-background-gdk", &psDefault->bg[GTK_STATE_NORMAL],
        "cell-background-set", TRUE, NULL);

    g_object_set_data(G_OBJECT(view), "hintdata", phd);
  }
  else
  {
    GtkCellRenderer *renderer = gtk_cell_renderer_text_new ();
    g_object_set(renderer, "ypad", 0, NULL);

    gtk_tree_view_insert_column_with_attributes(GTK_TREE_VIEW(view), -1, aszTitleDetails[ML_COL_RANK], renderer, "text", ML_COL_RANK, "foreground", ML_COL_FGCOL + offset, NULL);
    gtk_tree_view_insert_column_with_attributes(GTK_TREE_VIEW(view), -1, aszTitleDetails[ML_COL_TYPE], renderer, "text", ML_COL_TYPE, "foreground", ML_COL_FGCOL + offset, NULL);

    if (phd->fDetails)
    {
      gtk_tree_view_insert_column_with_attributes(GTK_TREE_VIEW(view), -1, aszTitleDetails[ML_COL_WIN], renderer, "text", ML_COL_WIN, "foreground", ML_COL_FGCOL + offset, NULL);
      gtk_tree_view_insert_column_with_attributes(GTK_TREE_VIEW(view), -1, aszTitleDetails[ML_COL_GWIN], renderer, "text", ML_COL_GWIN, "foreground", ML_COL_FGCOL + offset, NULL);
      gtk_tree_view_insert_column_with_attributes(GTK_TREE_VIEW(view), -1, aszTitleDetails[ML_COL_BGWIN], renderer, "text", ML_COL_BGWIN, "foreground", ML_COL_FGCOL + offset, NULL);
      gtk_tree_view_insert_column_with_attributes(GTK_TREE_VIEW(view), -1, aszTitleDetails[ML_COL_LOSS], renderer, "text", ML_COL_LOSS, "foreground", ML_COL_FGCOL + offset, NULL);
      gtk_tree_view_insert_column_with_attributes(GTK_TREE_VIEW(view), -1, aszTitleDetails[ML_COL_GLOSS], renderer, "text", ML_COL_GLOSS, "foreground", ML_COL_FGCOL + offset, NULL);
      gtk_tree_view_insert_column_with_attributes(GTK_TREE_VIEW(view), -1, aszTitleDetails[ML_COL_BGLOSS], renderer, "text", ML_COL_BGLOSS, "foreground", ML_COL_FGCOL + offset, NULL);
    }

    gtk_tree_view_insert_column_with_attributes(GTK_TREE_VIEW(view), -1, aszTitleDetails[ML_COL_EQUITY], renderer, "text", ML_COL_EQUITY + offset, "foreground", ML_COL_FGCOL + offset, NULL);
    gtk_tree_view_insert_column_with_attributes(GTK_TREE_VIEW(view), -1, aszTitleDetails[ML_COL_DIFF], renderer, "text", ML_COL_DIFF + offset, "foreground", ML_COL_FGCOL + offset, NULL);
    gtk_tree_view_insert_column_with_attributes(GTK_TREE_VIEW(view), -1, aszTitleDetails[ML_COL_MOVE], renderer, "text", ML_COL_MOVE + offset, "foreground", ML_COL_FGCOL + offset, NULL);
  }

  phd->pwMoves = view;

  sel = gtk_tree_view_get_selection(GTK_TREE_VIEW(view));
  gtk_tree_selection_set_mode(sel, GTK_SELECTION_MULTIPLE);

  g_signal_connect(view, "row-activated", G_CALLBACK(HintDoubleClick), phd);
  g_signal_connect(sel, "changed", G_CALLBACK(HintSelect), phd);


  /* Add empty rows */
  if (phd->fDetails)
    store = gtk_list_store_new(DETAIL_COLUMN_COUNT + 2, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_POINTER);
  else
  {
    if (showWLTree)
      store = gtk_list_store_new(2, G_TYPE_POINTER, G_TYPE_INT);
    else
      store = gtk_list_store_new(MIN_COLUMN_COUNT + 2, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_POINTER);
  }

  for (i = 0; i < phd->pml->cMoves; i++)
    gtk_list_store_append(store, &iter);

  gtk_tree_view_set_model(GTK_TREE_VIEW(view), GTK_TREE_MODEL(store));
  MoveListUpdate(phd);
}
Ejemplo n.º 6
0
static void
MoveListRolloutClicked(GtkWidget * pw, hintdata * phd)
{
    cubeinfo ci;
    int i, c, res;
    move *m;
    int *ai;
    void *p;
    GList *pl, *plSelList = MoveListGetSelectionList(phd);
    if (!plSelList)
        return;

    GetMatchStateCubeInfo(&ci, &ms);

    c = g_list_length(plSelList);

    /* setup rollout dialog */
    {
        move **ppm = (move **) malloc(c * sizeof(move *));
        cubeinfo **ppci = (cubeinfo **) malloc(c * sizeof(cubeinfo *));
        char (*asz)[40] = (char (*)[40]) malloc(40 * c);

        for (i = 0, pl = plSelList; i < c; pl = pl->next, i++) {
            m = ppm[i] = MoveListGetMove(phd, pl);
            ppci[i] = &ci;
            FormatMove(asz[i], msBoard(), m->anMove);
        }
        MoveListFreeSelectionList(plSelList);

        GTKSetCurrentParent(pw);
        RolloutProgressStart(&ci, c, NULL, &rcRollout, asz, FALSE, &p);

        res = ScoreMoveRollout(ppm, (const cubeinfo **) ppci, c, RolloutProgress, p);

        RolloutProgressEnd(&p, FALSE);

        free(asz);
        free(ppm);
        free(ppci);

        if (res < 0)
            return;

        /* If the source widget parent has been destroyed do not attempt
         * to update the hint window */
        if (!GDK_IS_WINDOW(gtk_widget_get_parent_window(pw)))
            return;

        /* Calling RefreshMoveList here requires some extra work, as
         * it may reorder moves */
        MoveListUpdate(phd);
    }

    MoveListClearSelection(0, 0, phd);

    ai = (int *) malloc(phd->pml->cMoves * sizeof(int));
    RefreshMoveList(phd->pml, ai);

    if (phd->piHighlight && phd->pml->cMoves)
        *phd->piHighlight = ai[*phd->piHighlight];

    free(ai);

    find_skills(phd->pmr, &ms, -1, -1);
    MoveListUpdate(phd);
    if (phd->hist) {
        SetAnnotation(pmrCurAnn);
        ChangeGame(NULL);
    }
}