static void _show_title(int page) { mp->max_scroll = Model.num_channels + NUM_VIRT_CHANNELS > ENTRIES_PER_PAGE ? Model.num_channels + NUM_VIRT_CHANNELS - ENTRIES_PER_PAGE : Model.num_channels + NUM_VIRT_CHANNELS; PAGE_ShowHeader(PAGE_GetName(PAGEID_MIXER)); GUI_CreateIcon(&gui->testico, LCD_WIDTH-128, 0, &icons[ICON_CHANTEST], show_chantest_cb, NULL); GUI_CreateIcon(&gui->reorderico, LCD_WIDTH-96, 0, &icons[ICON_ORDER], reorder_cb, NULL); GUI_CreateScrollbar(&gui->scroll, LCD_WIDTH-16, 32, LCD_HEIGHT-32, mp->max_scroll+1, NULL, scroll_cb, NULL); GUI_SetScrollbar(&gui->scroll, page); }
static void create_scrollable_objs(guiScrollable_t *scrollable, int row) { if (row >= 0) { row = adjust_row(scrollable, row); } else { //Force row # row = - row; } int offset = row - scrollable->cur_row; if (scrollable->head && offset == 0) return; scrollable->cur_row = row; int rel_row = 0; int selectable_rows = 0; GUI_RemoveScrollableObjs((guiObject_t *)scrollable); guiObject_t *head = objHEAD; objHEAD = NULL; for(int y = scrollable->header.box.y, bottom = y + scrollable->header.box.height; y < bottom && row < scrollable->item_count && rel_row < scrollable->max_visible_rows; row++, rel_row++) { guiObject_t *row_start = get_last_object(); scrollable->row_cb(row, rel_row, y, scrollable->cb_data); OBJ_SET_ROWSTART(row_start ? row_start->next : objHEAD, 1); y += scrollable->row_height * (scrollable->size_cb ? scrollable->size_cb(row, scrollable->cb_data) : 1); if (y > bottom + scrollable->row_height - ROW_HEIGHT_OFFSET) break; //is not selectable because it's not completely visible selectable_rows++; } scrollable->visible_rows = rel_row; scrollable->selectable_rows = selectable_rows; scrollable->head = objHEAD; objHEAD = head; head = scrollable->head; while(head) { OBJ_SET_SCROLLABLE(head, 1); head = head->next; } int scroll_pos = (2 * scrollable->cur_row + rel_row) / 2; if (scrollable->cur_row == 0) scroll_pos = 0; else if(scrollable->cur_row + rel_row == scrollable->item_count) scroll_pos = scrollable->item_count - 1; int hidden = (rel_row >= scrollable->item_count) ? 1 : 0; GUI_SetHidden((guiObject_t *)&scrollable->scrollbar, hidden); if (! hidden) GUI_SetScrollbar(&scrollable->scrollbar, scroll_pos); }