X-Git-Url: http://winboard.nl/cgi-bin?a=blobdiff_plain;f=xoptions.c;h=d59f3c48e19a55539188c84a951537ff20ea8360;hb=c69beebf3decbe67eb92beab56bbc34c41c39831;hp=e1b4ef3e894a55664fedb862a40ee81ad3c08b18;hpb=e3328e35afa995cd96549dfe4aa7dac93873b636;p=xboard.git diff --git a/xoptions.c b/xoptions.c index e1b4ef3..d59f3c4 100644 --- a/xoptions.c +++ b/xoptions.c @@ -98,7 +98,7 @@ void SetFocus(Widget w, XtPointer data, XEvent *event, Boolean *b) XtGetValues(w, args, 1); j = 1; XtSetArg(args[0], XtNdisplayCaret, True); - if(!strchr(s, '\n')) XtSetArg(args[1], XtNinsertPosition, strlen(s)), j++; + if(!strchr(s, '\n') && strlen(s) < 80) XtSetArg(args[1], XtNinsertPosition, strlen(s)), j++; XtSetValues(w, args, j); XtSetKeyboardFocus((Widget) data, w); previous = w; @@ -237,7 +237,7 @@ void CreateComboPopup(parent, name, n, mb) // cloned from Engine Settings dialog (and later merged with it) -extern WindowPlacement wpComment, wpTags; +extern WindowPlacement wpComment, wpTags, wpMoveHistory; char *trialSound; static int oldCores, oldPonder; int MakeColors P((void)); @@ -247,7 +247,7 @@ int GenericReadout P((int selected)); Widget shells[10]; Widget marked[10]; Boolean shellUp[10]; -WindowPlacement *wp[10] = { NULL, &wpComment, &wpTags }; +WindowPlacement *wp[10] = { NULL, &wpComment, &wpTags, NULL, NULL, NULL, NULL, &wpMoveHistory }; Option *dialogOptions[10]; void MarkMenu(char *item, int dlgNr) @@ -303,13 +303,22 @@ extern Option installOptions[], matchOptions[]; char *engineNr[] = { N_("First Engine"), N_("Second Engine"), NULL }; char *engineList[100] = {" "}, *engineMnemonic[100] = {""}; -void AddLine(Option *opt, char *s) +int AppendText(Option *opt, char *s) { XawTextBlock t; + char *v; + int len; + GetWidgetText(opt, &v); + len = strlen(v); t.ptr = s; t.firstPos = 0; t.length = strlen(s); t.format = XawFmt8Bit; - XawTextReplace(opt->handle, 9999, 9999, &t); - t.ptr = "\n"; t.length = 1; - XawTextReplace(opt->handle, 9999, 9999, &t); + XawTextReplace(opt->handle, len, len, &t); + return len; +} + +void AddLine(Option *opt, char *s) +{ + AppendText(opt, s); + AppendText(opt, "\n"); } void AddToTourney(int n) @@ -320,14 +329,25 @@ void AddToTourney(int n) int MatchOK(int n) { - if(appData.participants && appData.participants[0]) free(appData.participants); - appData.participants = strdup(engineName); - if(!CreateTourney(tfName)) return !appData.participants[0]; + ASSIGN(appData.participants, engineName); + if(!CreateTourney(tfName) || matchMode) return matchMode || !appData.participants[0]; PopDown(0); // early popdown to prevent FreezeUI called through MatchEvent from causing XtGrab warning MatchEvent(2); // start tourney return 1; } +void ReplaceParticipant() +{ + GenericReadout(3); + Substitute(strdup(engineName), True); +} + +void UpgradeParticipant() +{ + GenericReadout(3); + Substitute(strdup(engineName), False); +} + Option matchOptions[] = { { 0, 0, 0, NULL, (void*) &tfName, ".trn", NULL, FileName, N_("Tournament file:") }, { 0, 0, 0, NULL, (void*) &appData.roundSync, "", NULL, CheckBox, N_("Sync after round (for concurrent playing of a single") }, @@ -344,7 +364,9 @@ Option matchOptions[] = { { 0, 0, 0, NULL, (void*) &appData.loadPositionFile, ".fen", 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*) &MatchOK, "", NULL, EndMark , "" } +{ 0, 0, 0, NULL, (void*) &ReplaceParticipant, NULL, NULL, Button, N_("Replace Engine") }, +{ 0, 1, 0, NULL, (void*) &UpgradeParticipant, NULL, NULL, Button, N_("Upgrade Engine") }, +{ 0, 1, 0, NULL, (void*) &MatchOK, "", NULL, EndMark , "" } }; int GeneralOptionsOK(int n) @@ -356,6 +378,7 @@ int GeneralOptionsOK(int n) } Option generalOptions[] = { +{ 0, 0, 0, NULL, (void*) &appData.whitePOV, "", NULL, CheckBox, N_("Absolute Analysis Scores") }, { 0, 0, 0, NULL, (void*) &appData.sweepSelect, "", NULL, CheckBox, N_("Almost Always Queen (Detour Under-Promote)") }, { 0, 0, 0, NULL, (void*) &appData.animateDragging, "", NULL, CheckBox, N_("Animate Dragging") }, { 0, 0, 0, NULL, (void*) &appData.animate, "", NULL, CheckBox, N_("Animate Moving") }, @@ -373,12 +396,14 @@ Option generalOptions[] = { { 0, 0, 0, NULL, (void*) &appData.ponderNextMove, "", NULL, CheckBox, N_("Ponder Next Move") }, { 0, 0, 0, NULL, (void*) &appData.popupExitMessage, "", NULL, CheckBox, N_("Popup Exit Messages") }, { 0, 0, 0, NULL, (void*) &appData.popupMoveErrors, "", NULL, CheckBox, N_("Popup Move Errors") }, +{ 0, 0, 0, NULL, (void*) &appData.showEvalInMoveHistory, "", NULL, CheckBox, N_("Scores in Move List") }, { 0, 0, 0, NULL, (void*) &appData.showCoords, "", NULL, CheckBox, N_("Show Coordinates") }, { 0, 0, 0, NULL, (void*) &appData.markers, "", NULL, CheckBox, N_("Show Target Squares") }, { 0, 0, 0, NULL, (void*) &appData.testLegality, "", NULL, CheckBox, N_("Test Legality") }, { 0, 0, 10, NULL, (void*) &appData.flashCount, "", NULL, Spin, N_("Flash Moves (0 = no flashing):") }, { 0, 1, 10, NULL, (void*) &appData.flashRate, "", NULL, Spin, N_("Flash Rate (high = fast):") }, { 0, 5, 100,NULL, (void*) &appData.animSpeed, "", NULL, Spin, N_("Animation Speed (high = slow):") }, +{ 0, 1, 5, NULL, (void*) &appData.zoom, "", NULL, Spin, N_("Zoom factor in Evaluation Graph:") }, { 0, 0, 0, NULL, (void*) &GeneralOptionsOK, "", NULL, EndMark , "" } }; @@ -442,8 +467,9 @@ Option variantDescriptors[] = { { VariantSuicide, 0, 135, NULL, (void*) &Pick, "#FFFFBF", NULL, Button, N_("suicide")}, { VariantCapaRandom, 1, 135, NULL, (void*) &Pick, "#BFBFFF", NULL, Button, N_("CRC (10x8)")}, { VariantGiveaway, 0, 135, NULL, (void*) &Pick, "#FFFFBF", NULL, Button, N_("give-away")}, -{ VariantSpartan, 1, 135, NULL, (void*) &Pick, "#FF0000", NULL, Button, N_("Spartan")}, +{ VariantGrand, 1, 135, NULL, (void*) &Pick, "#5070FF", NULL, Button, N_("grand (10x10)")}, { VariantLosers, 0, 135, NULL, (void*) &Pick, "#FFFFBF", NULL, Button, N_("losers")}, +{ VariantSpartan, 1, 135, NULL, (void*) &Pick, "#FF0000", NULL, Button, N_("Spartan")}, { 0, 0, 0, NULL, NULL, NULL, NULL, Label, N_("Board size ( -1 = default for selected variant):")}, { 0, -1, BOARD_RANKS-1, NULL, (void*) &appData.NrRanks, "", NULL, Spin, N_("Number of Board Ranks:") }, { 0, -1, BOARD_FILES, NULL, (void*) &appData.NrFiles, "", NULL, Spin, N_("Number of Board Files:") }, @@ -541,12 +567,27 @@ Option icsOptions[] = { { 0, 0, 0, NULL, (void*) &IcsOptionsOK, "", NULL, EndMark , "" } }; +char *modeNames[] = { N_("Exact match"), N_("Shown position is subset"), N_("Same material and Pawn chain"), N_("Same material"), NULL }; +char *modeValues[] = { "1", "2", "3", "4" }; +char *searchMode; + +int LoadOptionsOK() +{ + appData.searchMode = atoi(searchMode); + return 1; +} + Option loadOptions[] = { { 0, 0, 0, NULL, (void*) &appData.autoDisplayTags, "", NULL, CheckBox, N_("Auto-Display Tags") }, { 0, 0, 0, NULL, (void*) &appData.autoDisplayComment, "", NULL, CheckBox, N_("Auto-Display Comment") }, { 0, 0, 0, NULL, NULL, NULL, NULL, Label, N_("Auto-Play speed of loaded games\n(0 = instant, -1 = off):") }, { 0, -1, 10000000, NULL, (void*) &appData.timeDelay, "", NULL, Fractional, N_("Seconds per Move:") }, -{ 0, 0, 0, NULL, NULL, "", NULL, EndMark , "" } +{ 0, 0, 0, NULL, NULL, NULL, NULL, Label, N_("\nThresholds for position filtering in game list:") }, +{ 0, 0, 5000, NULL, (void*) &appData.eloThreshold1, "", NULL, Spin, N_("Elo of strongest player at least:") }, +{ 0, 0, 5000, NULL, (void*) &appData.eloThreshold2, "", NULL, Spin, N_("Elo of weakest player at least:") }, +{ 0, 0, 5000, NULL, (void*) &appData.dateThreshold, "", NULL, Spin, N_("No games before year:") }, +{ 1, 0, 180, NULL, (void*) &searchMode, (char*) modeNames, modeValues, ComboBox, N_("Seach mode:") }, +{ 0, 0, 0, NULL, (void*) &LoadOptionsOK, "", NULL, EndMark , "" } }; Option saveOptions[] = { @@ -660,7 +701,6 @@ void RefreshColor(int source, int n) { int col, j, r, g, b, step = 10; char *s, buf[MSG_SIZ]; // color string - Arg args[5]; GetWidgetText(¤tOption[source], &s); if(sscanf(s, "#%x", &col) != 1) return; // malformed b = col & 0xFF; g = col & 0xFF00; r = col & 0xFF0000; @@ -743,6 +783,7 @@ Option boardOptions[] = { //{ 0, 0, 0, NULL, (void*) &appData.allWhite, "", NULL, CheckBox, N_("Use Outline Pieces for Black") }, { 0, 0, 0, NULL, (void*) &appData.monoMode, "", NULL, CheckBox, N_("Mono Mode") }, { 0,-1, 5, NULL, (void*) &appData.overrideLineGap, "", NULL, Spin, N_("Line Gap ( -1 = default for board size):") }, +{ 0, 0, 0, NULL, (void*) &appData.useBitmaps, "", NULL, CheckBox, N_("Use Board Textures") }, { 0, 0, 0, NULL, (void*) &appData.liteBackTextureFile, ".xpm", NULL, FileName, N_("Light-Squares Texture File:") }, { 0, 0, 0, NULL, (void*) &appData.darkBackTextureFile, ".xpm", NULL, FileName, N_("Dark-Squares Texture File:") }, { 0, 0, 0, NULL, (void*) &appData.bitmapDirectory, "", NULL, PathName, N_("Directory with Bitmap Pieces:") }, @@ -894,7 +935,7 @@ GenericPopUp(Option *option, char *title, int dlgNr) if(currentCps) { // Settings popup for engine: format through heuristic int n = currentCps->nrOptions; - if(!n) { DisplayNote(_("Engine has no options")); return 0; } + if(!n) { DisplayNote(_("Engine has no options")); currentCps = NULL; return 0; } if(n > 50) width = 4; else if(n>24) width = 2; else width = 1; height = n / width + 1; if(n && (currentOption[n-1].type == Button || currentOption[n-1].type == SaveButton)) currentOption[n].min = 1; // OK on same line @@ -1207,6 +1248,7 @@ void LoadOptionsProc(w, event, prms, nprms) String *prms; Cardinal *nprms; { + ASSIGN(searchMode, modeValues[appData.searchMode-1]); GenericPopUp(loadOptions, _("Load Game Options"), 0); } @@ -1287,6 +1329,7 @@ void MatchOptionsProc(w, event, prms, nprms) comboCallback = &AddToTourney; matchOptions[5].min = -(appData.pairingEngine[0] != NULLCHAR); // with pairing engine, allow Swiss ASSIGN(tfName, appData.tourneyFile[0] ? appData.tourneyFile : MakeName(appData.defName)); + ASSIGN(engineName, appData.participants); GenericPopUp(matchOptions, _("Match Options"), 0); } @@ -1383,7 +1426,7 @@ int NewComCallback(int n) void SaveChanges(int n) { - GetWidgetText(¤tOption[0], &commentText); + GenericReadout(0); ReplaceComment(commentIndex, commentText); } @@ -1394,15 +1437,22 @@ Option commentOptions[] = { { 0, 1, 0, NULL, (void*) &NewComCallback, "", NULL, EndMark , "" } }; +void ClearTextWidget(Option *opt) +{ +// XtCallActionProc(opt->handle, "select-all", NULL, NULL, 0); +// XtCallActionProc(opt->handle, "kill-selection", NULL, NULL, 0); + Arg arg; + XtSetArg(arg, XtNstring, ""); // clear without disturbing selection! + XtSetValues(opt->handle, &arg, 1); +} + void ClearComment(int n) { - XtCallActionProc(commentOptions[0].handle, "select-all", NULL, NULL, 0); - XtCallActionProc(commentOptions[0].handle, "kill-selection", NULL, NULL, 0); + ClearTextWidget(&commentOptions[0]); } void NewCommentPopup(char *title, char *text, int index) { - Widget edit; Arg args[16]; if(shells[1]) { // if already exists, alter title and content @@ -1417,7 +1467,7 @@ void NewCommentPopup(char *title, char *text, int index) XtOverrideTranslations(commentOptions[0].handle, XtParseTranslationTable(commentTranslations)); } -static char *tagsText, *msgText; +static char *tagsText; int NewTagsCallback(int n) { @@ -1427,8 +1477,8 @@ int NewTagsCallback(int n) void changeTags(int n) { - GetWidgetText(¤tOption[1], &tagsText); - if(bookUp) SaveToBook(tagsText); else + GenericReadout(1); + if(bookUp) SaveToBook(tagsText); else ReplaceTags(tagsText, &gameInfo); } @@ -1441,7 +1491,6 @@ Option tagsOptions[] = { void NewTagsPopup(char *text, char *msg) { - Widget edit; Arg args[16]; char *title = bookUp ? _("Edit book") : _("Tags"); @@ -1493,14 +1542,13 @@ void TypeInProc(w, event, prms, nprms) String *prms; Cardinal *nprms; { - Arg args[2]; - String val; + char *val; if(prms[0][0] == '1') { GetWidgetText(&boxOptions[0], &val); - TypeInDoneEvent((char*)val); + TypeInDoneEvent(val); } - PopDown(0); + PopDown(0); } char moveTypeInTranslations[] = @@ -1624,7 +1672,6 @@ void SetRandom(int n) { int r = n==2 ? -1 : rand() & (1<<30)-1; char buf[MSG_SIZ]; - Arg args[2]; snprintf(buf, MSG_SIZ, "%d", r); SetWidgetText(&shuffleOptions[1], buf, 0); SetWidgetState(&shuffleOptions[0], True); @@ -1660,6 +1707,7 @@ int TcOK(int n) if(tcType == 0 && tmpMoves <= 0) return 0; if(tcType == 2 && tmpInc <= 0) return 0; GetWidgetText(¤tOption[4], &tc); // get original text, in case it is min:sec + searchTime = 0; switch(tcType) { case 0: if(!ParseTimeControl(tc, -1, tmpMoves)) return 0;