/*
* dialogs.c -- platform-independent code for dialogs of XBoard
*
- * Copyright 2000, 2009, 2010, 2011, 2012, 2013, 2014, 2015 Free Software Foundation, Inc.
+ * Copyright 2000, 2009, 2010, 2011, 2012, 2013, 2014, 2015, 2016 Free Software Foundation, Inc.
* ------------------------------------------------------------------------
*
* GNU XBoard is free software: you can redistribute it and/or modify
SetCurrentComboSelection (Option *opt)
{
int j;
+ if(currentCps) ; else
if(!opt->textValue) opt->value = *(int*)opt->target; /* numeric */else {
for(j=0; opt->choice[j]; j++) // look up actual value in list of possible values, to get selection nr
if(*(char**)opt->target && !strcmp(*(char**)opt->target, ((char**)opt->textValue)[j])) break;
opt->value = j + (opt->choice[j] == NULL);
}
+ SetComboChoice(opt, opt->value);
return opt->value;
}
SettingsPopUp(&second);
}
+void
+RefreshSettingsDialog (ChessProgramState *cps, int val)
+{
+ if(val == 1) { // option values changed
+ if(shellUp[TransientDlg] && cps == currentCps) {
+ GenericUpdate(cps->option, -1); // normally update values when dialog is up
+ }
+ return; // and be done
+ }
+ if(val == 2) { // option list changed
+ if(!shellUp[TransientDlg] || cps != currentCps) return; // our dialog is not up, so nothing to do
+ }
+ PopDown(TransientDlg); // make sure any other dialog closes first
+ SettingsPopUp(cps); // and popup new one
+}
+
//----------------------------------------------- Load Engine --------------------------------------
char *engineDir, *engineLine, *nickName, *params;
//------------------------------------------------------ Time Control -----------------------------------
static int TcOK P((int n));
-int tmpMoves, tmpTc, tmpInc, tmpOdds1, tmpOdds2, tcType;
+int tmpMoves, tmpTc, tmpInc, tmpOdds1, tmpOdds2, tcType, by60;
static void SetTcType P((int n));
{ 0, 0, 0, NULL, (void*) &SetTcType, NULL, NULL, Button, N_("classical") },
{ 0,SAME_ROW,0,NULL, (void*) &SetTcType, NULL, NULL, Button, N_("incremental") },
{ 0,SAME_ROW,0,NULL, (void*) &SetTcType, NULL, NULL, Button, N_("fixed max") },
+{ 0, 0, 0, NULL, (void*) &by60, "", NULL, CheckBox, N_("Divide entered times by 60") },
{ 0, 0, 200, NULL, (void*) &tmpMoves, NULL, NULL, Spin, N_("Moves per session:") },
{ 0, 0,10000, NULL, (void*) &tmpTc, NULL, NULL, Spin, N_("Initial time (min):") },
{ 0, 0, 10000, NULL, (void*) &tmpInc, NULL, NULL, Spin, N_("Increment or max (sec/move):") },
static int
TcOK (int n)
{
- char *tc;
+ char *tc, buf[MSG_SIZ];
if(tcType == 0 && tmpMoves <= 0) return 0;
if(tcType == 2 && tmpInc <= 0) return 0;
- GetWidgetText(&tcOptions[4], &tc); // get original text, in case it is min:sec
+ GetWidgetText(&tcOptions[5], &tc); // get original text, in case it is min:sec
+ if(by60) snprintf(buf, MSG_SIZ, "%d:%02d", tmpTc/60, tmpTc%60), tc=buf;
searchTime = 0;
switch(tcType) {
case 0:
case 1:
if(!ParseTimeControl(tc, tmpInc, 0)) return 0;
ASSIGN(appData.timeControl, tc);
- appData.timeIncrement = tmpInc;
+ appData.timeIncrement = (by60 ? tmpInc/60. : tmpInc);
break;
case 2:
- searchTime = tmpInc;
+ searchTime = (by60 ? tmpInc/60 : tmpInc);
}
appData.firstTimeOdds = first.timeOdds = tmpOdds1;
appData.secondTimeOdds = second.timeOdds = tmpOdds2;
{
switch(tcType = n) {
case 0:
- SetWidgetText(&tcOptions[3], Value(tmpMoves), TransientDlg);
- SetWidgetText(&tcOptions[4], Value(tmpTc), TransientDlg);
- SetWidgetText(&tcOptions[5], _("Unused"), TransientDlg);
+ SetWidgetText(&tcOptions[4], Value(tmpMoves), TransientDlg);
+ SetWidgetText(&tcOptions[5], Value(tmpTc), TransientDlg);
+ SetWidgetText(&tcOptions[6], _("Unused"), TransientDlg);
break;
case 1:
- SetWidgetText(&tcOptions[3], _("Unused"), TransientDlg);
- SetWidgetText(&tcOptions[4], Value(tmpTc), TransientDlg);
- SetWidgetText(&tcOptions[5], Value(tmpInc), TransientDlg);
+ SetWidgetText(&tcOptions[4], _("Unused"), TransientDlg);
+ SetWidgetText(&tcOptions[5], Value(tmpTc), TransientDlg);
+ SetWidgetText(&tcOptions[6], Value(tmpInc), TransientDlg);
break;
case 2:
- SetWidgetText(&tcOptions[3], _("Unused"), TransientDlg);
SetWidgetText(&tcOptions[4], _("Unused"), TransientDlg);
- SetWidgetText(&tcOptions[5], Value(tmpInc), TransientDlg);
+ SetWidgetText(&tcOptions[5], _("Unused"), TransientDlg);
+ SetWidgetText(&tcOptions[6], Value(tmpInc), TransientDlg);
}
}
void
TimeControlProc ()
{
+ if(gameMode != BeginningOfGame) {
+ DisplayError(_("Changing time control during a game is not implemented"), 0);
+ return;
+ }
tmpMoves = appData.movesPerSession;
tmpInc = appData.timeIncrement; if(tmpInc < 0) tmpInc = 0;
tmpOdds1 = tmpOdds2 = 1; tcType = 0;
tmpTc = atoi(appData.timeControl);
+ by60 = 0;
GenericPopUp(tcOptions, _("Time Control"), TransientDlg, BoardWindow, MODAL, 0);
SetTcType(searchTime ? 2 : appData.timeIncrement < 0 ? 0 : 1);
}
static Option *
Exp (int n, int x, int y)
{
- static int but1, but3, oldW, oldH;
+ static int but1, but3, oldW, oldH, oldX, oldY;
int menuNr = -3, sizing, f, r;
TimeMark now;
extern Boolean right;
}
if(n == 0) { // motion
+ oldX = x; oldY = y;
if(SeekGraphClick(Press, x, y, 1)) return NULL;
if((but1 || dragging == 2) && !PromoScroll(x, y)) DragPieceMove(x, y);
if(but3) MovePV(x, y, lineGap + BOARD_HEIGHT * (squareSize + lineGap));
case 3: menuNr = RightClick(Press, x, y, &pmFromX, &pmFromY), but3 = 1; break;
case -2: shiftKey = !shiftKey;
case -3: menuNr = RightClick(Release, x, y, &pmFromX, &pmFromY), but3 = 0; break;
- case 4: BackwardEvent(); break;
- case 5: ForwardEvent(); break;
+ case 4: Wheel(-1, oldX, oldY); break;
+ case 5: Wheel(1, oldX, oldY); break;
case 10:
sizing = (oldW != x || oldH != y);
oldW = x; oldH = y;