X-Git-Url: http://winboard.nl/cgi-bin?a=blobdiff_plain;f=dialogs.c;h=586e62895853d42d1922e5dd0d015798541bf885;hb=94cd32222362d41e436ac6d9d308b397e61c91b8;hp=6b02fdcf762e4d89142cda34f94d0fc3ad492da5;hpb=06f5b4f9a88d2b7abf18f964f6e7dbd17d8767c1;p=xboard.git diff --git a/dialogs.c b/dialogs.c index 6b02fdc..586e628 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,7 +263,7 @@ 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):") }, @@ -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); } @@ -1769,22 +1792,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 +1838,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 +1884,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 +1909,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 +1921,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 +1941,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