Initial commit: TXW82x FPV v2.7.0.7-42229 SDK + project sources
This commit is contained in:
18
sdk/lib/lvgl/examples/others/file_explorer/index.rst
Normal file
18
sdk/lib/lvgl/examples/others/file_explorer/index.rst
Normal file
@@ -0,0 +1,18 @@
|
||||
|
||||
Simple File Explorer
|
||||
"""""""""""""""""""""""""
|
||||
|
||||
.. lv_example:: others/file_explorer/lv_example_file_explorer_1
|
||||
:language: c
|
||||
|
||||
Control File Explorer
|
||||
"""""""""""""""""""""""""
|
||||
|
||||
.. lv_example:: others/file_explorer/lv_example_file_explorer_2
|
||||
:language: c
|
||||
|
||||
Custom sort
|
||||
"""""""""""""""""""""""""
|
||||
|
||||
.. lv_example:: others/file_explorer/lv_example_file_explorer_3
|
||||
:language: c
|
||||
@@ -0,0 +1,40 @@
|
||||
/**
|
||||
* @file lv_example_file_explorer.h
|
||||
*
|
||||
*/
|
||||
|
||||
#ifndef LV_EX_FILE_EXPLORER_H
|
||||
#define LV_EX_FILE_EXPLORER_H
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
/*********************
|
||||
* INCLUDES
|
||||
*********************/
|
||||
|
||||
/*********************
|
||||
* DEFINES
|
||||
*********************/
|
||||
|
||||
/**********************
|
||||
* TYPEDEFS
|
||||
**********************/
|
||||
|
||||
/**********************
|
||||
* GLOBAL PROTOTYPES
|
||||
**********************/
|
||||
void lv_example_file_explorer_1(void);
|
||||
void lv_example_file_explorer_2(void);
|
||||
void lv_example_file_explorer_3(void);
|
||||
|
||||
/**********************
|
||||
* MACROS
|
||||
**********************/
|
||||
|
||||
#ifdef __cplusplus
|
||||
} /*extern "C"*/
|
||||
#endif
|
||||
|
||||
#endif /*LV_EX_FILE_EXPLORER_H*/
|
||||
@@ -0,0 +1,84 @@
|
||||
|
||||
#include "../../lv_examples.h"
|
||||
|
||||
#if LV_USE_TABLE && LV_USE_FILE_EXPLORER && (LV_USE_FS_STDIO || LV_USE_FS_POSIX || LV_USE_FS_WIN32 || LV_USE_FS_FATFS) && LV_BUILD_EXAMPLES
|
||||
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
|
||||
static void file_explorer_event_handler(lv_event_t * e)
|
||||
{
|
||||
lv_event_code_t code = lv_event_get_code(e);
|
||||
lv_obj_t * obj = lv_event_get_target(e);
|
||||
|
||||
if(code == LV_EVENT_VALUE_CHANGED) {
|
||||
const char * cur_path = lv_file_explorer_get_current_path(obj);
|
||||
const char * sel_fn = lv_file_explorer_get_selected_file_name(obj);
|
||||
uint16_t path_len = strlen(cur_path);
|
||||
uint16_t fn_len = strlen(sel_fn);
|
||||
|
||||
if((path_len + fn_len) <= LV_FILE_EXPLORER_PATH_MAX_LEN) {
|
||||
char file_info[LV_FILE_EXPLORER_PATH_MAX_LEN];
|
||||
|
||||
strcpy(file_info, cur_path);
|
||||
strcat(file_info, sel_fn);
|
||||
|
||||
LV_LOG_USER("%s", file_info);
|
||||
}
|
||||
else LV_LOG_USER("%s%s", cur_path, sel_fn);
|
||||
}
|
||||
}
|
||||
|
||||
void lv_example_file_explorer_1(void)
|
||||
{
|
||||
lv_obj_t * file_explorer = lv_file_explorer_create(lv_scr_act());
|
||||
lv_file_explorer_set_sort(file_explorer, LV_EXPLORER_SORT_KIND);
|
||||
|
||||
#if LV_USE_FS_WIN32
|
||||
lv_file_explorer_open_dir(file_explorer, "D:");
|
||||
#if LV_FILE_EXPLORER_QUICK_ACCESS
|
||||
lv_file_explorer_set_quick_access_path(file_explorer, LV_EXPLORER_HOME_DIR, "C:/Users/Public/Desktop");
|
||||
lv_file_explorer_set_quick_access_path(file_explorer, LV_EXPLORER_VIDEO_DIR, "C:/Users/Public/Videos");
|
||||
lv_file_explorer_set_quick_access_path(file_explorer, LV_EXPLORER_PICTURES_DIR, "C:/Users/Public/Pictures");
|
||||
lv_file_explorer_set_quick_access_path(file_explorer, LV_EXPLORER_MUSIC_DIR, "C:/Users/Public/Music");
|
||||
lv_file_explorer_set_quick_access_path(file_explorer, LV_EXPLORER_DOCS_DIR, "C:/Users/Public/Documents");
|
||||
lv_file_explorer_set_quick_access_path(file_explorer, LV_EXPLORER_FS_DIR, "D:");
|
||||
#endif
|
||||
|
||||
#else
|
||||
/* linux */
|
||||
lv_file_explorer_open_dir(file_explorer, "A:/");
|
||||
|
||||
#if LV_FILE_EXPLORER_QUICK_ACCESS
|
||||
char * envvar = "HOME";
|
||||
char home_dir[LV_FS_MAX_PATH_LENGTH];
|
||||
strcpy(home_dir, "A:");
|
||||
// get the user's home directory from the HOME enviroment variable
|
||||
strcat(home_dir, getenv(envvar));
|
||||
LV_LOG_USER("home_dir: %s\n", home_dir);
|
||||
lv_file_explorer_set_quick_access_path(file_explorer, LV_EXPLORER_HOME_DIR, home_dir);
|
||||
char video_dir[LV_FS_MAX_PATH_LENGTH];
|
||||
strcpy(video_dir, home_dir);
|
||||
strcat(video_dir, "/Videos");
|
||||
lv_file_explorer_set_quick_access_path(file_explorer, LV_EXPLORER_VIDEO_DIR, video_dir);
|
||||
char picture_dir[LV_FS_MAX_PATH_LENGTH];
|
||||
strcpy(picture_dir, home_dir);
|
||||
strcat(picture_dir, "/Pictures");
|
||||
lv_file_explorer_set_quick_access_path(file_explorer, LV_EXPLORER_PICTURES_DIR, picture_dir);
|
||||
char music_dir[LV_FS_MAX_PATH_LENGTH];
|
||||
strcpy(music_dir, home_dir);
|
||||
strcat(music_dir, "/Music");
|
||||
lv_file_explorer_set_quick_access_path(file_explorer, LV_EXPLORER_MUSIC_DIR, music_dir);
|
||||
char document_dir[LV_FS_MAX_PATH_LENGTH];
|
||||
strcpy(document_dir, home_dir);
|
||||
strcat(document_dir, "/Documents");
|
||||
lv_file_explorer_set_quick_access_path(file_explorer, LV_EXPLORER_DOCS_DIR, document_dir);
|
||||
|
||||
lv_file_explorer_set_quick_access_path(file_explorer, LV_EXPLORER_FS_DIR, "A:/");
|
||||
#endif
|
||||
#endif
|
||||
|
||||
lv_obj_add_event_cb(file_explorer, file_explorer_event_handler, LV_EVENT_ALL, NULL);
|
||||
}
|
||||
|
||||
#endif
|
||||
@@ -0,0 +1,47 @@
|
||||
import fs_driver
|
||||
import os
|
||||
|
||||
LV_FILE_EXPLORER_QUICK_ACCESS = True
|
||||
LV_USE_FS_WIN32 = False
|
||||
LV_FILE_EXPLORER_PATH_MAX_LEN = 128
|
||||
|
||||
def file_explorer_event_handler(e) :
|
||||
|
||||
code = e.get_code()
|
||||
obj = e.get_target()
|
||||
|
||||
if code == lv.EVENT.VALUE_CHANGED:
|
||||
cur_path = obj.explorer_get_current_path()
|
||||
sel_fn = obj.explorer_get_selected_file_name()
|
||||
# print("cur_path: " + str(cur_path), " sel_fn: " + str(sel_fn))
|
||||
print(str(cur_path) + str(sel_fn))
|
||||
|
||||
file_explorer = lv.file_explorer(lv.scr_act())
|
||||
file_explorer.explorer_set_sort(lv.EXPLORER_SORT.KIND)
|
||||
|
||||
|
||||
if LV_USE_FS_WIN32 :
|
||||
file_explorer.explorer_open_dir("D:")
|
||||
if LV_FILE_EXPLORER_QUICK_ACCESS :
|
||||
file_explorer.explorer_set_quick_access_path(lv.EXPLORER.HOME_DIR, "C:/Users/Public/Desktop")
|
||||
file_explorer.explorer_set_quick_access_path(lv.EXPLORER.VIDEO_DIR, "C:/Users/Public/Videos")
|
||||
file_explorer.explorer_set_quick_access_path(lv.EXPLORER_PICTURES_DIR, "C:/Users/Public/Pictures");
|
||||
file_explorer.explorer_set_quick_access_path(lv.EXPLORER_MUSIC_DIR, "C:/Users/Public/Music");
|
||||
file_explorer.explorer_set_quick_access_path(lv.EXPLORER_DOCS_DIR, "C:/Users/Public/Documents");
|
||||
file_explorer.explorer_set_quick_access_path(lv.EXPLORER_FS_DIR, "D:");
|
||||
|
||||
# linux
|
||||
file_explorer.explorer_open_dir("A:/")
|
||||
|
||||
if LV_FILE_EXPLORER_QUICK_ACCESS :
|
||||
home_dir = "A:" + os.getenv('HOME')
|
||||
print("quick access: " + home_dir)
|
||||
file_explorer.explorer_set_quick_access_path(lv.EXPLORER.HOME_DIR, home_dir)
|
||||
file_explorer.explorer_set_quick_access_path(lv.EXPLORER.VIDEO_DIR, home_dir + "/Videos")
|
||||
file_explorer.explorer_set_quick_access_path(lv.EXPLORER.PICTURES_DIR, home_dir + "/Pictures")
|
||||
file_explorer.explorer_set_quick_access_path(lv.EXPLORER.MUSIC_DIR, home_dir + "/Music")
|
||||
file_explorer.explorer_set_quick_access_path(lv.EXPLORER.DOCS_DIR, home_dir + "/Documents")
|
||||
file_explorer.explorer_set_quick_access_path(lv.EXPLORER.FS_DIR, "A:/")
|
||||
|
||||
file_explorer.add_event_cb(file_explorer_event_handler, lv.EVENT.ALL, None)
|
||||
|
||||
@@ -0,0 +1,143 @@
|
||||
|
||||
#include "../../lv_examples.h"
|
||||
|
||||
#if LV_USE_TABLE && LV_USE_FILE_EXPLORER && (LV_USE_FS_STDIO || LV_USE_FS_POSIX || LV_USE_FS_WIN32 || LV_USE_FS_FATFS) && LV_BUILD_EXAMPLES
|
||||
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
|
||||
static void file_explorer_event_handler(lv_event_t * e)
|
||||
{
|
||||
lv_event_code_t code = lv_event_get_code(e);
|
||||
lv_obj_t * obj = lv_event_get_target(e);
|
||||
|
||||
if(code == LV_EVENT_VALUE_CHANGED) {
|
||||
const char * cur_path = lv_file_explorer_get_current_path(obj);
|
||||
const char * sel_fn = lv_file_explorer_get_selected_file_name(obj);
|
||||
uint16_t path_len = strlen(cur_path);
|
||||
uint16_t fn_len = strlen(sel_fn);
|
||||
|
||||
if((path_len + fn_len) <= LV_FILE_EXPLORER_PATH_MAX_LEN) {
|
||||
char file_info[LV_FILE_EXPLORER_PATH_MAX_LEN];
|
||||
|
||||
strcpy(file_info, cur_path);
|
||||
strcat(file_info, sel_fn);
|
||||
|
||||
LV_LOG_USER("%s", file_info);
|
||||
}
|
||||
else LV_LOG_USER("%s%s", cur_path, sel_fn);
|
||||
}
|
||||
}
|
||||
|
||||
static void btn_event_handler(lv_event_t * e)
|
||||
{
|
||||
lv_event_code_t code = lv_event_get_code(e);
|
||||
lv_obj_t * btn = lv_event_get_target(e);
|
||||
lv_obj_t * file_explorer = lv_event_get_user_data(e);
|
||||
|
||||
if(code == LV_EVENT_VALUE_CHANGED) {
|
||||
if(lv_obj_has_state(btn, LV_STATE_CHECKED))
|
||||
lv_obj_add_flag(file_explorer, LV_OBJ_FLAG_HIDDEN);
|
||||
else
|
||||
lv_obj_clear_flag(file_explorer, LV_OBJ_FLAG_HIDDEN);
|
||||
}
|
||||
}
|
||||
|
||||
static void dd_event_handler(lv_event_t * e)
|
||||
{
|
||||
lv_event_code_t code = lv_event_get_code(e);
|
||||
lv_obj_t * dd = lv_event_get_target(e);
|
||||
lv_obj_t * fe_quick_access_obj = lv_event_get_user_data(e);
|
||||
|
||||
if(code == LV_EVENT_VALUE_CHANGED) {
|
||||
char buf[32];
|
||||
lv_dropdown_get_selected_str(dd, buf, sizeof(buf));
|
||||
if(strcmp(buf, "NONE") == 0) {
|
||||
lv_file_explorer_set_sort(fe_quick_access_obj, LV_EXPLORER_SORT_NONE);
|
||||
}
|
||||
else if(strcmp(buf, "KIND") == 0) {
|
||||
lv_file_explorer_set_sort(fe_quick_access_obj, LV_EXPLORER_SORT_KIND);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void lv_example_file_explorer_2(void)
|
||||
{
|
||||
lv_obj_t * file_explorer = lv_file_explorer_create(lv_scr_act());
|
||||
|
||||
#if LV_USE_FS_WIN32
|
||||
lv_file_explorer_open_dir(file_explorer, "D:");
|
||||
#if LV_FILE_EXPLORER_QUICK_ACCESS
|
||||
lv_file_explorer_set_quick_access_path(file_explorer, LV_EXPLORER_HOME_DIR, "C:/Users/Public/Desktop");
|
||||
lv_file_explorer_set_quick_access_path(file_explorer, LV_EXPLORER_VIDEO_DIR, "C:/Users/Public/Videos");
|
||||
lv_file_explorer_set_quick_access_path(file_explorer, LV_EXPLORER_PICTURES_DIR, "C:/Users/Public/Pictures");
|
||||
lv_file_explorer_set_quick_access_path(file_explorer, LV_EXPLORER_MUSIC_DIR, "C:/Users/Public/Music");
|
||||
lv_file_explorer_set_quick_access_path(file_explorer, LV_EXPLORER_DOCS_DIR, "C:/Users/Public/Documents");
|
||||
lv_file_explorer_set_quick_access_path(file_explorer, LV_EXPLORER_FS_DIR, "D:");
|
||||
#endif
|
||||
|
||||
#else
|
||||
/* linux */
|
||||
lv_file_explorer_open_dir(file_explorer, "A:/");
|
||||
#if LV_FILE_EXPLORER_QUICK_ACCESS
|
||||
char * envvar = "HOME";
|
||||
char home_dir[LV_FS_MAX_PATH_LENGTH];
|
||||
strcpy(home_dir, "A:");
|
||||
// get the user's home directory from the HOME enviroment variable
|
||||
strcat(home_dir, getenv(envvar));
|
||||
LV_LOG_USER("home_dir: %s\n", home_dir);
|
||||
lv_file_explorer_set_quick_access_path(file_explorer, LV_EXPLORER_HOME_DIR, home_dir);
|
||||
char video_dir[LV_FS_MAX_PATH_LENGTH];
|
||||
strcpy(video_dir, home_dir);
|
||||
strcat(video_dir, "/Videos");
|
||||
lv_file_explorer_set_quick_access_path(file_explorer, LV_EXPLORER_VIDEO_DIR, video_dir);
|
||||
char picture_dir[LV_FS_MAX_PATH_LENGTH];
|
||||
strcpy(picture_dir, home_dir);
|
||||
strcat(picture_dir, "/Pictures");
|
||||
lv_file_explorer_set_quick_access_path(file_explorer, LV_EXPLORER_PICTURES_DIR, picture_dir);
|
||||
char music_dir[LV_FS_MAX_PATH_LENGTH];
|
||||
strcpy(music_dir, home_dir);
|
||||
strcat(music_dir, "/Music");
|
||||
lv_file_explorer_set_quick_access_path(file_explorer, LV_EXPLORER_MUSIC_DIR, music_dir);
|
||||
char document_dir[LV_FS_MAX_PATH_LENGTH];
|
||||
strcpy(document_dir, home_dir);
|
||||
strcat(document_dir, "/Documents");
|
||||
lv_file_explorer_set_quick_access_path(file_explorer, LV_EXPLORER_DOCS_DIR, document_dir);
|
||||
|
||||
lv_file_explorer_set_quick_access_path(file_explorer, LV_EXPLORER_FS_DIR, "A:/");
|
||||
#endif
|
||||
#endif
|
||||
|
||||
lv_obj_add_event_cb(file_explorer, file_explorer_event_handler, LV_EVENT_ALL, NULL);
|
||||
|
||||
/*Quick access status control button*/
|
||||
lv_obj_t * fe_quick_access_obj = lv_file_explorer_get_quick_access_area(file_explorer);
|
||||
lv_obj_t * fe_header_obj = lv_file_explorer_get_header(file_explorer);
|
||||
lv_obj_t * btn = lv_btn_create(fe_header_obj);
|
||||
lv_obj_set_style_radius(btn, 2, 0);
|
||||
lv_obj_set_style_pad_all(btn, 4, 0);
|
||||
lv_obj_align(btn, LV_ALIGN_LEFT_MID, 0, 0);
|
||||
lv_obj_add_flag(btn, LV_OBJ_FLAG_CHECKABLE);
|
||||
|
||||
lv_obj_t * label = lv_label_create(btn);
|
||||
lv_label_set_text(label, LV_SYMBOL_LIST);
|
||||
lv_obj_center(label);
|
||||
|
||||
lv_obj_add_event_cb(btn, btn_event_handler, LV_EVENT_VALUE_CHANGED, fe_quick_access_obj);
|
||||
|
||||
/*Sort control*/
|
||||
static const char * opts = "NONE\n"
|
||||
"KIND";
|
||||
|
||||
lv_obj_t * dd = lv_dropdown_create(fe_header_obj);
|
||||
lv_obj_set_style_radius(dd, 4, 0);
|
||||
lv_obj_set_style_pad_all(dd, 0, 0);
|
||||
lv_obj_set_size(dd, LV_PCT(30), LV_SIZE_CONTENT);
|
||||
lv_dropdown_set_options_static(dd, opts);
|
||||
lv_obj_align(dd, LV_ALIGN_RIGHT_MID, 0, 0);
|
||||
//lv_obj_align_to(dd, btn, LV_ALIGN_OUT_RIGHT_MID, 0, 0);
|
||||
|
||||
lv_obj_add_event_cb(dd, dd_event_handler, LV_EVENT_VALUE_CHANGED, file_explorer);
|
||||
}
|
||||
|
||||
#endif
|
||||
@@ -0,0 +1,102 @@
|
||||
import fs_driver
|
||||
import os
|
||||
|
||||
LV_FILE_EXPLORER_QUICK_ACCESS = True
|
||||
LV_USE_FS_WIN32 = False
|
||||
LV_FILE_EXPLORER_PATH_MAX_LEN = 128
|
||||
|
||||
def file_explorer_event_handler(e):
|
||||
code = e.get_code()
|
||||
obj = e.get_target()
|
||||
|
||||
if code == lv.EVENT.VALUE_CHANGED:
|
||||
cur_path = obj.explorer_get_current_path()
|
||||
sel_fn = obj.explorer_get_selected_file_name()
|
||||
print(str(cur_path) + str(sel_fn))
|
||||
|
||||
def btn_event_handler(e,fe_quick_access_obj):
|
||||
|
||||
code = e.get_code()
|
||||
btn = e.get_target()
|
||||
# lv_obj_t * file_explorer = lv_event_get_user_data(e);
|
||||
|
||||
if code == lv.EVENT.VALUE_CHANGED :
|
||||
if btn.has_state(lv.STATE.CHECKED) :
|
||||
fe_quick_access_obj.add_flag(lv.obj.FLAG.HIDDEN)
|
||||
else :
|
||||
fe_quick_access_obj.clear_flag(lv.obj.FLAG.HIDDEN)
|
||||
|
||||
def dd_event_handler(e, file_explorer):
|
||||
|
||||
code = e.get_code()
|
||||
dd = e.get_target()
|
||||
# fe_quick_access_obj = lv_event_get_user_data(e);
|
||||
|
||||
if code == lv.EVENT.VALUE_CHANGED :
|
||||
buf = bytearray(32)
|
||||
lv.dropdown.get_selected_str(dd,buf,len(buf))
|
||||
|
||||
if buf[:4] == b"NONE":
|
||||
# print("set sort to NONE")
|
||||
file_explorer.explorer_set_sort(lv.EXPLORER_SORT.NONE)
|
||||
elif buf[:4] == b"KIND" :
|
||||
# print("set sort to KIND")
|
||||
file_explorer.explorer_set_sort(lv.EXPLORER_SORT.KIND)
|
||||
|
||||
file_explorer = lv.file_explorer(lv.scr_act())
|
||||
|
||||
if LV_USE_FS_WIN32 :
|
||||
file_explorer.explorer_open_dir("D:")
|
||||
if LV_FILE_EXPLORER_QUICK_ACCESS :
|
||||
file_explorer.explorer_set_quick_access_path(lv.EXPLORER.HOME_DIR, "C:/Users/Public/Desktop")
|
||||
file_explorer.explorer_set_quick_access_path(lv.EXPLORER.VIDEO_DIR, "C:/Users/Public/Videos")
|
||||
file_explorer.explorer_set_quick_access_path(lv.EXPLORER_PICTURES_DIR, "C:/Users/Public/Pictures");
|
||||
file_explorer.explorer_set_quick_access_path(lv.EXPLORER_MUSIC_DIR, "C:/Users/Public/Music");
|
||||
file_explorer.explorer_set_quick_access_path(lv.EXPLORER_DOCS_DIR, "C:/Users/Public/Documents");
|
||||
file_explorer.explorer_set_quick_access_path(lv.EXPLORER_FS_DIR, "D:");
|
||||
|
||||
# linux
|
||||
file_explorer.explorer_open_dir("A:/")
|
||||
|
||||
if LV_FILE_EXPLORER_QUICK_ACCESS :
|
||||
home_dir = "A:" + os.getenv('HOME')
|
||||
print("quick access: " + home_dir)
|
||||
file_explorer.explorer_set_quick_access_path(lv.EXPLORER.HOME_DIR, home_dir)
|
||||
file_explorer.explorer_set_quick_access_path(lv.EXPLORER.VIDEO_DIR, home_dir + "/Videos")
|
||||
file_explorer.explorer_set_quick_access_path(lv.EXPLORER.PICTURES_DIR, home_dir + "/Pictures")
|
||||
file_explorer.explorer_set_quick_access_path(lv.EXPLORER.MUSIC_DIR, home_dir + "/Music")
|
||||
file_explorer.explorer_set_quick_access_path(lv.EXPLORER.DOCS_DIR, home_dir + "/Documents")
|
||||
file_explorer.explorer_set_quick_access_path(lv.EXPLORER.FS_DIR, "A:/")
|
||||
|
||||
file_explorer.add_event_cb(file_explorer_event_handler, lv.EVENT.ALL, None)
|
||||
|
||||
# Quick access status control button
|
||||
fe_quick_access_obj = file_explorer.explorer_get_quick_access_area()
|
||||
fe_header_obj = file_explorer.explorer_get_header()
|
||||
btn = lv.btn(fe_header_obj)
|
||||
btn.set_style_radius(2, 0)
|
||||
btn.set_style_pad_all(4, 0)
|
||||
btn.align(lv.ALIGN.LEFT_MID, 0, 0)
|
||||
btn.add_flag(lv.obj.FLAG.CHECKABLE)
|
||||
|
||||
label = lv.label(btn)
|
||||
label.set_text(lv.SYMBOL.LIST)
|
||||
label.center()
|
||||
|
||||
btn.add_event_cb(lambda evt: btn_event_handler(evt,fe_quick_access_obj), lv.EVENT.VALUE_CHANGED, None)
|
||||
#btn.add_event_cb(lambda evt: btn_event_handler(evt,file_explorer), lv.EVENT.VALUE_CHANGED, None)
|
||||
|
||||
# Sort control
|
||||
opts = "NONE\nKIND"
|
||||
|
||||
dd = lv.dropdown(fe_header_obj)
|
||||
dd.set_style_radius(4, 0)
|
||||
dd.set_style_pad_all(0, 0)
|
||||
dd.set_size(lv.pct(30), lv.SIZE_CONTENT)
|
||||
dd.set_options_static(opts)
|
||||
dd.align(lv.ALIGN.RIGHT_MID, 0, 0)
|
||||
# lv_obj_align_to(dd, btn, LV_ALIGN_OUT_RIGHT_MID, 0, 0);
|
||||
|
||||
dd.add_event_cb(lambda evt: dd_event_handler(evt,file_explorer), lv.EVENT.VALUE_CHANGED, None)
|
||||
#dd.add_event_cb(lambda evt: dd_event_handler(evt,fe_quick_access_obj), lv.EVENT.VALUE_CHANGED, None)
|
||||
|
||||
@@ -0,0 +1,128 @@
|
||||
|
||||
#include "../../lv_examples.h"
|
||||
|
||||
#if LV_USE_TABLE && LV_USE_FILE_EXPLORER && (LV_USE_FS_STDIO || LV_USE_FS_POSIX || LV_USE_FS_WIN32 || LV_USE_FS_FATFS) && LV_BUILD_EXAMPLES
|
||||
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
|
||||
static void exch_table_item(lv_obj_t * tb, int16_t i, int16_t j)
|
||||
{
|
||||
const char * tmp;
|
||||
tmp = lv_table_get_cell_value(tb, i, 0);
|
||||
lv_table_set_cell_value(tb, 0, 2, tmp);
|
||||
lv_table_set_cell_value(tb, i, 0, lv_table_get_cell_value(tb, j, 0));
|
||||
lv_table_set_cell_value(tb, j, 0, lv_table_get_cell_value(tb, 0, 2));
|
||||
|
||||
tmp = lv_table_get_cell_value(tb, i, 1);
|
||||
lv_table_set_cell_value(tb, 0, 2, tmp);
|
||||
lv_table_set_cell_value(tb, i, 1, lv_table_get_cell_value(tb, j, 1));
|
||||
lv_table_set_cell_value(tb, j, 1, lv_table_get_cell_value(tb, 0, 2));
|
||||
}
|
||||
|
||||
|
||||
/*Quick sort 3 way*/
|
||||
static void sort_by_file_kind(lv_obj_t * tb, int16_t lo, int16_t hi)
|
||||
{
|
||||
if(lo >= hi) return;
|
||||
|
||||
int16_t lt = lo;
|
||||
int16_t i = lo + 1;
|
||||
int16_t gt = hi;
|
||||
const char * v = lv_table_get_cell_value(tb, lo, 1);
|
||||
while(i <= gt) {
|
||||
if(strcmp(lv_table_get_cell_value(tb, i, 1), v) < 0)
|
||||
exch_table_item(tb, lt++, i++);
|
||||
else if(strcmp(lv_table_get_cell_value(tb, i, 1), v) > 0)
|
||||
exch_table_item(tb, i, gt--);
|
||||
else
|
||||
i++;
|
||||
}
|
||||
|
||||
sort_by_file_kind(tb, lo, lt - 1);
|
||||
sort_by_file_kind(tb, gt + 1, hi);
|
||||
}
|
||||
|
||||
|
||||
static void file_explorer_event_handler(lv_event_t * e)
|
||||
{
|
||||
lv_event_code_t code = lv_event_get_code(e);
|
||||
lv_obj_t * obj = lv_event_get_target(e);
|
||||
|
||||
if(code == LV_EVENT_VALUE_CHANGED) {
|
||||
const char * cur_path = lv_file_explorer_get_current_path(obj);
|
||||
const char * sel_fn = lv_file_explorer_get_selected_file_name(obj);
|
||||
uint16_t path_len = strlen(cur_path);
|
||||
uint16_t fn_len = strlen(sel_fn);
|
||||
|
||||
if((path_len + fn_len) <= LV_FILE_EXPLORER_PATH_MAX_LEN) {
|
||||
char file_info[LV_FILE_EXPLORER_PATH_MAX_LEN];
|
||||
|
||||
strcpy(file_info, cur_path);
|
||||
strcat(file_info, sel_fn);
|
||||
|
||||
LV_LOG_USER("%s", file_info);
|
||||
}
|
||||
else LV_LOG_USER("%s%s", cur_path, sel_fn);
|
||||
}
|
||||
else if(code == LV_EVENT_READY) {
|
||||
lv_obj_t * tb = lv_file_explorer_get_file_table(obj);
|
||||
uint16_t sum = lv_table_get_row_cnt(tb);
|
||||
|
||||
sort_by_file_kind(tb, 0, (sum - 1));
|
||||
}
|
||||
}
|
||||
|
||||
void lv_example_file_explorer_3(void)
|
||||
{
|
||||
lv_obj_t * file_explorer = lv_file_explorer_create(lv_scr_act());
|
||||
/*Before custom sort, please set the default sorting to NONE. The default is NONE.*/
|
||||
lv_file_explorer_set_sort(file_explorer, LV_EXPLORER_SORT_NONE);
|
||||
|
||||
#if LV_USE_FS_WIN32
|
||||
lv_file_explorer_open_dir(file_explorer, "D:");
|
||||
#if LV_FILE_EXPLORER_QUICK_ACCESS
|
||||
lv_file_explorer_set_quick_access_path(file_explorer, LV_EXPLORER_HOME_DIR, "C:/Users/Public/Desktop");
|
||||
lv_file_explorer_set_quick_access_path(file_explorer, LV_EXPLORER_VIDEO_DIR, "C:/Users/Public/Videos");
|
||||
lv_file_explorer_set_quick_access_path(file_explorer, LV_EXPLORER_PICTURES_DIR, "C:/Users/Public/Pictures");
|
||||
lv_file_explorer_set_quick_access_path(file_explorer, LV_EXPLORER_MUSIC_DIR, "C:/Users/Public/Music");
|
||||
lv_file_explorer_set_quick_access_path(file_explorer, LV_EXPLORER_DOCS_DIR, "C:/Users/Public/Documents");
|
||||
lv_file_explorer_set_quick_access_path(file_explorer, LV_EXPLORER_FS_DIR, "D:");
|
||||
#endif
|
||||
|
||||
#else
|
||||
/* linux */
|
||||
lv_file_explorer_open_dir(file_explorer, "A:/");
|
||||
#if LV_FILE_EXPLORER_QUICK_ACCESS
|
||||
char * envvar = "HOME";
|
||||
char home_dir[LV_FS_MAX_PATH_LENGTH];
|
||||
strcpy(home_dir, "A:");
|
||||
// get the user's home directory from the HOME enviroment variable
|
||||
strcat(home_dir, getenv(envvar));
|
||||
LV_LOG_USER("home_dir: %s\n", home_dir);
|
||||
lv_file_explorer_set_quick_access_path(file_explorer, LV_EXPLORER_HOME_DIR, home_dir);
|
||||
char video_dir[LV_FS_MAX_PATH_LENGTH];
|
||||
strcpy(video_dir, home_dir);
|
||||
strcat(video_dir, "/Videos");
|
||||
lv_file_explorer_set_quick_access_path(file_explorer, LV_EXPLORER_VIDEO_DIR, video_dir);
|
||||
char picture_dir[LV_FS_MAX_PATH_LENGTH];
|
||||
strcpy(picture_dir, home_dir);
|
||||
strcat(picture_dir, "/Pictures");
|
||||
lv_file_explorer_set_quick_access_path(file_explorer, LV_EXPLORER_PICTURES_DIR, picture_dir);
|
||||
char music_dir[LV_FS_MAX_PATH_LENGTH];
|
||||
strcpy(music_dir, home_dir);
|
||||
strcat(music_dir, "/Music");
|
||||
lv_file_explorer_set_quick_access_path(file_explorer, LV_EXPLORER_MUSIC_DIR, music_dir);
|
||||
char document_dir[LV_FS_MAX_PATH_LENGTH];
|
||||
strcpy(document_dir, home_dir);
|
||||
strcat(document_dir, "/Documents");
|
||||
lv_file_explorer_set_quick_access_path(file_explorer, LV_EXPLORER_DOCS_DIR, document_dir);
|
||||
|
||||
lv_file_explorer_set_quick_access_path(file_explorer, LV_EXPLORER_FS_DIR, "A:/");
|
||||
#endif
|
||||
#endif
|
||||
|
||||
lv_obj_add_event_cb(file_explorer, file_explorer_event_handler, LV_EVENT_ALL, NULL);
|
||||
}
|
||||
|
||||
#endif
|
||||
@@ -0,0 +1,89 @@
|
||||
import fs_driver
|
||||
import os
|
||||
|
||||
LV_FILE_EXPLORER_QUICK_ACCESS = True
|
||||
LV_USE_FS_WIN32 = False
|
||||
LV_FILE_EXPLORER_PATH_MAX_LEN = 128
|
||||
|
||||
def exch_table_item(tb, i, j):
|
||||
tmp = tb.get_cell_value(i, 0)
|
||||
tb.set_cell_value(0, 2, tmp)
|
||||
tb.set_cell_value(i, 0, tb.get_cell_value(j, 0))
|
||||
tb.set_cell_value(j, 0, tb.get_cell_value(0, 2))
|
||||
|
||||
tmp = tb.get_cell_value(i, 1)
|
||||
tb.set_cell_value(0, 2, tmp)
|
||||
tb.set_cell_value(i, 1, tb.get_cell_value(j, 1))
|
||||
tb.set_cell_value(j, 1, tb.get_cell_value(0, 2))
|
||||
|
||||
# Quick sort 3 way
|
||||
def sort_by_file_kind(tb, lo, hi) :
|
||||
if lo >= hi:
|
||||
return;
|
||||
|
||||
lt = lo
|
||||
i = lo + 1
|
||||
gt = hi
|
||||
v = tb.get_cell_value(lo, 1)
|
||||
|
||||
while i <= gt :
|
||||
|
||||
if tb.get_cell_value(i, 1) < v :
|
||||
lt += 1
|
||||
i += 1
|
||||
exch_table_item(tb, lt, i)
|
||||
elif tb.get_cell_value(i, 1) > v:
|
||||
gt -= 1
|
||||
exch_table_item(tb, i, gt)
|
||||
else :
|
||||
i += 1
|
||||
sort_by_file_kind(tb, lo, lt - 1);
|
||||
sort_by_file_kind(tb, gt + 1, hi);
|
||||
|
||||
|
||||
def file_explorer_event_handler(e) :
|
||||
|
||||
code = e.get_code()
|
||||
obj = e.get_target()
|
||||
|
||||
if code == lv.EVENT.VALUE_CHANGED:
|
||||
cur_path = obj.explorer_get_current_path()
|
||||
sel_fn = obj.explorer_get_selected_file_name()
|
||||
print(str(cur_path) + str(sel_fn))
|
||||
|
||||
elif code == lv.EVENT.READY :
|
||||
tb = obj.explorer_get_file_table()
|
||||
sum = tb.get_row_cnt()
|
||||
# print("sum: ",sum)
|
||||
sort_by_file_kind(tb, 0, (sum - 1));
|
||||
|
||||
file_explorer = lv.file_explorer(lv.scr_act())
|
||||
# Before custom sort, please set the default sorting to NONE. The default is NONE.
|
||||
file_explorer.explorer_set_sort(lv.EXPLORER_SORT.NONE)
|
||||
|
||||
file_explorer = lv.file_explorer(lv.scr_act())
|
||||
|
||||
if LV_USE_FS_WIN32 :
|
||||
file_explorer.explorer_open_dir("D:")
|
||||
if LV_FILE_EXPLORER_QUICK_ACCESS :
|
||||
file_explorer.explorer_set_quick_access_path(lv.EXPLORER.HOME_DIR, "C:/Users/Public/Desktop")
|
||||
file_explorer.explorer_set_quick_access_path(lv.EXPLORER.VIDEO_DIR, "C:/Users/Public/Videos")
|
||||
file_explorer.explorer_set_quick_access_path(lv.EXPLORER_PICTURES_DIR, "C:/Users/Public/Pictures");
|
||||
file_explorer.explorer_set_quick_access_path(lv.EXPLORER_MUSIC_DIR, "C:/Users/Public/Music");
|
||||
file_explorer.explorer_set_quick_access_path(lv.EXPLORER_DOCS_DIR, "C:/Users/Public/Documents");
|
||||
file_explorer.explorer_set_quick_access_path(lv.EXPLORER_FS_DIR, "D:");
|
||||
|
||||
# linux
|
||||
file_explorer.explorer_open_dir("A:/")
|
||||
|
||||
if LV_FILE_EXPLORER_QUICK_ACCESS :
|
||||
home_dir = "A:" + os.getenv('HOME')
|
||||
print("quick access: " + home_dir)
|
||||
file_explorer.explorer_set_quick_access_path(lv.EXPLORER.HOME_DIR, home_dir)
|
||||
file_explorer.explorer_set_quick_access_path(lv.EXPLORER.VIDEO_DIR, home_dir + "/Videos")
|
||||
file_explorer.explorer_set_quick_access_path(lv.EXPLORER.PICTURES_DIR, home_dir + "/Pictures")
|
||||
file_explorer.explorer_set_quick_access_path(lv.EXPLORER.MUSIC_DIR, home_dir + "/Music")
|
||||
file_explorer.explorer_set_quick_access_path(lv.EXPLORER.DOCS_DIR, home_dir + "/Documents")
|
||||
file_explorer.explorer_set_quick_access_path(lv.EXPLORER.FS_DIR, "A:/")
|
||||
|
||||
file_explorer.add_event_cb(file_explorer_event_handler, lv.EVENT.ALL, None)
|
||||
Reference in New Issue
Block a user