X-Git-Url: http://winboard.nl/cgi-bin?a=blobdiff_plain;f=dialogs.c;h=fdf2d5721a50fd7855f443d48bfd8ed29010f4e3;hb=2d0f4769e69d228d9593c574014c634706edea97;hp=11c6c7ae126efa41caae98b12998d1801a1d8ccf;hpb=9addf5a6f332430b00c36e5df8ca13040c2190a5;p=xboard.git diff --git a/dialogs.c b/dialogs.c index 11c6c7a..fdf2d57 100644 --- a/dialogs.c +++ b/dialogs.c @@ -736,7 +736,7 @@ static void Test (int n) { GenericReadout(soundOptions, 2); - if(soundFiles[values[3]]) PlaySound(soundFiles[values[3]]); + if(soundFiles[values[3]]) PlaySoundFile(soundFiles[values[3]]); } void @@ -892,6 +892,7 @@ IcsTextProc () if((p = icsTextMenuString) == NULL) return; do { q = r = p; while(*p && *p != ';') p++; + if(textOptions[i].name == NULL) textOptions[i].name = (char*) malloc(MSG_SIZ); for(j=0; j in chat-partner text-edit, as there is no OK button + char buf[MSG_SIZ]; + if(!partner || strcmp(partner, chatPartner[activePartner])) { + safeStrCpy(chatPartner[activePartner], partner, MSG_SIZ); + SetWidgetText(&chatOptions[5], "", -1); // clear text if we alter partner + SetWidgetText(&chatOptions[6], "", ChatDlg); // clear text if we alter partner + HardSetFocus(&chatOptions[6]); + } + if(line[0]) { // something was typed + SetWidgetText(&chatOptions[6], "", ChatDlg); + // from here on it could be back-end + if(line[strlen(line)-1] == '\n') line[strlen(line)-1] = NULLCHAR; + SaveInHistory(line); + if(!strcmp("whispers", chatPartner[activePartner])) + snprintf(buf, MSG_SIZ, "whisper %s\n", line); // WHISPER box uses "whisper" to send + else if(!strcmp("shouts", chatPartner[activePartner])) + snprintf(buf, MSG_SIZ, "shout %s\n", line); // SHOUT box uses "shout" to send + else { + if(!atoi(chatPartner[activePartner])) { + snprintf(buf, MSG_SIZ, "> %s\n", line); // echo only tells to handle, not channel + OutputChatMessage(activePartner, buf); + snprintf(buf, MSG_SIZ, "xtell %s %s\n", chatPartner[activePartner], line); + } else + snprintf(buf, MSG_SIZ, "tell %s %s\n", chatPartner[activePartner], line); + } + SendToICS(buf); + } + return FALSE; // never pop down +} + +void +ChatSwitch (int n) +{ + int i, j; + if(n <= activePartner) n--; + activePartner = n; + if(!texts[n]) texts[n] = strdup(""); + dirty[n] = 0; + SetWidgetText(&chatOptions[5], texts[n], ChatDlg); + SetInsertPos(&chatOptions[5], strlen(texts[n])); + SetWidgetText(&chatOptions[0], chatPartner[n], ChatDlg); + for(i=j=0; i") }, { 0, SAME_ROW, 0, NULL, (void*) &ToEndEvent, NULL, NULL, Button, N_(">>") }, { 0, 0, 0, NULL, NULL, "", NULL, BoxEnd, "" }, -{ 401, LR|TT, 401, NULL, (char*) &Exp, NULL, NULL, Graph, "shadow board" }, // board +{ 401, LR|TB, 401, NULL, (char*) &Exp, NULL, NULL, Graph, "shadow board" }, // board { 2, COMBO_CALLBACK, 0, NULL, (void*) &PMSelect, NULL, pieceMenuStrings[0], PopUp, "menuW" }, { 2, COMBO_CALLBACK, 0, NULL, (void*) &PMSelect, NULL, pieceMenuStrings[1], PopUp, "menuB" }, { -1, COMBO_CALLBACK, 0, NULL, (void*) &PMSelect, NULL, dropMenuStrings, PopUp, "menuD" }, { 0, NO_OK, 0, NULL, NULL, "", NULL, EndMark , "" } }; +Option * +LogoW (int n, int x, int y) +{ + if(n == 10) DisplayLogos(mainOptions[W_WHITE-1].handle, NULL); + return NULL; +} + +Option * +LogoB (int n, int x, int y) +{ + if(n == 10) DisplayLogos(NULL, mainOptions[W_BLACK+1].handle); + return NULL; +} + void SizeKludge (int n) { // callback called by GenericPopUp immediately after sizing the menu bar @@ -1940,7 +2089,7 @@ Exp (int n, int x, int y) Option * BoardPopUp (int squareSize, int lineGap, void *clockFontThingy) { - int i, size = BOARD_WIDTH*(squareSize + lineGap) + lineGap; + int i, size = BOARD_WIDTH*(squareSize + lineGap) + lineGap, logo = appData.logoSize; mainOptions[W_WHITE].choice = (char**) clockFontThingy; mainOptions[W_BLACK].choice = (char**) clockFontThingy; mainOptions[W_BOARD].value = BOARD_HEIGHT*(squareSize + lineGap) + lineGap; @@ -1950,6 +2099,14 @@ BoardPopUp (int squareSize, int lineGap, void *clockFontThingy) 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(logo && logo <= size/4) { // Activate logos + mainOptions[W_WHITE-1].type = mainOptions[W_BLACK+1].type = Graph; + mainOptions[W_WHITE-1].max = mainOptions[W_BLACK+1].max = logo; + mainOptions[W_WHITE-1].value= mainOptions[W_BLACK+1].value= logo/2; + mainOptions[W_WHITE].min |= SAME_ROW; + mainOptions[W_WHITE].max = mainOptions[W_BLACK].max -= logo + 4; + mainOptions[W_WHITE].name = mainOptions[W_BLACK].name = "Double\nHeight"; + } if(!appData.showButtonBar) for(i=W_BUTTON; i +#define MAXFILES 1000 + static ChessProgramState *savCps; static FILE **savFP; static char *fileName, *extFilter, *savMode, **namePtr; -static int folderPtr, filePtr, oldVal, byExtension, extFlag; -static char curDir[MSG_SIZ], title[MSG_SIZ], *folderList[1000], *fileList[1000]; +static int folderPtr, filePtr, oldVal, byExtension, extFlag, pageStart, cnt; +static char curDir[MSG_SIZ], title[MSG_SIZ], *folderList[MAXFILES], *fileList[MAXFILES]; static char *FileTypes[] = { "Chess Games", @@ -2069,6 +2228,7 @@ static char *FileTypes[] = { "Tournaments", "Opening Books", "Sound files", +"Images", "Settings (*.ini)", "Log files", "All files", @@ -2087,6 +2247,7 @@ static char *Extensions[] = { ".trn", ".bin", ".wav", +".xpm", ".ini", ".log", "", @@ -2147,14 +2308,6 @@ BrowseOK (int n) return TRUE; } -void -FileSelProc (int n, int sel) -{ - if(sel<0) return; - ASSIGN(fileName, fileList[sel]); - if(BrowseOK(0)) PopDown(BrowserDlg); -} - int AlphaNumCompare (char *p, char *q) { @@ -2197,15 +2350,16 @@ ListDir (int pathFlag) dir = opendir("."); getcwd(curDir, MSG_SIZ); snprintf(title, MSG_SIZ, "%s %s", _("Contents of"), curDir); - folderPtr = filePtr = 0; // clear listing + folderPtr = filePtr = cnt = 0; // clear listing while (dp = readdir(dir)) { // pass 1: list foders char *s = dp->d_name; if(!stat(s, &statBuf) && S_ISDIR(statBuf.st_mode)) { // stat succeeds and tells us it is directory if(s[0] == '.' && strcmp(s, "..")) continue; // suppress hidden, except ".." - ASSIGN(folderList[folderPtr], s); folderPtr++; + ASSIGN(folderList[folderPtr], s); if(folderPtr < MAXFILES-2) folderPtr++; } else if(!pathFlag) { char *s = dp->d_name, match=0; +// if(cnt == pageStart) { ASSIGN } if(s[0] == '.') continue; // suppress hidden files if(extFilter[0]) { // [HGM] filter on extension char *p = extFilter, *q; @@ -2216,9 +2370,12 @@ ListDir (int pathFlag) } while(q && (p = q+1)); if(!match) continue; } + if(filePtr == MAXFILES-2) continue; + if(cnt++ < pageStart) continue; ASSIGN(fileList[filePtr], s); filePtr++; } } + if(filePtr == MAXFILES-2) { ASSIGN(fileList[filePtr], _("\177 next page")); filePtr++; } FREE(folderList[folderPtr]); folderList[folderPtr] = NULL; FREE(fileList[filePtr]); fileList[filePtr] = NULL; closedir(dir); @@ -2266,11 +2423,21 @@ SetTypeFilter (int n) browseOptions[n].value = j; SetWidgetLabel(&browseOptions[n], FileTypes[j]); ASSIGN(extFilter, Extensions[j]); + pageStart = 0; Refresh(-1); // uses pathflag remembered by ListDir values[n] = oldVal; // do not disturb combo settings of underlying dialog } void +FileSelProc (int n, int sel) +{ + if(sel<0) return; + if(sel == MAXFILES-2) { pageStart = cnt; Refresh(-1); return; } + ASSIGN(fileName, fileList[sel]); + if(BrowseOK(0)) PopDown(BrowserDlg); +} + +void DirSelProc (int n, int sel) { if(!chdir(folderList[sel])) { // cd succeeded, so we are in new directory now @@ -2290,10 +2457,32 @@ Browse (DialogClass dlg, char *label, char *proposed, char *ext, Boolean pathFla if(Extensions[j] == NULL) { j++; ASSIGN(FileTypes[j], extFilter); } browseOptions[9].value = j; browseOptions[6].textValue = (char*) (pathFlag ? NULL : &FileSelProc); // disable file listbox during path browsing - ListDir(pathFlag); + pageStart = 0; ListDir(pathFlag); currentCps = NULL; GenericPopUp(browseOptions, label, BrowserDlg, dlg, MODAL, 0); SetWidgetLabel(&browseOptions[9], FileTypes[j]); } +static char *openName; +FileProc fileProc; +char *fileOpenMode; +FILE *openFP; + +void +DelayedLoad () +{ + (void) (*fileProc)(openFP, 0, openName); +} + +void +FileNamePopUp (char *label, char *def, char *filter, FileProc proc, char *openMode) +{ + fileProc = proc; /* I can't see a way not */ + fileOpenMode = openMode; /* to use globals here */ + { // [HGM] use file-selector dialog stolen from Ghostview + // int index; // this is not supported yet + Browse(BoardWindow, label, (def[0] ? def : NULL), filter, False, openMode, &openName, &openFP); + } +} +