int    GLUI_Listbox::special_handler( int key,int modifiers )
{
  GLUI_Listbox_Item *node, *new_node;

  node     = get_item_ptr( int_val );
  new_node = NULL;

  if ( key == GLUT_KEY_DOWN ) {
    new_node = (GLUI_Listbox_Item*) node->next();
  }
  else if ( key == GLUT_KEY_UP ) {
    new_node = (GLUI_Listbox_Item*) node->prev();
  }
  else if ( key == GLUT_KEY_HOME ) {
    new_node = (GLUI_Listbox_Item*) items_list.first_child();
  }
  else if ( key == GLUT_KEY_END ) {
    new_node = (GLUI_Listbox_Item*) items_list.last_child();
  }

  if ( new_node != NULL AND new_node != node ) {
    node = new_node;
    set_int_val( node->id );
    execute_callback();
    return true;
  }
  else {
    return false;
  }
}
예제 #2
0
파일: pool.c 프로젝트: asqz/runner
void* pool_remove(struct pool_t* pool, void* item)
{
   LOGD("Removing item data %p", item);

   struct pool_item_t* ptr = get_item_ptr(item);
   struct pool_item_t* next = ptr->next;

   if (ptr->prev != NULL)
   {
      ptr->prev->next = ptr->next;
   }
   else
   {
      pool->items = ptr->next;
   }

   if (ptr->next != NULL)
   {
      ptr->next->prev = NULL;
   }

   ptr->prev = NULL;
   ptr->next = pool->free_items;
   pool->free_items = ptr;

   return get_data_ptr(next);
}
예제 #3
0
파일: pool.c 프로젝트: asqz/runner
void* pool_get_next(struct pool_t* pool, void* item)
{
   if (item == NULL)
   {
      return get_data_ptr(pool->items);
   }

   struct pool_item_t* ptr = get_item_ptr(item);
   return get_data_ptr(ptr->next);
}
예제 #4
0
파일: pool.c 프로젝트: asqz/runner
void* pool_insert(struct pool_t* pool, void* item, const void* after)
{
   if (pool->free_items == NULL)
   {
      LOGE("Pool is full");
      return NULL;
   }

   LOGD("Inserting item %p after %p", item, after);

   // take new item from free items pool
   struct pool_item_t* ptr = pool->free_items;
   if (ptr->next != NULL)
   {
      ptr->next->prev = NULL;
   }
   pool->free_items = ptr->next;

   if (after != NULL)
   {
      // insert item
      struct pool_item_t* after_ptr = get_item_ptr(after);
      ptr->next = after_ptr->next;
      ptr->prev = after_ptr;
      after_ptr->next = ptr;
      if (ptr->next != NULL)
      {
         ptr->next->prev = ptr;
      }
   }
   else
   {
      // prepend item
      ptr->prev = NULL;
      ptr->next = pool->items;
      if (ptr->next)
      {
         ptr->next->prev = ptr;
      }
      pool->items = ptr;
   }

   ++pool->nitems;

   void* ptr_data = get_data_ptr(ptr);
   memcpy(ptr_data, item, pool->item_size);

   LOGD("Returning ptr to data %p", ptr_data);

   return ptr_data;
}
int  GLUI_Listbox::delete_item(int id)
{
  GLUI_Listbox_Item *node = get_item_ptr(id);

  if (node) 
  {
    node->unlink();
    delete node;
    return true;
  }
  if (recalculate_item_width()) glui->refresh();
  
  return false;
}
예제 #6
0
int  GLUI_List::delete_item( int id )
{
  GLUI_List_Item *node = get_item_ptr( id );

  if ( node ) {
    node->unlink();
    delete node;
    num_lines--;
    return true;
  }
  else {
    return false;
  }
}
예제 #7
0
int  GLUI_List::delete_item( const char *text )
{
  GLUI_List_Item *node = get_item_ptr( text );

  if ( node ) {
    node->unlink();
    delete node;
    num_lines--;
    return true;
  }
  else {
    return false;
  }
}
예제 #8
0
/**
 * \brief Member by pointer. Returns a pointer on the colliding item.
 */
const bear::engine::base_item*
bear::engine::collision_in_expression::operator->() const
{
  return get_item_ptr();
} // collision_in_expression::operator->()