2 * dialogs.h -- shared variables for generic dialog popup of XBoard
4 * Copyright 2000, 2009, 2010, 2011, 2012, 2013, 2014 Free Software Foundation, Inc.
5 * ------------------------------------------------------------------------
7 * GNU XBoard is free software: you can redistribute it and/or modify
8 * it under the terms of the GNU General Public License as published by
9 * the Free Software Foundation, either version 3 of the License, or (at
10 * your option) any later version.
12 * GNU XBoard is distributed in the hope that it will be useful, but
13 * WITHOUT ANY WARRANTY; without even the implied warranty of
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
15 * General Public License for more details.
17 * You should have received a copy of the GNU General Public License
18 * along with this program. If not, see http://www.gnu.org/licenses/. *
20 *------------------------------------------------------------------------
21 ** See the file ChangeLog for a revision history. */
23 // [HGM] Some remarks about the generic dialog creator of XBoard:
24 // GenericPopUp is needed to create a dialog from the lists of options supplied by the engines.
25 // But once it is there, it provides a very easy way for creating other settings dialogs as well,
26 // by letting XBoard provide its own, compiled-in lists of XBoard options (located in dialogs.c).
27 // The Option struct uses the following fields (E = for engine options, X = for XBoard options):
28 // Option types | XBoard-only ->
29 // TYPE NAME spin check string combo button box label list graph menu break end
30 // int value E E (h) X/E [w] (h) (h)
31 // int min X/E (2) (3) (1) (1) (1) (1) (3) (1) (4)
32 // int max X/E (w) (w) (w) (w) (w) (w) (w) (w)
33 // void* handle X/E X/E X/E X/E X/E X X X X X
34 // void* target X X X X/C C X X C C
35 // char* textValue X/E X/E *
36 // char ** choice C X/E * X
37 // enum type X/E X/E X/E X/E X X X X X X X X
38 // char * name X/E X/E X/E X/E X X X X X
39 // char ** font X X X X (GTK only)
40 // File and Path options are like String (but get a browse button added in the dialog), and Slider
41 // is like Spin. Menu can be PopUp or PopDown; both need the COMBO_CALLBACK bit (3) set!
42 // (h) or (w) means the field optionally (when non-null) specifies the height or width of the main
43 // control element (excluding accompanying description texts). [w] means the width is written there.
44 // C specifies the 'target' is a user-supplied callback function, which will be executed when the
45 // option is exercised.
48 /* Flags Option.min used (2) for TextBox (-string): */
49 #define T_VSCRL (1 << 0)
50 #define T_HSCRL (1 << 1)
51 #define T_FILL (1 << 2)
52 #define T_WRAP (1 << 3)
53 #define T_TOP (1 << 4)
55 /* Flags Option.min used (3) for ComboBox (-combo) and menus (PopUp, PopDown): */
56 #define COMBO_CALLBACK (1 << 0)
57 #define NO_GETTEXT (1 << 2)
59 /* Flags for Option.min used (1) for Button, SaveButton, ListBox, Label: */
60 #define SAME_ROW (1 << 0) /* also in Break & EndMark */
61 #define BORDER (1 << 1) /* Label */
62 #define FIX_H (1 << 1) /* in other, this bit specifies top and botom of the control chain to same window edge */
63 #define B2B (1 << 2) /* chain bottom to bottom (by default, no chaining is done) */
69 #define TT (T2T|FIX_H) /* useful combinations: 0xA = entirely to top */
70 #define BB (B2B|FIX_H) /* 6 = entirely to bottom */
71 #define TB (B2B|T2T) /* 0xC = absorb all vertical size change */
72 #define LL (L2L|R2L) /* 0xC0 = entirely to left */
73 #define RR (L2R|R2R) /* 0x30 = entirely to right */
74 #define LR (L2L|R2R) /* 0x90 = absorb all horizontal size change */
76 /* Flags for Option.min used (4) for EndMark: */
77 #define NO_OK (1 << 1)
78 #define NO_CANCEL (1 << 2)
83 /* Board widget numbers, MUST correspond to mainOptions array */
85 #define W_MENU 0 // main menu bar
86 #define W_ENGIN 6 // engine menu
90 #define W_SMALL 15 // title in small layout
92 #define W_BUTTON 17 // button bar
97 #define W_DROP 27 // drop (popup) menu
99 typedef enum { // identifier of dialogs done by GenericPopup
100 TransientDlg=0, // transient: grabs mouse events and is destroyed at pop-down (so other dialog can use this ID next time)
101 CommentDlg, TagsDlg, TextMenuDlg, InputBoxDlg, ChatDlg, DummyDlg, HistoryDlg, // persistent: no grab and reused
105 PromoDlg, // this and beyond are destroyed at pop-down
107 AskDlg, // this and beyond do grab mouse events (and are destroyed)
112 NrOfDialogs // dummy for total
115 typedef int MemoCallback (Option *opt, int n, int x, int y, char *text, int index);
116 typedef Option *PointerCallback(int n, int x, int y);
117 typedef void ListBoxCallback(int n, int selected);
118 typedef void ButtonCallback(int n);
119 typedef int OKCallback(int n);
121 extern char commentTranslations[];
122 extern char historyTranslations[];
123 //extern Pixel timerBackgroundPixel;
125 extern ChessProgramState *currentCps;
126 extern int dialogError;
127 extern ButtonCallback *comboCallback;
128 extern void *userLogo;
130 extern WindowPlacement wpComment, wpTags, wpMoveHistory, wpMain, wpDualBoard, wpConsole;
131 extern char *marked[];
132 extern Boolean shellUp[];
133 extern Option textOptions[], typeOptions[], dualOptions[], mainOptions[];
136 void GetPlacement P((DialogClass dlg, WindowPlacement *wp));
137 int DialogExists P((DialogClass n));
138 int GenericPopUp P((Option *option, char *title, DialogClass dlgNr, DialogClass parent, int modal, int topLevel));
139 int GenericReadout P((Option *currentOption, int selected));
140 int PopDown P((DialogClass n));
141 void MarkMenu P((char *item, int dlgNr));
142 int AppendText P((Option *opt, char *s));
143 void AppendColorized P((Option *opt, char *s, int count));
144 void Show P((Option *opt, int hide));
145 int IcsHist P((int dir, Option *opt, DialogClass dlg));
146 void HighlightText P((Option *opt, int from, int to, Boolean highlight));
147 void SetColor P((char *colorName, Option *box));
148 //void ColorChanged P((Widget w, XtPointer data, XEvent *event, Boolean *b));
149 void SetInsertPos P((Option *opt, int pos));
150 void HardSetFocus P((Option *opt, DialogClass dlg));
151 void CursorAtEnd P((Option *opt));
152 void GetWidgetText P((Option *opt, char **buf));
153 void SetWidgetText P((Option *opt, char *buf, int n));
154 void GetWidgetState P((Option *opt, int *state));
155 void SetWidgetState P((Option *opt, int state));
156 void SetWidgetLabel P((Option *opt, char *buf));
157 void SetDialogTitle P((DialogClass dlg, char *title));
158 void LoadListBox P((Option *opt, char *emptyText, int n1, int n2));
159 void HighlightListBoxItem P((Option *opt, int nr));
160 void HighlightWithScroll P((Option *opt, int sel, int max));
161 void ScrollToCursor P((Option *opt, int pos));
162 int SelectedListBoxItem P((Option *opt));
163 void BoardFocus P((void));
164 void FocusOnWidget P((Option *opt, DialogClass dlg));
165 void UnCaret P((void));
166 void SetIconName P((DialogClass dlg, char *name));
167 int ReadScroll P((Option *opt, float *top, float *bottom));
168 void SetScroll P((Option *opt, float f));
169 void AddHandler P((Option *opt, DialogClass dlg, int nr));
170 void SendText P((int n));
171 void DisplayLogos P((Option *left, Option *right));
172 void Browse P((DialogClass dlg, char *label, char *proposed, char *ext,
173 Boolean pathFlag, char *mode, char **name, FILE **fp));
174 void FileNamePopUpWrapper P((char *label, char *def, char *filter, FileProc proc,
175 Boolean pathFlag, char *openMode, char **openName, FILE **openFP));
177 void InitDrawingParams P((int reload)); // in draw.c
178 void InitDrawingHandle P((Option *opt));
179 void ExposeRedraw P((Option *opt, int x, int y, int w, int h));
180 void DrawLogo P((Option *opt, void *logo));
181 void ErrorPopUp P((char *title, char *text, int modal));
182 int ShiftKeys P((void));
183 void SetClockIcon P((int color));
184 void DelayedLoad P((void));
185 void DisplayTimerLabel P((Option *opt, char *color, long timer, int highlight));
186 void SetWindowTitle P((char *text, char *title, char *icon));
187 void SetupDropMenu P((void));
188 Option *BoardPopUp P((int squareSize, int lineGap, void *clockFontThingy));
189 void SlaveResize P((Option *opt));
191 int SetCurrentComboSelection P((Option *opt));
192 void BoxAutoPopUp P((char *buf));
193 void ConsoleAutoPopUp P((char *buf));
194 void IcsKey P((int n));
195 void ICSInputBoxPopUp P((void));
196 void LoadOptionsPopUp P((DialogClass parent));
197 void GameListOptionsPopUp P((DialogClass parent));
198 void RefreshColor P((int source, int n));
199 void SendString P((char *p));
202 int GameListClicks P((int direction));
203 void SetFilter P((void));