Exemplo n.º 1
0
static void newtListboxRealSetCurrent(newtComponent co)
{
    struct listbox * li = co->data;

    if(li->sb)
	newtScrollbarSet(li->sb, li->currItem + 1, li->numItems);
    listboxDraw(co);
    if(co->callback) co->callback(co, co->callbackData);
}
Exemplo n.º 2
0
void newtRadioSetCurrent(newtComponent setMember) {
    struct checkbox * cb = setMember->data;
    struct checkbox * rb;
    newtComponent curr;

    /* find the one that's turned on */
    curr = cb->lastButton;
    rb = curr->data;
    while (curr && rb->value == rb->seq[0]) {
        curr = rb->prevButton;
        if (curr) rb = curr->data;
    }
    if (curr) {
        rb->value = rb->seq[0];
        cbDraw(curr);
    }
    cb->value = cb->seq[1];
    cbDraw(setMember);

    if (setMember->callback)
        setMember->callback(setMember, setMember->callbackData);
}
Exemplo n.º 3
0
static void makeActive(newtComponent co) {
    struct checkbox * cb = co->data;
    struct checkbox * rb;
    newtComponent curr;

    /* find the one that's turned off */
    curr = cb->lastButton;
    rb = curr->data;
    while (curr && rb->value == rb->seq[0]) {
	curr = rb->prevButton;
	if (curr) rb = curr->data;
    }
    if (curr) {
	rb->value = rb->seq[0];
	cbDraw(curr);
    }
    cb->value = cb->seq[1];
    cbDraw(co);

    if (co->callback)
	co->callback(co, co->callbackData);
}
Exemplo n.º 4
0
struct eventResult cbEvent(newtComponent co, struct event ev) {
    struct checkbox * cb = co->data;
    struct eventResult er;
    const char * cur;

    er.result = ER_IGNORED;

    if (ev.when == EV_NORMAL) {
	switch (ev.event) {
	  case EV_FOCUS:
	    cb->hasFocus = 1;
	    cbDraw(co);
	    er.result = ER_SWALLOWED;
	    break;

	  case EV_UNFOCUS:
	    cb->hasFocus = 0;
	    cbDraw(co);
	    er.result = ER_SWALLOWED;
	    break;

	  case EV_KEYPRESS:
	    if (ev.u.key == ' ') {
		if (cb->type == RADIO) {
		    newtRadioSetCurrent(co);
		} else if (cb->type == CHECK) {
		    cur = strchr(cb->seq, *cb->result);
		    if (!cur)
			*cb->result = *cb->seq;
		    else {
			cur++;
			if (! *cur)
			    *cb->result = *cb->seq;
			else
			    *cb->result = *cur;
		    }
		    cbDraw(co);
		    er.result = ER_SWALLOWED;

		    if (co->callback)
			co->callback(co, co->callbackData);
		} else {
		    er.result = ER_IGNORED;
		}
	    } else if(ev.u.key == NEWT_KEY_ENTER) {
		if (cb->flags & NEWT_FLAG_RETURNEXIT)
			er.result = ER_EXITFORM;
		else
			er.result = ER_IGNORED;
	    } else {
		er.result = ER_IGNORED;
	    }
	    break;
   	  case EV_MOUSE:
	    if (ev.u.mouse.type == MOUSE_BUTTON_DOWN) {
		if (cb->type == RADIO) {
		    newtRadioSetCurrent(co);
		} else if (cb->type == CHECK) {
		    cur = strchr(cb->seq, *cb->result);
		    if (!cur)
			*cb->result = *cb->seq;
		    else {
			cur++;
			if (! *cur)
			    *cb->result = *cb->seq;
			else
			    *cb->result = *cur;
		    }
		    cbDraw(co);
		    er.result = ER_SWALLOWED;

		    if (co->callback)
			co->callback(co, co->callbackData);
		}
	    }
	}
    }

    return er;
}
Exemplo n.º 5
0
static struct eventResult listboxEvent(newtComponent co, struct event ev) {
    struct eventResult er;
    struct listbox * li = co->data;
    struct items *item;
    int i;
    
    er.result = ER_IGNORED;

    if(ev.when == EV_EARLY || ev.when == EV_LATE) {
	return er;
    }

