10 #define NEWT_COLORSET_ROOT 2
11 #define NEWT_COLORSET_BORDER 3
12 #define NEWT_COLORSET_WINDOW 4
13 #define NEWT_COLORSET_SHADOW 5
14 #define NEWT_COLORSET_TITLE 6
15 #define NEWT_COLORSET_BUTTON 7
16 #define NEWT_COLORSET_ACTBUTTON 8
17 #define NEWT_COLORSET_CHECKBOX 9
18 #define NEWT_COLORSET_ACTCHECKBOX 10
19 #define NEWT_COLORSET_ENTRY 11
20 #define NEWT_COLORSET_LABEL 12
21 #define NEWT_COLORSET_LISTBOX 13
22 #define NEWT_COLORSET_ACTLISTBOX 14
23 #define NEWT_COLORSET_TEXTBOX 15
24 #define NEWT_COLORSET_ACTTEXTBOX 16
25 #define NEWT_COLORSET_HELPLINE 17
26 #define NEWT_COLORSET_ROOTTEXT 18
27 #define NEWT_COLORSET_EMPTYSCALE 19
28 #define NEWT_COLORSET_FULLSCALE 20
29 #define NEWT_COLORSET_DISENTRY 21
30 #define NEWT_COLORSET_COMPACTBUTTON 22
31 #define NEWT_COLORSET_ACTSELLISTBOX 23
32 #define NEWT_COLORSET_SELLISTBOX 24
34 #define NEWT_COLORSET_CUSTOM(x) (30 + (x))
36 #define NEWT_ARG_LAST -100000
37 #define NEWT_ARG_APPEND -1
40 char * rootFg
, * rootBg
;
41 char * borderFg
, * borderBg
;
42 char * windowFg
, * windowBg
;
43 char * shadowFg
, * shadowBg
;
44 char * titleFg
, * titleBg
;
45 char * buttonFg
, * buttonBg
;
46 char * actButtonFg
, * actButtonBg
;
47 char * checkboxFg
, * checkboxBg
;
48 char * actCheckboxFg
, * actCheckboxBg
;
49 char * entryFg
, * entryBg
;
50 char * labelFg
, * labelBg
;
51 char * listboxFg
, * listboxBg
;
52 char * actListboxFg
, * actListboxBg
;
53 char * textboxFg
, * textboxBg
;
54 char * actTextboxFg
, * actTextboxBg
;
55 char * helpLineFg
, * helpLineBg
;
56 char * rootTextFg
, * rootTextBg
;
57 char * emptyScale
, * fullScale
;
58 char * disabledEntryFg
, * disabledEntryBg
;
59 char * compactButtonFg
, * compactButtonBg
;
60 char * actSelListboxFg
, * actSelListboxBg
;
61 char * selListboxFg
, * selListboxBg
;
64 enum newtFlagsSense
{ NEWT_FLAGS_SET
, NEWT_FLAGS_RESET
, NEWT_FLAGS_TOGGLE
};
66 #define NEWT_FLAG_RETURNEXIT (1 << 0)
67 #define NEWT_FLAG_HIDDEN (1 << 1)
68 #define NEWT_FLAG_SCROLL (1 << 2)
69 #define NEWT_FLAG_DISABLED (1 << 3)
70 /* OBSOLETE #define NEWT_FLAG_NOSCROLL (1 << 4) for listboxes */
71 #define NEWT_FLAG_BORDER (1 << 5)
72 #define NEWT_FLAG_WRAP (1 << 6)
73 #define NEWT_FLAG_NOF12 (1 << 7)
74 #define NEWT_FLAG_MULTIPLE (1 << 8)
75 #define NEWT_FLAG_SELECTED (1 << 9)
76 #define NEWT_FLAG_CHECKBOX (1 << 10)
77 #define NEWT_FLAG_PASSWORD (1 << 11) /* draw '*' of chars in entrybox */
78 #define NEWT_FLAG_SHOWCURSOR (1 << 12) /* Only applies to listbox for now */
79 #define NEWT_FD_READ (1 << 0)
80 #define NEWT_FD_WRITE (1 << 1)
81 #define NEWT_FD_EXCEPT (1 << 2)
83 #define NEWT_CHECKBOXTREE_UNSELECTABLE (1 << 12)
84 #define NEWT_CHECKBOXTREE_HIDE_BOX (1 << 13)
86 #define NEWT_CHECKBOXTREE_COLLAPSED '\0'
87 #define NEWT_CHECKBOXTREE_EXPANDED '\1'
88 #define NEWT_CHECKBOXTREE_UNSELECTED ' '
89 #define NEWT_CHECKBOXTREE_SELECTED '*'
91 /* Backwards compatibility */
92 #define NEWT_LISTBOX_RETURNEXIT NEWT_FLAG_RETURNEXIT
93 #define NEWT_ENTRY_SCROLL NEWT_FLAG_SCROLL
94 #define NEWT_ENTRY_HIDDEN NEWT_FLAG_HIDDEN
95 #define NEWT_ENTRY_RETURNEXIT NEWT_FLAG_RETURNEXIT
96 #define NEWT_ENTRY_DISABLED NEWT_FLAG_DISABLED
98 #define NEWT_TEXTBOX_WRAP NEWT_FLAG_WRAP
99 #define NEWT_TEXTBOX_SCROLL NEWT_FLAG_SCROLL
100 #define NEWT_FORM_NOF12 NEWT_FLAG_NOF12
102 #define newtListboxAddEntry newtListboxAppendEntry
105 typedef struct newtComponent_struct
* newtComponent
;
107 extern const struct newtColors newtDefaultColorPalette
;
109 typedef void (*newtCallback
)(newtComponent
, void *);
110 typedef void (*newtSuspendCallback
)(void * data
);
113 int newtFinished(void);
115 void newtResizeScreen(int redraw
);
116 void newtWaitForKey(void);
117 void newtClearKeyBuffer(void);
118 void newtDelay(unsigned int usecs
);
119 /* top, left are *not* counting the border */
120 int newtOpenWindow(int left
,int top
,
121 unsigned int width
,unsigned int height
,
123 int newtCenteredWindow(unsigned int width
,unsigned int height
, const char * title
);
124 void newtPopWindow(void);
125 void newtPopWindowNoRefresh(void);
126 void newtSetColors(struct newtColors colors
);
127 void newtSetColor(int colorset
, char *fg
, char *bg
);
128 void newtRefresh(void);
129 void newtSuspend(void);
130 void newtSetSuspendCallback(newtSuspendCallback cb
, void * data
);
131 void newtSetHelpCallback(newtCallback cb
);
132 int newtResume(void);
133 void newtPushHelpLine(const char * text
);
134 void newtRedrawHelpLine(void);
135 void newtPopHelpLine(void);
136 void newtDrawRootText(int col
, int row
, const char * text
);
138 void newtCursorOff(void);
139 void newtCursorOn(void);
143 newtComponent
newtCompactButton(int left
, int top
, const char * text
);
144 newtComponent
newtButton(int left
, int top
, const char * text
);
145 newtComponent
newtCheckbox(int left
, int top
, const char * text
, char defValue
,
146 const char * seq
, char * result
);
147 char newtCheckboxGetValue(newtComponent co
);
148 void newtCheckboxSetValue(newtComponent co
, char value
);
149 void newtCheckboxSetFlags(newtComponent co
, int flags
, enum newtFlagsSense sense
);
152 newtComponent
newtRadiobutton(int left
, int top
, const char * text
, int isDefault
,
153 newtComponent prevButton
);
154 newtComponent
newtRadioGetCurrent(newtComponent setMember
);
155 void newtRadioSetCurrent(newtComponent setMember
);
156 void newtGetScreenSize(int * cols
, int * rows
);
158 newtComponent
newtLabel(int left
, int top
, const char * text
);
159 void newtLabelSetText(newtComponent co
, const char * text
);
160 void newtLabelSetColors(newtComponent co
, int colorset
);
161 newtComponent
newtVerticalScrollbar(int left
, int top
, int height
,
162 int normalColorset
, int thumbColorset
);
163 void newtScrollbarSet(newtComponent co
, int where
, int total
);
164 void newtScrollbarSetColors(newtComponent co
, int normal
, int thumb
);
166 newtComponent
newtListbox(int left
, int top
, int height
, int flags
);
167 void * newtListboxGetCurrent(newtComponent co
);
168 void newtListboxSetCurrent(newtComponent co
, int num
);
169 void newtListboxSetCurrentByKey(newtComponent co
, void * key
);
170 void newtListboxSetEntry(newtComponent co
, int num
, const char * text
);
171 void newtListboxSetWidth(newtComponent co
, int width
);
172 void newtListboxSetData(newtComponent co
, int num
, void * data
);
173 int newtListboxAppendEntry(newtComponent co
, const char * text
,
175 /* Send the key to insert after, or NULL to insert at the top */
176 int newtListboxInsertEntry(newtComponent co
, const char * text
, const void * data
, void * key
);
177 int newtListboxDeleteEntry(newtComponent co
, void * data
);
178 void newtListboxClear(newtComponent co
); /* removes all entries from listbox */
179 void newtListboxGetEntry(newtComponent co
, int num
, char **text
, void **data
);
180 /* Returns an array of data pointers from items, last element is NULL */
181 void **newtListboxGetSelection(newtComponent co
, int *numitems
);
182 void newtListboxClearSelection(newtComponent co
);
183 void newtListboxSelectItem(newtComponent co
, const void * key
,
184 enum newtFlagsSense sense
);
185 /* Returns number of items currently in listbox. */
186 int newtListboxItemCount(newtComponent co
);
188 newtComponent
newtCheckboxTree(int left
, int top
, int height
, int flags
);
189 newtComponent
newtCheckboxTreeMulti(int left
, int top
, int height
, char *seq
, int flags
);
190 const void ** newtCheckboxTreeGetSelection(newtComponent co
, int *numitems
);
191 const void * newtCheckboxTreeGetCurrent(newtComponent co
);
192 void newtCheckboxTreeSetCurrent(newtComponent co
, void * item
);
193 const void ** newtCheckboxTreeGetMultiSelection(newtComponent co
, int *numitems
, char seqnum
);
194 /* last item is NEWT_ARG_LAST for all of these */
195 int newtCheckboxTreeAddItem(newtComponent co
,
196 const char * text
, const void * data
,
197 int flags
, int index
, ...);
198 int newtCheckboxTreeAddArray(newtComponent co
,
199 const char * text
, const void * data
,
200 int flags
, int * indexes
);
201 int * newtCheckboxTreeFindItem(newtComponent co
, void * data
);
202 void newtCheckboxTreeSetEntry(newtComponent co
, const void * data
,
204 void newtCheckboxTreeSetWidth(newtComponent co
, int width
);
205 char newtCheckboxTreeGetEntryValue(newtComponent co
, const void * data
);
206 void newtCheckboxTreeSetEntryValue(newtComponent co
, const void * data
,
209 newtComponent
newtTextboxReflowed(int left
, int top
, char * text
, int width
,
210 int flexDown
, int flexUp
, int flags
);
211 newtComponent
newtTextbox(int left
, int top
, int width
, int height
, int flags
);
212 void newtTextboxSetText(newtComponent co
, const char * text
);
213 void newtTextboxSetHeight(newtComponent co
, int height
);
214 int newtTextboxGetNumLines(newtComponent co
);
215 void newtTextboxSetColors(newtComponent co
, int normal
, int active
);
216 char * newtReflowText(char * text
, int width
, int flexDown
, int flexUp
,
217 int * actualWidth
, int * actualHeight
);
219 struct newtExitStruct
{
220 enum { NEWT_EXIT_HOTKEY
, NEWT_EXIT_COMPONENT
, NEWT_EXIT_FDREADY
,
221 NEWT_EXIT_TIMER
, NEWT_EXIT_ERROR
} reason
;
229 newtComponent
newtForm(newtComponent vertBar
, void * helpTag
, int flags
);
230 void newtFormSetTimer(newtComponent form
, int millisecs
);
231 void newtFormWatchFd(newtComponent form
, int fd
, int fdFlags
);
232 void newtFormSetSize(newtComponent co
);
233 newtComponent
newtFormGetCurrent(newtComponent co
);
234 void newtFormSetBackground(newtComponent co
, int color
);
235 void newtFormSetCurrent(newtComponent co
, newtComponent subco
);
236 void newtFormAddComponent(newtComponent form
, newtComponent co
);
237 void newtFormAddComponents(newtComponent form
, ...);
238 void newtFormSetHeight(newtComponent co
, int height
);
239 void newtFormSetWidth(newtComponent co
, int width
);
240 newtComponent
newtRunForm(newtComponent form
); /* obsolete */
241 void newtFormRun(newtComponent co
, struct newtExitStruct
* es
);
242 void newtDrawForm(newtComponent form
);
243 void newtFormAddHotKey(newtComponent co
, int key
);
244 int newtFormGetScrollPosition(newtComponent co
);
245 void newtFormSetScrollPosition(newtComponent co
, int position
);
247 typedef int (*newtEntryFilter
)(newtComponent entry
, void * data
, int ch
,
249 newtComponent
newtEntry(int left
, int top
, const char * initialValue
, int width
,
250 const char ** resultPtr
, int flags
);
251 void newtEntrySet(newtComponent co
, const char * value
, int cursorAtEnd
);
252 void newtEntrySetFilter(newtComponent co
, newtEntryFilter filter
, void * data
);
253 char * newtEntryGetValue(newtComponent co
);
254 void newtEntrySetFlags(newtComponent co
, int flags
, enum newtFlagsSense sense
);
255 void newtEntrySetColors(newtComponent co
, int normal
, int disabled
);
256 int newtEntryGetCursorPosition(newtComponent co
);
257 void newtEntrySetCursorPosition(newtComponent co
, int position
);
259 newtComponent
newtScale(int left
, int top
, int width
, long long fullValue
);
260 void newtScaleSet(newtComponent co
, unsigned long long amount
);
261 void newtScaleSetColors(newtComponent co
, int empty
, int full
);
263 void newtComponentAddCallback(newtComponent co
, newtCallback f
, void * data
);
264 void newtComponentTakesFocus(newtComponent co
, int val
);
266 void newtComponentGetPosition(newtComponent co
, int * left
, int * top
);
267 void newtComponentGetSize(newtComponent co
, int * width
, int * height
);
269 /* This callback is called when a component is destroyed. */
270 void newtComponentAddDestroyCallback(newtComponent co
,
271 newtCallback f
, void * data
);
273 /* this also destroys all of the components (including other forms) on the
275 void newtFormDestroy(newtComponent form
);
277 /* NB: You SHOULD NOT call this for components which have been added
278 * to a form (ie. almost all components). They are destroyed along
279 * with the form when you call newtFormDestroy.
281 void newtComponentDestroy(newtComponent co
);
285 #define NEWT_KEY_TAB '\t'
286 #define NEWT_KEY_ENTER '\r'
287 #define NEWT_KEY_SUSPEND '\032' /* ctrl - z*/
288 #define NEWT_KEY_ESCAPE '\e'
289 #define NEWT_KEY_RETURN NEWT_KEY_ENTER
291 #define NEWT_KEY_EXTRA_BASE 0x8000
292 #define NEWT_KEY_UP NEWT_KEY_EXTRA_BASE + 1
293 #define NEWT_KEY_DOWN NEWT_KEY_EXTRA_BASE + 2
294 #define NEWT_KEY_LEFT NEWT_KEY_EXTRA_BASE + 4
295 #define NEWT_KEY_RIGHT NEWT_KEY_EXTRA_BASE + 5
296 #define NEWT_KEY_BKSPC NEWT_KEY_EXTRA_BASE + 6
297 #define NEWT_KEY_DELETE NEWT_KEY_EXTRA_BASE + 7
298 #define NEWT_KEY_HOME NEWT_KEY_EXTRA_BASE + 8
299 #define NEWT_KEY_END NEWT_KEY_EXTRA_BASE + 9
300 #define NEWT_KEY_UNTAB NEWT_KEY_EXTRA_BASE + 10
301 #define NEWT_KEY_PGUP NEWT_KEY_EXTRA_BASE + 11
302 #define NEWT_KEY_PGDN NEWT_KEY_EXTRA_BASE + 12
303 #define NEWT_KEY_INSERT NEWT_KEY_EXTRA_BASE + 13
305 #define NEWT_KEY_F1 NEWT_KEY_EXTRA_BASE + 101
306 #define NEWT_KEY_F2 NEWT_KEY_EXTRA_BASE + 102
307 #define NEWT_KEY_F3 NEWT_KEY_EXTRA_BASE + 103
308 #define NEWT_KEY_F4 NEWT_KEY_EXTRA_BASE + 104
309 #define NEWT_KEY_F5 NEWT_KEY_EXTRA_BASE + 105
310 #define NEWT_KEY_F6 NEWT_KEY_EXTRA_BASE + 106
311 #define NEWT_KEY_F7 NEWT_KEY_EXTRA_BASE + 107
312 #define NEWT_KEY_F8 NEWT_KEY_EXTRA_BASE + 108
313 #define NEWT_KEY_F9 NEWT_KEY_EXTRA_BASE + 109
314 #define NEWT_KEY_F10 NEWT_KEY_EXTRA_BASE + 110
315 #define NEWT_KEY_F11 NEWT_KEY_EXTRA_BASE + 111
316 #define NEWT_KEY_F12 NEWT_KEY_EXTRA_BASE + 112
318 /* not really a key, but newtGetKey returns it */
319 #define NEWT_KEY_RESIZE NEWT_KEY_EXTRA_BASE + 113
320 #define NEWT_KEY_ERROR NEWT_KEY_EXTRA_BASE + 114
322 #define NEWT_ANCHOR_LEFT (1 << 0)
323 #define NEWT_ANCHOR_RIGHT (1 << 1)
324 #define NEWT_ANCHOR_TOP (1 << 2)
325 #define NEWT_ANCHOR_BOTTOM (1 << 3)
327 #define NEWT_GRID_FLAG_GROWX (1 << 0)
328 #define NEWT_GRID_FLAG_GROWY (1 << 1)
330 typedef struct grid_s
* newtGrid
;
331 enum newtGridElement
{ NEWT_GRID_EMPTY
= 0,
332 NEWT_GRID_COMPONENT
, NEWT_GRID_SUBGRID
};
334 newtGrid
newtCreateGrid(int cols
, int rows
);
335 /* TYPE, what, TYPE, what, ..., NULL */
336 newtGrid
newtGridVStacked(enum newtGridElement type
, void * what
, ...);
337 newtGrid
newtGridVCloseStacked(enum newtGridElement type
, void * what
, ...);
338 newtGrid
newtGridHStacked(enum newtGridElement type1
, void * what1
, ...);
339 newtGrid
newtGridHCloseStacked(enum newtGridElement type1
, void * what1
, ...);
340 newtGrid
newtGridBasicWindow(newtComponent text
, newtGrid middle
,
342 newtGrid
newtGridSimpleWindow(newtComponent text
, newtComponent middle
,
344 void newtGridSetField(newtGrid grid
, int col
, int row
,
345 enum newtGridElement type
, void * val
, int padLeft
,
346 int padTop
, int padRight
, int padBottom
, int anchor
,
348 void newtGridPlace(newtGrid grid
, int left
, int top
);
349 #define newtGridDestroy newtGridFree
350 void newtGridFree(newtGrid grid
, int recurse
);
351 void newtGridGetSize(newtGrid grid
, int * width
, int * height
);
352 void newtGridWrappedWindow(newtGrid grid
, char * title
);
353 void newtGridWrappedWindowAt(newtGrid grid
, char * title
, int left
, int top
);
354 void newtGridAddComponentsToForm(newtGrid grid
, newtComponent form
,
358 newtGrid
newtButtonBarv(char * button1
, newtComponent
* b1comp
, va_list args
);
359 newtGrid
newtButtonBar(char * button1
, newtComponent
* b1comp
, ...);
361 /* automatically centered and shrink wrapped */
362 void newtWinMessage(char * title
, char * buttonText
, char * text
, ...);
363 void newtWinMessagev(char * title
, char * buttonText
, char * text
,
366 /* having separate calls for these two seems silly, but having two separate
367 variable length-arg lists seems like a bad idea as well */
369 /* Returns 0 if F12 was pressed, 1 for button1, 2 for button2 */
370 int newtWinChoice(char * title
, char * button1
, char * button2
,
372 /* Returns 0 if F12 was pressed, 1 for button1, 2 for button2,
374 int newtWinTernary(char * title
, char * button1
, char * button2
,
375 char * button3
, char * message
, ...);
377 /* Returns the button number pressed, 0 on F12 */
378 int newtWinMenu(char * title
, char * text
, int suggestedWidth
, int flexDown
,
379 int flexUp
, int maxListHeight
, char ** items
, int * listItem
,
380 char * button1
, ...);
382 struct newtWinEntry
{
384 char ** value
; /* may be initialized to set default */
388 /* Returns the button number pressed, 0 on F12. The final values are
389 dynamically allocated, and need to be freed. */
390 int newtWinEntries(char * title
, char * text
, int suggestedWidth
, int flexDown
,
391 int flexUp
, int dataWidth
,
392 struct newtWinEntry
* items
, char * button1
, ...);
395 } /* End of extern "C" { */