return NULL;
}
-void newtListboxSelectItem(newtComponent co, int item)
+void newtListboxSelectItem(newtComponent co, int item,
+ enum newtFlagsSense sense)
{
struct listbox * li = co->data;
int i;
i++, iitem = iitem->next);
if (iitem) {
- if(iitem->isSelected)
+ if(iitem->isSelected && sense != NEWT_FLAGS_SET)
li->numSelected--;
- else
+ else if(!iitem->isSelected && sense != NEWT_FLAGS_RESET)
li->numSelected++;
- iitem->isSelected = !iitem->isSelected;
+ switch(sense) {
+ case NEWT_FLAGS_RESET:
+ iitem->isSelected = 0; break;
+ case NEWT_FLAGS_SET:
+ iitem->isSelected = 1; break;
+ case NEWT_FLAGS_TOGGLE:
+ iitem->isSelected = !iitem->isSelected;
+ }
}
listboxDraw(co);
}
for(item = li->boxItems; item != NULL;
item = item->next)
item->isSelected = 0;
-
+ li->numSelected = 0;
listboxDraw(co);
}
item->key = strdup(text);
}
if (li->userHasSetWidth == 0
- && strlen(text) > li->curWidth) {
+ && strlen(text) > (size_t)li->curWidth) {
co->width = li->curWidth = strlen(text);
if (li->sb)
li->sb->left = co->left + co->width + 2;
}
if (li->userHasSetWidth == 0
- && text && (strlen(text) > li->curWidth))
+ && text && (strlen(text) > (size_t)li->curWidth))
li->curWidth = strlen(text) ;
item->key = strdup(text); item->data = data; item->next = NULL;
}
if (li->userHasSetWidth == 0
- && text && (strlen(text) > li->curWidth))
+ && text && (strlen(text) > (size_t)li->curWidth))
li->curWidth = strlen(text);
item->key = strdup(text?text:"(null)"); item->data = data;
switch(ev.u.key) {
case ' ':
if(!(li->flags & NEWT_FLAG_MULTIPLE)) break;
- newtListboxSelectItem(co, li->currItem);
+ newtListboxSelectItem(co, li->currItem, NEWT_FLAGS_TOGGLE);
+ er.result = ER_SWALLOWED;
+ /* We don't break here, because it is cool to be able to
+ hold space to select a bunch of items in a list at once */
+
+ case NEWT_KEY_DOWN:
+ if(li->numItems <= 0) break;
+ if(li->currItem < li->numItems - 1) {
+ li->currItem++;
+ if(li->currItem > (li->startShowItem + co->height - 1)) {
+ li->startShowItem = li->currItem - co->height + 1;
+ if(li->startShowItem + co->height > li->numItems)
+ li->startShowItem = li->numItems - co->height;
+ }
+ if(li->sb)
+ newtScrollbarSet(li->sb, li->currItem + 1, li->numItems);
+ listboxDraw(co);
+ }
+ if(co->callback) co->callback(co, co->callbackData);
er.result = ER_SWALLOWED;
break;
er.result = ER_SWALLOWED;
break;
- case NEWT_KEY_DOWN:
- if(li->numItems <= 0) break;
- if(li->currItem < li->numItems - 1) {
- li->currItem++;
- if(li->currItem > (li->startShowItem + co->height - 1)) {
- li->startShowItem = li->currItem - co->height + 1;
- if(li->startShowItem + co->height > li->numItems)
- li->startShowItem = li->numItems - co->height;
- }
- if(li->sb)
- newtScrollbarSet(li->sb, li->currItem + 1, li->numItems);
- listboxDraw(co);
- }
- if(co->callback) co->callback(co, co->callbackData);
- er.result = ER_SWALLOWED;
- break;
-
case NEWT_KEY_PGUP:
if(li->numItems <= 0) break;
li->startShowItem -= co->height - 1;
char * selListboxFg, * selListboxBg;
};
-enum newtFlagsSense { NEWT_FLAGS_SET, NEWT_FLAGS_RESET };
+enum newtFlagsSense { NEWT_FLAGS_SET, NEWT_FLAGS_RESET, NEWT_FLAGS_TOGGLE };
#define NEWT_FLAG_RETURNEXIT (1 << 0)
#define NEWT_FLAG_HIDDEN (1 << 1)
#define NEWT_FLAG_WRAP (1 << 6)
#define NEWT_FLAG_NOF12 (1 << 7)
#define NEWT_FLAG_MULTIPLE (1 << 8)
+#define NEWT_FLAG_SELECTED (1 << 9)
/* Backwards compatibility */
#define NEWT_LISTBOX_RETURNEXIT NEWT_FLAG_RETURNEXIT
void newtRedrawHelpLine(void);
void newtPopHelpLine(void);
void newtDrawRootText(int row, int col, char * text);
+void newtBell(void);
/* Components */
void newtListboxGetEntry(newtComponent co, int num, char **text, void **data);
void **newtListboxGetSelection(newtComponent co);
void newtListboxClearSelection(newtComponent co);
+void newtListboxSelectItem(newtComponent co, int item,
+ enum newtFlagsSense sense);
+
newtComponent newtTextbox(int left, int top, int with, int height, int flags);
void newtTextboxSetText(newtComponent co, const char * text);