    switch(ev.event) {
      case EV_KEYPRESS:
	if (!li->isActive) break;

	switch(ev.u.key) {
	  case ' ':
	    if(!(li->flags & NEWT_FLAG_MULTIPLE)) break;
	    newtListboxSelectItem(co, newtListboxGetCurrent(co),
				  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 + li->curHeight - 1)) {
		    li->startShowItem = li->currItem - li->curHeight + 1;
		    if(li->startShowItem + li->curHeight > li->numItems)
			li->startShowItem = li->numItems - li->curHeight;
		}
		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_ENTER:
	    if(li->numItems <= 0) break;
	    if(li->flags & NEWT_FLAG_RETURNEXIT)
		er.result = ER_EXITFORM;
	    break;

	  case NEWT_KEY_UP:
	    if(li->numItems <= 0) break;
	    if(li->currItem > 0) {
		li->currItem--;
		if(li->currItem < li->startShowItem)
		    li->startShowItem = li->currItem;
		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 -= li->curHeight - 1;
	    if(li->startShowItem < 0)
		li->startShowItem = 0;
	    li->currItem -= li->curHeight - 1;
	    if(li->currItem < 0)
		li->currItem = 0;
	    newtListboxRealSetCurrent(co);
	    er.result = ER_SWALLOWED;
	    break;

	  case NEWT_KEY_PGDN:
	    if(li->numItems <= 0) break;
	    li->startShowItem += li->curHeight;
	    if(li->startShowItem > (li->numItems - li->curHeight)) {
		li->startShowItem = li->numItems - li->curHeight;
	    }
	    li->currItem += li->curHeight;
	    if(li->currItem >= li->numItems) {
		li->currItem = li->numItems - 1;
	    }
	    newtListboxRealSetCurrent(co);
	    er.result = ER_SWALLOWED;
	    break;

	  case NEWT_KEY_HOME:
	    if(li->numItems <= 0) break;
	    newtListboxSetCurrent(co, 0);
	    er.result = ER_SWALLOWED;
	    break;

	  case NEWT_KEY_END:
	    if(li->numItems <= 0) break;
	    li->startShowItem = li->numItems - li->curHeight;
	    if(li->startShowItem < 0)
		li->startShowItem = 0;
	    li->currItem = li->numItems - 1;
	    newtListboxRealSetCurrent(co);
	    er.result = ER_SWALLOWED;
	    break;
	  default:
	      if (li->numItems <= 0) break;
              if (ev.u.key < NEWT_KEY_EXTRA_BASE && isalpha(ev.u.key)) {
		  for(i = 0, item = li->boxItems; item != NULL &&
			  i < li->currItem; i++, item = item->next);

		  if (item && item->text && (toupper(*item->text) == toupper(ev.u.key))) {
		      item = item->next;
		      i++;
		  } else { 
		      item = li->boxItems;
		      i = 0;
		  }
		  while (item && item->text &&
			 toupper(*item->text) != toupper(ev.u.key)) {
		      item = item->next;
		      i++;
		  }
		  if (item) {
		      li->currItem = i;
		      if(li->currItem < li->startShowItem ||
			 li->currItem > li->startShowItem)
			  li->startShowItem =
			      li->currItem > li->numItems - li->curHeight ?
			      li->startShowItem = li->numItems - li->curHeight :
			      li->currItem;
		      if(li->sb)
			  newtScrollbarSet(li->sb, li->currItem + 1, li->numItems);
		      newtListboxRealSetCurrent(co);
		      er.result = ER_SWALLOWED;
		  }
	      }
	}
	break;

      case EV_FOCUS:
	li->isActive = 1;
	listboxDraw(co);
	if(li->flags & NEWT_FLAG_SHOWCURSOR)
	  newtCursorOn();
	er.result = ER_SWALLOWED;
	break;

      case EV_UNFOCUS:
	li->isActive = 0;
	listboxDraw(co);
	if(li->flags & NEWT_FLAG_SHOWCURSOR)
	  newtCursorOff();
	er.result = ER_SWALLOWED;
	break;

      case EV_MOUSE:
	  /* if this mouse click was within the listbox, make the current
	     item the item clicked on. */
	/* Up scroll arrow */
	if (li->sb &&
	    ev.u.mouse.x == co->left + co->width - li->bdxAdjust - 1 &&
	    ev.u.mouse.y == co->top + li->bdyAdjust) {
	    if(li->numItems <= 0) break;
	    if(li->currItem > 0) {
		li->currItem--;
		if(li->currItem < li->startShowItem)
		    li->startShowItem = li->currItem;
		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;
	}
	/* Down scroll arrow */
	if (li->sb &&
	    ev.u.mouse.x == co->left + co->width - li->bdxAdjust - 1 &&
	    ev.u.mouse.y == co->top + co->height - li->bdyAdjust - 1) {
	    if(li->numItems <= 0) break;
	    if(li->currItem < li->numItems - 1) {
		li->currItem++;
		if(li->currItem > (li->startShowItem + li->curHeight - 1)) {
		    li->startShowItem = li->currItem - li->curHeight + 1;
		    if(li->startShowItem + li->curHeight > li->numItems)
			li->startShowItem = li->numItems - li->curHeight;
		}
		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;
	}
	if ((ev.u.mouse.y >= co->top + li->bdyAdjust) &&
	    (ev.u.mouse.y <= co->top + co->height - (li->bdyAdjust * 2)) &&
	    (ev.u.mouse.x >= co->left + li->bdxAdjust) &&
	    (ev.u.mouse.x <= co->left + co->width + (li->bdxAdjust * 2))) {
	    li->currItem = li->startShowItem +
		(ev.u.mouse.y - li->bdyAdjust - co->top);
	    newtListboxRealSetCurrent(co);
	    listboxDraw(co);
	    if(co->callback) co->callback(co, co->callbackData);
	    er.result = ER_SWALLOWED;
	    break;
	}
    }

    return er;
}