|
@@ -372,114 +372,129 @@ file_browser_run(struct file_browser *browser, struct nk_context *ctx)
|
|
|
int ret = 0;
|
|
|
struct media *media = browser->media;
|
|
|
struct nk_rect total_space;
|
|
|
+ static nk_bool file_browser_is_open = nk_true;
|
|
|
|
|
|
- if (nk_begin(ctx, "File Browser", nk_rect(50, 50, 600, 400),
|
|
|
- NK_WINDOW_BORDER|NK_WINDOW_MOVABLE|NK_WINDOW_SCALABLE|
|
|
|
- NK_WINDOW_CLOSABLE|NK_WINDOW_MINIMIZABLE|NK_WINDOW_TITLE))
|
|
|
+ if (file_browser_is_open)
|
|
|
{
|
|
|
- static float ratio[] = {0.25f, NK_UNDEFINED};
|
|
|
- float spacing_x = ctx->style.window.spacing.x;
|
|
|
-
|
|
|
- /* output path directory selector in the menubar */
|
|
|
- ctx->style.window.spacing.x = 0;
|
|
|
- nk_menubar_begin(ctx);
|
|
|
+ if (nk_begin(ctx, "File Browser", nk_rect(50, 50, 600, 400),
|
|
|
+ NK_WINDOW_BORDER|NK_WINDOW_MOVABLE|NK_WINDOW_SCALABLE|NK_WINDOW_NO_SCROLLBAR|
|
|
|
+ NK_WINDOW_CLOSABLE|NK_WINDOW_MINIMIZABLE|NK_WINDOW_TITLE))
|
|
|
{
|
|
|
- char *d = browser->directory;
|
|
|
- char *begin = d + 1;
|
|
|
- nk_layout_row_dynamic(ctx, 25, 6);
|
|
|
- while (*d++) {
|
|
|
- if (*d == '/') {
|
|
|
- *d = '\0';
|
|
|
- if (nk_button_label(ctx, begin)) {
|
|
|
- *d++ = '/'; *d = '\0';
|
|
|
- file_browser_reload_directory_content(browser, browser->directory);
|
|
|
- break;
|
|
|
+ static float ratio[] = {0.25f, NK_UNDEFINED};
|
|
|
+ float spacing_x = ctx->style.window.spacing.x;
|
|
|
+
|
|
|
+ /* output path directory selector in the menubar */
|
|
|
+ ctx->style.window.spacing.x = 0;
|
|
|
+ nk_menubar_begin(ctx);
|
|
|
+ {
|
|
|
+ char *d = browser->directory;
|
|
|
+ char *begin = d + 1;
|
|
|
+ nk_layout_row_dynamic(ctx, 25, 6);
|
|
|
+ while (*d++) {
|
|
|
+ if (*d == '/') {
|
|
|
+ *d = '\0';
|
|
|
+ if (nk_button_label(ctx, begin)) {
|
|
|
+ *d++ = '/'; *d = '\0';
|
|
|
+ file_browser_reload_directory_content(browser, browser->directory);
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ *d = '/';
|
|
|
+ begin = d + 1;
|
|
|
}
|
|
|
- *d = '/';
|
|
|
- begin = d + 1;
|
|
|
}
|
|
|
}
|
|
|
- }
|
|
|
- nk_menubar_end(ctx);
|
|
|
- ctx->style.window.spacing.x = spacing_x;
|
|
|
-
|
|
|
- /* window layout */
|
|
|
- total_space = nk_window_get_content_region(ctx);
|
|
|
- nk_layout_row(ctx, NK_DYNAMIC, total_space.h, 2, ratio);
|
|
|
-
|
|
|
- nk_group_begin(ctx, "Special", NK_WINDOW_NO_SCROLLBAR);
|
|
|
- {
|
|
|
- struct nk_image home = media->icons.home;
|
|
|
- struct nk_image desktop = media->icons.desktop;
|
|
|
- struct nk_image computer = media->icons.computer;
|
|
|
-
|
|
|
- nk_layout_row_dynamic(ctx, 40, 1);
|
|
|
- if (nk_button_image_label(ctx, home, "home", NK_TEXT_CENTERED))
|
|
|
- file_browser_reload_directory_content(browser, browser->home);
|
|
|
- if (nk_button_image_label(ctx,desktop,"desktop",NK_TEXT_CENTERED))
|
|
|
- file_browser_reload_directory_content(browser, browser->desktop);
|
|
|
- if (nk_button_image_label(ctx,computer,"computer",NK_TEXT_CENTERED))
|
|
|
- file_browser_reload_directory_content(browser, "/");
|
|
|
- nk_group_end(ctx);
|
|
|
- }
|
|
|
+ nk_menubar_end(ctx);
|
|
|
+ ctx->style.window.spacing.x = spacing_x;
|
|
|
+
|
|
|
+ /* window layout */
|
|
|
+ total_space = nk_window_get_content_region(ctx);
|
|
|
+ nk_layout_row(ctx, NK_DYNAMIC, total_space.h - 40, 2, ratio);
|
|
|
+
|
|
|
+ nk_group_begin(ctx, "Special", NK_WINDOW_NO_SCROLLBAR);
|
|
|
+ {
|
|
|
+ struct nk_image home = media->icons.home;
|
|
|
+ struct nk_image desktop = media->icons.desktop;
|
|
|
+ struct nk_image computer = media->icons.computer;
|
|
|
+
|
|
|
+ nk_layout_row_dynamic(ctx, 40, 1);
|
|
|
+ if (nk_button_image_label(ctx, home, "home", NK_TEXT_CENTERED))
|
|
|
+ file_browser_reload_directory_content(browser, browser->home);
|
|
|
+ if (nk_button_image_label(ctx,desktop,"desktop",NK_TEXT_CENTERED))
|
|
|
+ file_browser_reload_directory_content(browser, browser->desktop);
|
|
|
+ if (nk_button_image_label(ctx,computer,"computer",NK_TEXT_CENTERED))
|
|
|
+ file_browser_reload_directory_content(browser, "/");
|
|
|
+ nk_group_end(ctx);
|
|
|
+ }
|
|
|
|
|
|
- /* output directory content window */
|
|
|
- nk_group_begin(ctx, "Content", 0);
|
|
|
- {
|
|
|
- int index = -1;
|
|
|
- size_t i = 0, j = 0;
|
|
|
- size_t rows = 0, cols = 0;
|
|
|
- size_t count = browser->dir_count + browser->file_count;
|
|
|
-
|
|
|
- /* File icons layout */
|
|
|
- cols = 2;
|
|
|
- rows = count / cols;
|
|
|
- static float ratio2[] = {0.08f, NK_UNDEFINED};
|
|
|
- nk_layout_row(ctx, NK_DYNAMIC, 30, 2, ratio2);
|
|
|
- for (i = 0; i <= rows; i += 1) {
|
|
|
- size_t n = j + cols;
|
|
|
- for (; j < count && j < n; ++j) {
|
|
|
- /* draw one column of icons */
|
|
|
- if (j < browser->dir_count) {
|
|
|
- /* draw and execute directory buttons */
|
|
|
- if (nk_button_image(ctx,media->icons.directory))
|
|
|
- index = (int)j;
|
|
|
-
|
|
|
- nk_label(ctx, browser->directories[j], NK_TEXT_LEFT);
|
|
|
- } else {
|
|
|
- /* draw and execute files buttons */
|
|
|
- struct nk_image *icon;
|
|
|
- size_t fileIndex = ((size_t)j - browser->dir_count);
|
|
|
- icon = media_icon_for_file(media,browser->files[fileIndex]);
|
|
|
- if (nk_button_image(ctx, *icon)) {
|
|
|
- strncpy(browser->file, browser->directory, MAX_PATH_LEN);
|
|
|
- n = strlen(browser->file);
|
|
|
- strncpy(browser->file + n, browser->files[fileIndex], MAX_PATH_LEN - n);
|
|
|
- ret = 1;
|
|
|
+ /* output directory content window */
|
|
|
+ nk_group_begin(ctx, "Content", NK_WINDOW_BORDER);
|
|
|
+ {
|
|
|
+ int index = -1;
|
|
|
+ size_t i = 0, j = 0;
|
|
|
+ size_t rows = 0, cols = 0;
|
|
|
+ size_t count = browser->dir_count + browser->file_count;
|
|
|
+
|
|
|
+ /* File icons layout */
|
|
|
+ cols = 2;
|
|
|
+ rows = count / cols;
|
|
|
+ static float ratio2[] = {0.08f, NK_UNDEFINED};
|
|
|
+ nk_layout_row(ctx, NK_DYNAMIC, 30, 2, ratio2);
|
|
|
+ for (i = 0; i <= rows; i += 1) {
|
|
|
+ size_t n = j + cols;
|
|
|
+ for (; j < count && j < n; ++j) {
|
|
|
+ /* draw one column of icons */
|
|
|
+ if (j < browser->dir_count) {
|
|
|
+ /* draw and execute directory buttons */
|
|
|
+ if (nk_button_image(ctx,media->icons.directory))
|
|
|
+ index = (int)j;
|
|
|
+
|
|
|
+ nk_label(ctx, browser->directories[j], NK_TEXT_LEFT);
|
|
|
+ } else {
|
|
|
+ /* draw and execute files buttons */
|
|
|
+ struct nk_image *icon;
|
|
|
+ size_t fileIndex = ((size_t)j - browser->dir_count);
|
|
|
+ icon = media_icon_for_file(media,browser->files[fileIndex]);
|
|
|
+ if (nk_button_image(ctx, *icon)) {
|
|
|
+ strncpy(browser->file, browser->directory, MAX_PATH_LEN);
|
|
|
+ n = strlen(browser->file);
|
|
|
+ strncpy(browser->file + n, browser->files[fileIndex], MAX_PATH_LEN - n);
|
|
|
+ ret = 1;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ /* draw one column of labels */
|
|
|
+ if (j >= browser->dir_count) {
|
|
|
+ size_t t = j - browser->dir_count;
|
|
|
+ nk_label(ctx,browser->files[t],NK_TEXT_LEFT);
|
|
|
}
|
|
|
- }
|
|
|
- /* draw one column of labels */
|
|
|
- if (j >= browser->dir_count) {
|
|
|
- size_t t = j - browser->dir_count;
|
|
|
- nk_label(ctx,browser->files[t],NK_TEXT_LEFT);
|
|
|
}
|
|
|
}
|
|
|
- }
|
|
|
|
|
|
- if (index != -1) {
|
|
|
- size_t n = strlen(browser->directory);
|
|
|
- strncpy(browser->directory + n, browser->directories[index], MAX_PATH_LEN - n);
|
|
|
- n = strlen(browser->directory);
|
|
|
- if (n < MAX_PATH_LEN - 1) {
|
|
|
- browser->directory[n] = '/';
|
|
|
- browser->directory[n+1] = '\0';
|
|
|
+ if (index != -1) {
|
|
|
+ size_t n = strlen(browser->directory);
|
|
|
+ strncpy(browser->directory + n, browser->directories[index], MAX_PATH_LEN - n);
|
|
|
+ n = strlen(browser->directory);
|
|
|
+ if (n < MAX_PATH_LEN - 1) {
|
|
|
+ browser->directory[n] = '/';
|
|
|
+ browser->directory[n+1] = '\0';
|
|
|
+ }
|
|
|
+ file_browser_reload_directory_content(browser, browser->directory);
|
|
|
}
|
|
|
- file_browser_reload_directory_content(browser, browser->directory);
|
|
|
+ nk_group_end(ctx);
|
|
|
}
|
|
|
- nk_group_end(ctx);
|
|
|
+
|
|
|
+ nk_layout_row_dynamic(ctx, 30, 5);
|
|
|
+ nk_label(ctx,"",NK_TEXT_LEFT);
|
|
|
+ nk_label(ctx,"",NK_TEXT_LEFT);
|
|
|
+ nk_label(ctx,"",NK_TEXT_LEFT);
|
|
|
+ if(nk_button_label(ctx, "Cancel"))
|
|
|
+ {
|
|
|
+ fprintf(stdout, "File dialog has been closed!\n");
|
|
|
+ file_browser_is_open = nk_false;
|
|
|
+ }
|
|
|
+ if(nk_button_label(ctx, "Open"))
|
|
|
+ fprintf(stdout, "Insert routine to open/save the file!\n");
|
|
|
}
|
|
|
+ nk_end(ctx);
|
|
|
}
|
|
|
- nk_end(ctx);
|
|
|
return ret;
|
|
|
}
|
|
|
-
|