static void rtgui_filelist_view_onenturn(struct rtgui_filelist_view* view) { if (view->items[view->current_item].type == RTGUI_FITEM_DIR) { char new_path[64]; if (strcmp(view->items[view->current_item].name, ".") == 0) return ; if (strcmp(view->items[view->current_item].name, "..") == 0) { char *ptr; ptr = strrchr(view->current_directory, PATH_SEPARATOR); if (ptr == RT_NULL) return ; if (ptr == &(view->current_directory[0])) { /* it's root directory */ new_path[0] = PATH_SEPARATOR; new_path[1] = '\0'; } else { strncpy(new_path, view->current_directory, ptr - view->current_directory + 1); new_path[ptr - view->current_directory] = '\0'; } } else if (view->current_item == 0 && #ifdef _WIN32 (view->current_directory[1] == ':') && (view->current_directory[2] == '\\') #else (view->current_directory[0] == '/') && (view->current_directory[1] == '\0') #endif ) { rtgui_filelist_view_destroy(view); return ; } else { rtgui_filelist_view_menu_pop(RTGUI_WIDGET(view)); return ; } rtgui_filelist_view_set_directory(view, new_path); } }
rtgui_filelist_view_t* rtgui_filelist_view_create(const char* directory, const char* pattern, const rtgui_rect_t* rect) { struct rtgui_filelist_view* view = RT_NULL; /* create a new view */ view = (struct rtgui_filelist_view*) rtgui_widget_create(RTGUI_FILELIST_VIEW_TYPE); if (view != RT_NULL) { view->items = RT_NULL; view->pattern = rt_strdup(pattern); view->page_items = rtgui_rect_height(*rect) / (1 + rtgui_theme_get_selected_height()); rtgui_filelist_view_set_directory(view, directory); } return view; }
static rt_bool_t rtgui_filelist_view_on_folder_item(rtgui_object_t *object, struct rtgui_event *event) { rtgui_win_t *menu; rtgui_listbox_t *listbox; rtgui_filelist_view_t *view; listbox = RTGUI_LISTBOX(object); menu = RTGUI_WIN(rtgui_widget_get_toplevel(RTGUI_WIDGET(object))); view = RTGUI_FILELIST_VIEW(menu->user_data); /* hide window */ rtgui_win_hide(menu); switch (listbox->current_item) { case 0: { char *dir_ptr; /* destroy menu window */ rtgui_win_destroy(menu); dir_ptr = (char *) rtgui_malloc(256); rtgui_filelist_view_get_fullpath(view, dir_ptr, 256); rtgui_filelist_view_set_directory(view, dir_ptr); rtgui_free(dir_ptr); } break; case 1: /* destroy menu window */ rtgui_win_destroy(menu); break; default: /* destroy menu window */ rtgui_win_destroy(menu); break; } return RT_TRUE; }
rtgui_filelist_view_t *rtgui_filelist_view_create(const char *directory, const char *pattern, const rtgui_rect_t *rect) { struct rtgui_filelist_view *view = RT_NULL; /* create a new view */ view = (struct rtgui_filelist_view *) rtgui_widget_create(RTGUI_FILELIST_VIEW_TYPE); if (view != RT_NULL) { rtgui_widget_set_rect(RTGUI_WIDGET(view), rect); view->items = RT_NULL; view->pattern = rt_strdup(pattern); view->page_items = rtgui_rect_height(*rect) / (1 + rtgui_theme_get_selected_height()); /* Avoid divide by 0 error, display at least one item. */ if (view->page_items == 0) view->page_items = 1; rtgui_filelist_view_set_directory(view, directory); } return view; }