rtgui_container_t *demo_view_scrollbar(void) { rtgui_container_t *container; rtgui_rect_t rect; rtgui_label_t *label; rtgui_scrollbar_t *hbar; rtgui_scrollbar_t *vbar; /* create a demo container */ container = demo_view("ScrollBar View"); /* get demo container rect */ demo_view_get_rect(container, &rect); label = rtgui_label_create("horizontal bar:"); rtgui_container_add_child(container, RTGUI_WIDGET(label)); rect.x1 += 5; rect.x2 -= 5; rect.y1 += 5; rect.y2 = rect.y1 + 18; rtgui_widget_set_rect(RTGUI_WIDGET(label), &rect); rect.y1 += 20; rect.y2 = rect.y1 + 18; hbar = rtgui_scrollbar_create(RTGUI_HORIZONTAL, &rect); rtgui_container_add_child(container, RTGUI_WIDGET(hbar)); /* get demo container rect */ demo_view_get_rect(container, &rect); label = rtgui_label_create("vertical bar:"); rtgui_container_add_child(container, RTGUI_WIDGET(label)); rect.x1 += 5; rect.x2 -= 5; rect.y1 += 45; rect.y2 = rect.y1 + 18; rtgui_widget_set_rect(RTGUI_WIDGET(label), &rect); rect.x1 += 110; rect.x2 = rect.x1 + 20; rect.y1 += 18 + 5; rect.y2 = rect.y1 + 150; vbar = rtgui_scrollbar_create(RTGUI_VERTICAL, &rect); rtgui_container_add_child(container, RTGUI_WIDGET(vbar)); rtgui_scrollbar_set_line_step(vbar, 1); // RTGUI_WIDGET_DISABLE(vbar); return container; }
rtgui_fileview_t* rtgui_fileview_create(pvoid parent, const char* directory, const char* pattern, int left, int top, int w, int h) { rtgui_container_t *container; rtgui_fileview_t* fview = RT_NULL; RT_ASSERT(parent != RT_NULL); container = RTGUI_CONTAINER(parent); /* create a new view */ fview = rtgui_widget_create(RTGUI_FILEVIEW_TYPE); if(fview != RT_NULL) { rtgui_rect_t rect; rtgui_widget_get_rect(container, &rect); rtgui_widget_rect_to_device(container,&rect); rect.x1 += left; rect.y1 += top; rect.x2 = rect.x1+w; rect.y2 = rect.y1+h; fview->items = RT_NULL; fview->pattern = rt_strdup(pattern); fview->item_per_page = RC_H(rect) / (1 + RTGUI_SEL_H); rtgui_widget_set_rect(fview,&rect); rtgui_container_add_child(container, fview); { /* create scrollbar */ rt_uint32_t sLeft,sTop,sw=RTGUI_DEFAULT_SB_WIDTH,sLen; sLeft = RC_W(rect)-RTGUI_WIDGET_BORDER_SIZE(fview)-sw; sTop = RTGUI_WIDGET_BORDER_SIZE(fview); sLen = rect.y2-rect.y1-RTGUI_WIDGET_BORDER_SIZE(fview)*2; fview->sbar = rtgui_scrollbar_create(fview,sLeft,sTop,sw,sLen,RTGUI_VERTICAL); if(fview->sbar != RT_NULL) { fview->sbar->widget_link = fview; fview->sbar->on_scroll = rtgui_fileview_sbar_handle; RTGUI_WIDGET_HIDE(fview->sbar);/* default hid scrollbar */ } } rtgui_fileview_set_directory(fview, directory); } return fview; }
rtgui_view_t *demo_gui_scrollbar(rtgui_view_t* parent_view) { rtgui_view_t *view; rtgui_scrollbar_t* hbar; rtgui_scrollbar_t* vbar; /* create a demo view */ view = demo_view_create(parent_view, "ScrollBar View"); rtgui_label_create(view, "horizontal bar:", 5, 40, 150, 20); hbar = rtgui_scrollbar_create(view, 5, 65, 20, 100, RTGUI_HORIZONTAL); rtgui_scrollbar_set_range(hbar, 10); rtgui_scrollbar_set_page_step(hbar, 5); rtgui_scrollbar_set_line_step(hbar, 1); rtgui_label_create(view, "vertical bar:", 5, 90, 150, 20); vbar = rtgui_scrollbar_create(view, 10, 115, 20, 80, RTGUI_VERTICAL); rtgui_scrollbar_set_range(vbar, 5); rtgui_scrollbar_set_page_step(vbar, 3); rtgui_scrollbar_set_line_step(vbar, 1); return view; }
struct rtgui_edit* rtgui_edit_create(pvoid parent, int left, int top, int w, int h) { struct rtgui_container* container; struct rtgui_edit* edit; RT_ASSERT(parent != RT_NULL); container = RTGUI_CONTAINER(parent); edit = (struct rtgui_edit*)rtgui_widget_create(RTGUI_EDIT_TYPE); if(edit != RT_NULL) { rtgui_rect_t rect; int effe; rtgui_widget_get_rect(RTGUI_WIDGET(container), &rect); rtgui_widget_rect_to_device(RTGUI_WIDGET(container),&rect); rect.x1 += left; rect.y1 += top; rect.x2 = rect.x1+w; rect.y2 = rect.y1+h; rtgui_widget_set_rect(RTGUI_WIDGET(edit),&rect); rtgui_container_add_child(container, RTGUI_WIDGET(edit)); /* set character number */ edit->item_height = edit->font_height; /* the same height */ effe = h-(edit->margin + RTGUI_WIDGET_BORDER_SIZE(edit))*2; edit->row_per_page = effe / edit->item_height; if(effe % edit->item_height) edit->row_per_page += 1; effe = w-(edit->margin + RTGUI_WIDGET_BORDER_SIZE(edit))*2; edit->col_per_page = effe / edit->font_width; if(effe % edit->font_width) edit->col_per_page += 1; edit->update_buf = rtgui_malloc(edit->col_per_page + 1); #ifdef RTGUI_EDIT_USING_SCROLL if(edit->hscroll == RT_NULL && edit->flag & RTGUI_EDIT_HSCROLL) { /* create horizontal scrollbar */ rt_uint32_t _left,_top,_width=RTGUI_DEFAULT_SB_WIDTH,_len; _left = RTGUI_WIDGET_BORDER_SIZE(edit); _top = rtgui_rect_height(rect)-RTGUI_WIDGET_BORDER_SIZE(edit)-_width; _len = rtgui_rect_width(rect)-RTGUI_WIDGET_BORDER_SIZE(edit)*2; if(edit->max_rows > edit->row_per_page) _len -= _width; edit->hscroll = rtgui_scrollbar_create(edit,_left,_top,_width,_len,RTGUI_HORIZONTAL); if(edit->hscroll != RT_NULL) { edit->hscroll->WIDGET_GROUP = (pvoid)edit; edit->hscroll->on_scroll = rtgui_edit_hscroll_handle; RTGUI_WIDGET_HIDE(edit->hscroll); } } if(edit->vscroll == RT_NULL && edit->flag & RTGUI_EDIT_VSCROLL) { /* create vertical scrollbar */ rt_uint32_t _left,_top,_width=RTGUI_DEFAULT_SB_WIDTH,_len; _left = rtgui_rect_width(rect)-RTGUI_WIDGET_BORDER_SIZE(edit)-_width; _top = RTGUI_WIDGET_BORDER_SIZE(edit); _len = rtgui_rect_height(rect)-RTGUI_WIDGET_BORDER_SIZE(edit)*2; if(edit->max_cols > edit->col_per_page) _len -= _width; edit->vscroll = rtgui_scrollbar_create(edit,_left,_top,_width,_len,RTGUI_VERTICAL); if(edit->vscroll != RT_NULL) { edit->vscroll->WIDGET_GROUP = (pvoid)edit; edit->vscroll->on_scroll = rtgui_edit_vscroll_handle; RTGUI_WIDGET_HIDE(edit->vscroll); } } #endif } return edit; }