static void DefColor P((int n));
static void AdjustColor P((int i));
+static void ThemeSel P((int n, int sel));
+static int BoardOptionsOK P((int n));
static char oldPieceDir[MSG_SIZ];
+extern char *engineLine, *nickName; // defined later on
-static int
-BoardOptionsOK (int n)
-{
- if(appData.overrideLineGap >= 0) lineGap = appData.overrideLineGap; else lineGap = defaultLineGap;
- InitDrawingParams(strcmp(oldPieceDir, appData.pieceDirectory));
- InitDrawingSizes(-1, 0);
- DrawPosition(True, NULL);
- return 1;
-}
+#define THEMELIST 1
static Option boardOptions[] = {
+{ 0,LR|T2T, 0, NULL, NULL, NULL, NULL, Label, N_("Selectable themes:") },
+{ 300,LR|TB,200, NULL, (void*) engineMnemonic, (char*) &ThemeSel, NULL, ListBox, "" },
+{ 0,LR|T2T, 0, NULL, NULL, NULL, NULL, Label, N_("New name for current theme:") },
+{ 0, 0, 0, NULL, (void*) &nickName, ".png", NULL, TextBox, "" },
+{ 0,SAME_ROW, 0, NULL, NULL, NULL, NULL, Break, NULL },
{ 0, 0, 70, NULL, (void*) &appData.whitePieceColor, "", NULL, TextBox, N_("White Piece Color:") },
{ 1000, SAME_ROW, 0, NULL, (void*) &DefColor, NULL, (char**) "#FFFFCC", Button, " " },
/* TRANSLATORS: R = single letter for the color red */
{ 0, 0, 0, NULL, (void*) &BoardOptionsOK, "", NULL, EndMark , "" }
};
+static int
+BoardOptionsOK (int n)
+{
+ if(n && (n = SelectedListBoxItem(&boardOptions[THEMELIST])) > 0 && *engineList[n] != '#') { // called by pressing OK, and theme selected
+ ASSIGN(engineLine, engineList[n]);
+ }
+ LoadTheme();
+ return 1;
+}
+
static void
SetColorText (int n, char *buf)
{
}
void
+ThemeSel (int n, int sel)
+{
+ 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]);
+ LoadTheme();
+ PopDown(TransientDlg);
+ return;
+ }
+ nr = NamesToList(appData.themeNames, engineList, engineMnemonic, buf); // replace list by only the group contents
+ ASSIGN(engineMnemonic[0], buf);
+ LoadListBox(&boardOptions[THEMELIST], _("# no themes are defined"), -1, -1);
+ HighlightWithScroll(&boardOptions[THEMELIST], 0, nr);
+}
+
+void
BoardOptionsProc ()
{
strncpy(oldPieceDir, appData.pieceDirectory, MSG_SIZ-1); // to see if it changed
+ ASSIGN(engineLine, "");
+ ASSIGN(nickName, "");
+ ASSIGN(engineMnemonic[0], "");
+ NamesToList(appData.themeNames, engineList, engineMnemonic, "");
GenericPopUp(boardOptions, _("Board Options"), TransientDlg, BoardWindow, MODAL, 0);
}
snprintf(buf2 + (q-p), MSG_SIZ -(q-p), "%s%s", clickedWord, q+5);
p = buf2;
}
+ if(!strcmp(p, "$copy")) { // special case for copy selection
+ CopySomething(clickedWord);
+ } else
if(!strcmp(p, "$chat")) { // special case for opening chat
NewChat(clickedWord);
} else
int
ContextMenu (Option *opt, int button, int x, int y, char *text, int index)
{ // callback for ICS-output clicks; handles button 3, passes on other events
- char *start, *end;
int h;
if(button == -3) return TRUE; // supress default GTK context menu on up-click
if(button != 3) return FALSE;
- start = end = text + index; // figure out what text was clicked
- while(isalnum(*end)) end++;
- while(start > text && isalnum(start[-1])) start--;
- clickedWord[0] = NULLCHAR;
- if(end-start >= 80) end = start + 80; // intended for small words and numbers
- strncpy(clickedWord, start, end-start); clickedWord[end-start] = NULLCHAR;
+ if(index == -1) { // pre-existing selection in memo
+ strncpy(clickedWord, text, MSG_SIZ);
+ } else { // figure out what word was clicked
+ char *start, *end;
+ start = end = text + index;
+ while(isalnum(*end)) end++;
+ while(start > text && isalnum(start[-1])) start--;
+ clickedWord[0] = NULLCHAR;
+ if(end-start >= 80) end = start + 80; // intended for small words and numbers
+ strncpy(clickedWord, start, end-start); clickedWord[end-start] = NULLCHAR;
+ }
click = !shellUp[TextMenuDlg]; // request auto-popdown of textmenu when we popped it up
h = wpTextMenu.height; // remembered height of text menu
if(h <= 0) h = 65; // when not available, position w.r.t. top
void
ActivateTheme (int col)
{
+ if(appData.overrideLineGap >= 0) lineGap = appData.overrideLineGap; else lineGap = defaultLineGap;
+ InitDrawingParams(strcmp(oldPieceDir, appData.pieceDirectory));
+ InitDrawingSizes(-1, 0);
+ DrawPosition(True, NULL);
}
-char *
-Col2Text (int n)
-{
- return NULL;
-}