X-Git-Url: http://winboard.nl/cgi-bin?a=blobdiff_plain;f=dialogs.c;h=c8c7fc2dc7a0a26ffdf98deaee9f72933b636196;hb=fbcf1f3b86b144dd4940b326c32d4b105c0f74b3;hp=f257a83456ad8fc10972a3e46657aa7d5219a6f2;hpb=12f5e5903b89d405f10521788b900d8added456f;p=xboard.git diff --git a/dialogs.c b/dialogs.c index f257a83..c8c7fc2 100644 --- a/dialogs.c +++ b/dialogs.c @@ -235,9 +235,9 @@ GenericReadout (Option *opts, int selected) //------------------------------------------- Match Options ------------------------------------------------------ char *engineName, *engineChoice, *tfName; -char *engineList[MAXENGINES] = {" "}, *engineMnemonic[MAXENGINES] = {""}; +char *engineList[MAXENGINES] = {" "}, *engineMnemonic[MAXENGINES]; -static void AddToTourney P((int n)); +static void AddToTourney P((int n, int sel)); static void CloneTourney P((void)); static void ReplaceParticipant P((void)); static void UpgradeParticipant P((void)); @@ -263,17 +263,17 @@ static Option matchOptions[] = { { 150, T_VSCRL | T_FILL | T_WRAP, 175, NULL, (void*) &engineName, "", NULL, TextBox, "" }, { 150, SAME_ROW|RR, - 175, NULL, (void*) (engineMnemonic+1), (char*) &AddToTourney, NULL, ListBox, "" }, + 175, NULL, (void*) engineMnemonic, (char*) &AddToTourney, NULL, ListBox, "" }, //{ 0, COMBO_CALLBACK | NO_GETTEXT, // 0, NULL, (void*) &AddToTourney, (char*) (engineMnemonic+1), (engineMnemonic+1), ComboBox, N_("Select Engine:") }, { 0, 0, 10, NULL, (void*) &appData.tourneyType, "", NULL, Spin, N_("Tourney type (0 = round-robin, 1 = gauntlet):") }, { 0, 1, 1000000000, NULL, (void*) &appData.tourneyCycles, "", NULL, Spin, N_("Number of tourney cycles (or Swiss rounds):") }, { 0, 1, 1000000000, NULL, (void*) &appData.defaultMatchGames, "", NULL, Spin, N_("Default Number of Games in Match (or Pairing):") }, { 0, 0, 1000000000, NULL, (void*) &appData.matchPause, "", NULL, Spin, N_("Pause between Match Games (msec):") }, -{ 0, 0, 0, NULL, (void*) &appData.saveGameFile, ".pgn", NULL, FileName, N_("Save Tourney Games on:") }, -{ 0, 0, 0, NULL, (void*) &appData.loadGameFile, ".pgn", NULL, FileName, N_("Game File with Opening Lines:") }, +{ 0, 0, 0, NULL, (void*) &appData.saveGameFile, ".pgn .game", NULL, FileName, N_("Save Tourney Games on:") }, +{ 0, 0, 0, NULL, (void*) &appData.loadGameFile, ".pgn .game", NULL, FileName, N_("Game File with Opening Lines:") }, { 0, -2, 1000000000, NULL, (void*) &appData.loadGameIndex, "", NULL, Spin, N_("Game Number (-1 or -2 = Auto-Increment):") }, -{ 0, 0, 0, NULL, (void*) &appData.loadPositionFile, ".fen", NULL, FileName, N_("File with Start Positions:") }, +{ 0, 0, 0, NULL, (void*) &appData.loadPositionFile, ".fen .epd .pos", NULL, FileName, N_("File with Start Positions:") }, { 0, -2, 1000000000, NULL, (void*) &appData.loadPositionIndex, "", NULL, Spin, N_("Position Number (-1 or -2 = Auto-Increment):") }, { 0, 0, 1000000000, NULL, (void*) &appData.rewindIndex, "", NULL, Spin, N_("Rewind Index after this many Games (0 = never):") }, { 0, 0, 0, NULL, (void*) &appData.defNoBook, "", NULL, CheckBox, N_("Disable own engine books by default") }, @@ -313,18 +313,30 @@ CloneTourney () } static void -AddToTourney (int n) +AddToTourney (int n, int sel) { - AddLine(&matchOptions[7], engineMnemonic[SelectedListBoxItem(&matchOptions[8])+1]); + int nr; + char buf[MSG_SIZ]; + if(sel < 1) buf[0] = NULLCHAR; // back to top level + else if(engineList[sel][0] == '#') safeStrCpy(buf, engineList[sel], MSG_SIZ); // group header, open group + else { // normal line, select engine + AddLine(&matchOptions[7], engineMnemonic[sel]); + return; + } + nr = NamesToList(firstChessProgramNames, engineList, engineMnemonic, buf); // replace list by only the group contents + ASSIGN(engineMnemonic[0], buf); + LoadListBox(&matchOptions[8], _("# no engines are installed")); + HighlightWithScroll(&matchOptions[8], 0, nr); } void MatchOptionsProc () { - NamesToList(firstChessProgramNames, engineList, engineMnemonic, "all"); + NamesToList(firstChessProgramNames, engineList, engineMnemonic, ""); matchOptions[9].min = -(appData.pairingEngine[0] != NULLCHAR); // with pairing engine, allow Swiss ASSIGN(tfName, appData.tourneyFile[0] ? appData.tourneyFile : MakeName(appData.defName)); ASSIGN(engineName, appData.participants); + ASSIGN(engineMnemonic[0], ""); GenericPopUp(matchOptions, _("Match Options"), TransientDlg, BoardWindow, MODAL, 0); } @@ -1218,9 +1230,19 @@ InstallOK (int n) static void EngSel (int n, int sel) { - if(sel < 1) return; - ASSIGN(engineLine, engineList[sel]); - InstallOK(0); + int nr; + char buf[MSG_SIZ]; + if(sel < 1) buf[0] = NULLCHAR; // back to top level + else if(engineList[sel][0] == '#') safeStrCpy(buf, engineList[sel], MSG_SIZ); // group header, open group + else { // normal line, select engine + ASSIGN(engineLine, engineList[sel]); + InstallOK(0); + return; + } + nr = NamesToList(firstChessProgramNames, engineList, engineMnemonic, buf); // replace list by only the group contents + ASSIGN(engineMnemonic[0], buf); + LoadListBox(&installOptions[1], _("# no engines are installed")); + HighlightWithScroll(&installOptions[1], 0, nr); } static void @@ -1229,10 +1251,11 @@ LoadEngineProc (int engineNr, char *title) isUCI = storeVariant = v1 = useNick = False; addToList = hasBook = True; // defaults secondEng = engineNr; if(engineLine) free(engineLine); engineLine = strdup(""); - if(engineDir) free(engineDir); engineDir = strdup(""); + if(engineDir) free(engineDir); engineDir = strdup("."); if(nickName) free(nickName); nickName = strdup(""); if(params) free(params); params = strdup(""); - NamesToList(firstChessProgramNames, engineList, engineMnemonic, "all"); + ASSIGN(engineMnemonic[0], ""); + NamesToList(firstChessProgramNames, engineList, engineMnemonic, ""); GenericPopUp(installOptions, title, TransientDlg, BoardWindow, MODAL, 0); } @@ -1431,13 +1454,13 @@ static int count; static void PromoPick P((int n)); static Option promoOptions[] = { -{ 0, 0, 0, NULL, (void*) &PromoPick, NULL, NULL, Button, "" }, -{ 0, SAME_ROW, 0, NULL, (void*) &PromoPick, NULL, NULL, Button, "" }, -{ 0, SAME_ROW, 0, NULL, (void*) &PromoPick, NULL, NULL, Button, "" }, -{ 0, SAME_ROW, 0, NULL, (void*) &PromoPick, NULL, NULL, Button, "" }, -{ 0, SAME_ROW, 0, NULL, (void*) &PromoPick, NULL, NULL, Button, "" }, -{ 0, SAME_ROW, 0, NULL, (void*) &PromoPick, NULL, NULL, Button, "" }, -{ 0, SAME_ROW, 0, NULL, (void*) &PromoPick, NULL, NULL, Button, "" }, +{ 0, 0, 0, NULL, (void*) &PromoPick, NULL, NULL, Button, NULL }, +{ 0, SAME_ROW, 0, NULL, (void*) &PromoPick, NULL, NULL, Button, NULL }, +{ 0, SAME_ROW, 0, NULL, (void*) &PromoPick, NULL, NULL, Button, NULL }, +{ 0, SAME_ROW, 0, NULL, (void*) &PromoPick, NULL, NULL, Button, NULL }, +{ 0, SAME_ROW, 0, NULL, (void*) &PromoPick, NULL, NULL, Button, NULL }, +{ 0, SAME_ROW, 0, NULL, (void*) &PromoPick, NULL, NULL, Button, NULL }, +{ 0, SAME_ROW, 0, NULL, (void*) &PromoPick, NULL, NULL, Button, NULL }, { 0, SAME_ROW | NO_OK, 0, NULL, NULL, "", NULL, EndMark , "" } }; @@ -1466,8 +1489,9 @@ PromoPick (int n) static void SetPromo (char *name, int nr, char promoChar) { - safeStrCpy(promoOptions[nr].name, name, MSG_SIZ); + ASSIGN(promoOptions[nr].name, name); promoOptions[nr].value = promoChar; + promoOptions[nr].min = SAME_ROW; } void @@ -1503,6 +1527,7 @@ PromotionPopUp () SetPromo(_("Defer"), --count, '='); SetPromo(_("Promote"), --count, '+'); } + promoOptions[count].min = 0; GenericPopUp(promoOptions + count, "Promotion", PromoDlg, BoardWindow, NONMODAL, 0); } @@ -1769,22 +1794,6 @@ DisplayTitle (char *text) SetWindowTitle(text, title, icon); } -void -DisplayWhiteClock (long timeRemaining, int highlight) -{ - if(appData.noGUI) return; - DisplayTimerLabel(11, _("White"), timeRemaining, highlight); - if(highlight) SetClockIcon(0); -} - -void -DisplayBlackClock (long timeRemaining, int highlight) -{ - if(appData.noGUI) return; - DisplayTimerLabel(12, _("Black"), timeRemaining, highlight); - if(highlight) SetClockIcon(1); -} - #define PAUSE_BUTTON "P" #define PIECE_MENU_SIZE 18 static String pieceMenuStrings[2][PIECE_MENU_SIZE+1] = { @@ -1831,15 +1840,15 @@ static void PMSelect (int n) { // user callback for board context menus if (pmFromX < 0 || pmFromY < 0) return; - if(n == 25) DropMenuEvent(dropMenuTranslation[values[n]], pmFromX, pmFromY); - else EditPositionMenuEvent(pieceMenuTranslation[n-23][values[n]], pmFromX, pmFromY); + if(n == W_DROP) DropMenuEvent(dropMenuTranslation[values[n]], pmFromX, pmFromY); + else EditPositionMenuEvent(pieceMenuTranslation[n - W_MENUW][values[n]], pmFromX, pmFromY); } int CCB (int n) { shiftKey = (ShiftKeys() & 3) != 0; - ClockClick(n == 12); + ClockClick(n == W_BLACK); } Option mainOptions[] = { // description of main window in terms of generic dialog creator @@ -1877,9 +1886,9 @@ SizeKludge (int n) { // callback called by GenericPopUp immediately after sizing the menu bar int width = BOARD_WIDTH*(squareSize + lineGap) + lineGap; int w = width - 44 - mainOptions[n].min; - mainOptions[10].max = w; // width left behind menu bar + mainOptions[W_TITLE].max = w; // width left behind menu bar if(w < 0.4*width) // if no reasonable amount of space for title, force small layout - mainOptions[13].type = mainOptions[10].type, mainOptions[10].type = -1; + mainOptions[W_SMALL].type = mainOptions[W_TITLE].type, mainOptions[W_TITLE].type = -1; } void @@ -1902,7 +1911,9 @@ Exp (int n, int x, int y) if(but3) MovePV(x, y, lineGap + BOARD_HEIGHT * (squareSize + lineGap)); return NULL; } - shiftKey = (ShiftKeys() & 3) != 0; + shiftKey = ShiftKeys(); + controlKey = (shiftKey & 0xC) != 0; + shiftKey = (shiftKey & 3) != 0; switch(n) { case 1: LeftClick(Press, x, y), but1 = 1; break; case -1: LeftClick(Release, x, y), but1 = 0; break; @@ -1912,18 +1923,13 @@ Exp (int n, int x, int y) case -3: menuNr = RightClick(Release, x, y, &pmFromX, &pmFromY), but3 = 0; break; case 10: DrawPosition(True, NULL); - if(twoBoards) { // [HGM] dual: draw other board in other orientation - flipView = !flipView; partnerUp = !partnerUp; - DrawPosition(True, NULL); - flipView = !flipView; partnerUp = !partnerUp; - } default: return NULL; } switch(menuNr) { - case 0: return &mainOptions[shiftKey ? 23: 24]; - case 1: SetupDropMenu(); return &mainOptions[25]; + case 0: return &mainOptions[shiftKey ? W_MENUW: W_MENUB]; + case 1: SetupDropMenu(); return &mainOptions[W_DROP]; case 2: case -1: ErrorPopDown(); case -2: @@ -1937,21 +1943,79 @@ BoardPopUp (int squareSize, int lineGap, void *clockFontThingy) { extern Option *dialogOptions[]; int i, size = BOARD_WIDTH*(squareSize + lineGap) + lineGap; - mainOptions[11].choice = (char**) clockFontThingy; - mainOptions[12].choice = (char**) clockFontThingy; - mainOptions[22].value = BOARD_HEIGHT*(squareSize + lineGap) + lineGap; - mainOptions[22].max = mainOptions[13].max = size; // board size - mainOptions[13].max = size - 2; // board title (subtract border!) - mainOptions[12].max = mainOptions[11].max = size/2-3; // clock width - mainOptions[14].max = appData.showButtonBar ? size-130 : size-2; // message - mainOptions[0].max = size-40; // menu bar - mainOptions[10].type = appData.titleInWindow ? Label : -1 ; - if(!appData.showButtonBar) for(i=15; i<22; i++) mainOptions[i].type = -1; + mainOptions[W_WHITE].choice = (char**) clockFontThingy; + mainOptions[W_BLACK].choice = (char**) clockFontThingy; + mainOptions[W_BOARD].value = BOARD_HEIGHT*(squareSize + lineGap) + lineGap; + mainOptions[W_BOARD].max = mainOptions[W_SMALL].max = size; // board size + mainOptions[W_SMALL].max = size - 2; // board title (subtract border!) + mainOptions[W_BLACK].max = mainOptions[W_WHITE].max = size/2-3; // clock width + mainOptions[W_MESSG].max = appData.showButtonBar ? size-130 : size-2; // message + mainOptions[W_MENU].max = size-40; // menu bar + mainOptions[W_TITLE].type = appData.titleInWindow ? Label : -1 ; + if(!appData.showButtonBar) for(i=W_BUTTON; i