libxputty 0.1
Loading...
Searching...
No Matches
Data Structures | Functions
xfile-dialog.h File Reference

Go to the source code of this file.

Data Structures

struct  FileDialog
 
struct  FileButton
 

Functions

Widget_topen_directory_dialog (Widget_t *w, const char *path)
 
Widget_topen_file_dialog (Widget_t *w, const char *path, const char *filter)
 open_file_dialog - open a non blocking dialog window, to select a file. The path to open the file-selector could be NULL It will open then in $HOME. The filter to use could be NULL, then the file-selector will show all files.
 
Widget_tsave_file_dialog (Widget_t *w, const char *path, const char *filter)
 save_file_dialog - open a non blocking dialog window, to select a file. The path to open the file-selector could be NULL It will open then in $HOME. The filter to use could be NULL, then the file-selector will show all files.
 
Widget_tadd_file_button (Widget_t *parent, int x, int y, int width, int height, const char *path, const char *filter)
 add_file_button - add a pre-defined button which will pop-up a file dialog when pressed. path and filter will e hand over to the file selector.
 
Widget_tadd_save_file_button (Widget_t *parent, int x, int y, int width, int height, const char *path, const char *filter)
 add_save_file_button - add a pre-defined button which will pop-up a file dialog when pressed. path and filter will e hand over to the file selector.
 

Function Documentation

◆ add_file_button()

Widget_t * add_file_button ( Widget_t parent,
int  x,
int  y,
int  width,
int  height,
const char *  path,
const char *  filter 
)

add_file_button - add a pre-defined button which will pop-up a file dialog when pressed. path and filter will e hand over to the file selector.

Returns
Widget_t* - pointer to the Widget_t struct

Definition at line 799 of file xfile-dialog.c.

800 {
801 FileButton *filebutton = (FileButton*)malloc(sizeof(FileButton));
802 filebutton->path = path;
803 filebutton->filter = filter;
804 filebutton->last_path = NULL;
805 filebutton->w = NULL;
806 filebutton->is_active = false;
807 Widget_t *fbutton = add_image_toggle_button(parent, "", x, y, width, height);
808 fbutton->private_struct = filebutton;
809 fbutton->flags |= HAS_MEM;
810 widget_get_png(fbutton, LDVAR(directory_open_png));
811 fbutton->scale.gravity = CENTER;
812 fbutton->func.mem_free_callback = fbutton_mem_free;
813 fbutton->func.value_changed_callback = fbutton_callback;
814 fbutton->func.dialog_callback = fdialog_response;
815 return fbutton;
816}
const char * path
Widget_t * w
char * last_path
const char * filter
xevfunc value_changed_callback
Definition xwidget.h:90
xevfunc mem_free_callback
Definition xwidget.h:92
xevfunc dialog_callback
Definition xwidget.h:96
Gravity gravity
Definition xwidget.h:347
Widget_t - struct to hold the basic Widget_t info.
Definition xwidget.h:457
Resize_t scale
Definition xwidget.h:525
long long flags
Definition xwidget.h:461
void * private_struct
Definition xwidget.h:475
Func_t func
Definition xwidget.h:481
Widget_t * add_image_toggle_button(Widget_t *parent, const char *label, int x, int y, int width, int height)
add_image_toggle_button - add a button to a Widget_t connect to func.value_changed_callback to implem...
Definition xbutton.c:89
void widget_get_png(Widget_t *w, const unsigned char *name)
widget_get_png - read png into Widget_t xlib surface
Definition xpngloader.c:75
@ CENTER
Definition xwidget.h:320
@ HAS_MEM
Definition xwidget.h:406

References add_image_toggle_button(), CENTER, Func_t::dialog_callback, FileButton::filter, Widget_t::flags, Widget_t::func, Resize_t::gravity, HAS_MEM, FileButton::is_active, FileButton::last_path, Func_t::mem_free_callback, FileButton::path, Widget_t::private_struct, Widget_t::scale, Func_t::value_changed_callback, FileButton::w, and widget_get_png().

◆ add_save_file_button()

Widget_t * add_save_file_button ( Widget_t parent,
int  x,
int  y,
int  width,
int  height,
const char *  path,
const char *  filter 
)

add_save_file_button - add a pre-defined button which will pop-up a file dialog when pressed. path and filter will e hand over to the file selector.

Returns
Widget_t* - pointer to the Widget_t struct

Definition at line 731 of file xsavefile-dialoge.c.

732 {
733 FileButton *filebutton = (FileButton*)malloc(sizeof(FileButton));
734 filebutton->path = path;
735 filebutton->filter = filter;
736 filebutton->last_path = NULL;
737 filebutton->w = NULL;
738 filebutton->is_active = false;
739 Widget_t *fbutton = add_image_toggle_button(parent, "", x, y, width, height);
740 fbutton->parent_struct = filebutton;
741 fbutton->flags |= HAS_MEM;
742 widget_get_png(fbutton, LDVAR(directory_open_png));
743 fbutton->scale.gravity = CENTER;
744 fbutton->func.mem_free_callback = fbutton_mem_free;
745 fbutton->func.value_changed_callback = fbutton_callback;
746 fbutton->func.dialog_callback = fdialog_response;
747 return fbutton;
748}
void * parent_struct
Definition xwidget.h:473

References add_image_toggle_button(), CENTER, Func_t::dialog_callback, FileButton::filter, Widget_t::flags, Widget_t::func, Resize_t::gravity, HAS_MEM, FileButton::is_active, FileButton::last_path, Func_t::mem_free_callback, Widget_t::parent_struct, FileButton::path, Widget_t::scale, Func_t::value_changed_callback, FileButton::w, and widget_get_png().

◆ open_directory_dialog()

Widget_t * open_directory_dialog ( Widget_t w,
const char *  path 
)

Definition at line 420 of file xdirectory-dialog.c.

420 {
421 FileDialog *file_dialog = (FileDialog*)malloc(sizeof(FileDialog));
422
423 file_dialog->fp = (FilePicker*)malloc(sizeof(FilePicker));
424 fp_init(file_dialog->fp, (path) ? path : "/");
425 file_dialog->parent = w;
426 file_dialog->send_clear_func = true;
427
428 file_dialog->w = create_window(w->app, os_get_root_window(w->app, IS_WINDOW), 0, 0, 660, 420);
429#ifdef __linux__
430 XSizeHints* win_size_hints;
431 win_size_hints = XAllocSizeHints();
432 win_size_hints->flags = PMinSize|PBaseSize|PMaxSize|PWinGravity;
433 win_size_hints->min_width = 660;
434 win_size_hints->min_height = 420;
435 win_size_hints->base_width = 660;
436 win_size_hints->base_height = 420;
437 win_size_hints->max_width = 660;
438 win_size_hints->max_height = 840;
439 win_size_hints->win_gravity = CenterGravity;
440 XSetWMNormalHints(file_dialog->w->app->dpy, file_dialog->w->widget, win_size_hints);
441 XFree(win_size_hints);
442#endif
443 file_dialog->text_entry = NULL;
444
445 file_dialog->w->flags |= HAS_MEM;
446 file_dialog->w->parent_struct = file_dialog;
447 widget_set_title(file_dialog->w, _("Directory Selector"));
448 file_dialog->w->func.expose_callback = draw_window;
449 file_dialog->w->func.key_press_callback = forward_key_press;
450 file_dialog->w->func.mem_free_callback = fd_mem_free;
451 widget_set_icon_from_png(file_dialog->w, LDVAR(directory_png));
452
453 file_dialog->ct = add_combobox(file_dialog->w, "", 20, 40, 550, 30);
454 file_dialog->ct->parent_struct = file_dialog;
455 file_dialog->ct->scale.gravity = NORTHEAST;
456 file_dialog->ct->func.key_press_callback = forward_key_press;
457 file_dialog->ct->func.value_changed_callback = combo_response;
458
459 file_dialog->sel_dir = add_button(file_dialog->w, _("Add"), 580, 40, 60, 30);
460 file_dialog->sel_dir->parent_struct = file_dialog;
461 file_dialog->sel_dir->scale.gravity = WESTNORTH;
462 add_tooltip(file_dialog->sel_dir,_("Add new Directory"));
463 file_dialog->sel_dir->func.key_press_callback = forward_key_press;
464 file_dialog->sel_dir->func.value_changed_callback = add_dir_callback;
465
466 file_dialog->ft = add_listview(file_dialog->w, "", 20, 90, 620, 225);
467 file_dialog->ft->parent_struct = file_dialog;
468 file_dialog->ft->scale.gravity = NORTHWEST;
469 //file_dialog->ft->func.value_changed_callback = file_released_callback;
470 file_dialog->ft->func.key_press_callback = forward_key_press;
471 file_dialog->ft->func.button_release_callback = file_released_callback;
472 Widget_t* view_port = file_dialog->ft->childlist->childs[0];
473 view_port->func.key_press_callback = forward_listview_key_press;
474
475 int ds = fp_get_files(file_dialog->fp,file_dialog->fp->path, 1, 0);
476 int set_f = set_files(file_dialog);
477 set_dirs(file_dialog);
478 combobox_set_active_entry(file_dialog->ct, ds);
479 listview_set_active_entry(file_dialog->ft, set_f);
480
481 file_dialog->w_quit = add_button(file_dialog->w, _("Cancel"), 580, 350, 60, 60);
482 file_dialog->w_quit->parent_struct = file_dialog;
483 file_dialog->w_quit->scale.gravity = SOUTHWEST;
484 add_tooltip(file_dialog->w_quit,_("Exit Directory selector"));
485 file_dialog->w_quit->func.key_press_callback = forward_key_press;
486 file_dialog->w_quit->func.value_changed_callback = button_quit_callback;
487
488 file_dialog->w_okay = add_button(file_dialog->w, _("Select"), 510, 350, 60, 60);
489 file_dialog->w_okay->parent_struct = file_dialog;
490 file_dialog->w_okay->scale.gravity = SOUTHWEST;
491 add_tooltip(file_dialog->w_okay,_("Selected Directory"));
492 file_dialog->w_okay->func.key_press_callback = forward_key_press;
493 file_dialog->w_okay->func.value_changed_callback = button_ok_callback;
494
495 file_dialog->w_hidden = add_check_button(file_dialog->w, "", 20, 365, 20, 20);
496 file_dialog->w_hidden->parent_struct = file_dialog;
497 file_dialog->w_hidden->scale.gravity = EASTWEST;
498 add_tooltip(file_dialog->w_hidden,_("Show hidden Directories"));
499 file_dialog->w_hidden->func.key_press_callback = forward_key_press;
500 file_dialog->w_hidden->func.value_changed_callback = button_hidden_callback;
501
502 widget_show_all(file_dialog->w);
503 return file_dialog->w;
504}
Widget_t ** childs
Definition xchildlist.h:51
Widget_t * ft
Widget_t * w_quit
FilePicker * fp
bool send_clear_func
Widget_t * sel_dir
Widget_t * ct
Widget_t * w
Widget_t * w_okay
Widget_t * text_entry
Widget_t * w_hidden
Widget_t * parent
char * path
Definition xfilepicker.h:65
evfunc button_release_callback
Definition xwidget.h:101
xevfunc expose_callback
Definition xwidget.h:85
evfunc key_press_callback
Definition xwidget.h:104
Window widget
Definition xwidget.h:469
Childlist_t * childlist
Definition xwidget.h:499
Xputty * app
Definition xwidget.h:465
Display * dpy
Definition xputty.h:232
Widget_t * add_check_button(Widget_t *parent, const char *label, int x, int y, int width, int height)
add_check_button - add a button to a Widget_t connect to func.value_changed_callback to implement you...
Definition xbutton.c:121
Widget_t * add_button(Widget_t *parent, const char *label, int x, int y, int width, int height)
add_button - add a button to a Widget_t connect to func.value_changed_callback to implement your acti...
Definition xbutton.c:26
void combobox_set_active_entry(Widget_t *w, int active)
combobox_set_active_entry - set the active combobox entry
Definition xcombobox.c:27
Widget_t * add_combobox(Widget_t *parent, const char *label, int x, int y, int width, int height)
add_combobox - add a combobox
Definition xcombobox.c:152
void fp_init(FilePicker *filepicker, const char *path)
fp_init - set default values used by the filepicker
int fp_get_files(FilePicker *filepicker, char *path, int get_dirs, int get_files)
fp_get_files - fill file_names and dir_names with the results from readdir path
Widget_t * add_listview(Widget_t *parent, const char *label, int x, int y, int width, int height)
add_label - add a listview to a Widget_t
Definition xlistview.c:72
void listview_set_active_entry(Widget_t *w, int active)
listview_set_active_entry - set the active listview entry
Definition xlistview.c:28
void widget_set_icon_from_png(Widget_t *w, const unsigned char *name)
widget_set_icon_from_png - set icon image from png binary to Widget_t those icon will be used in the ...
Definition xpngloader.c:159
void add_tooltip(Widget_t *w, const char *label)
add_tooltip - add a tooltip to Widget_t
Definition xtooltip.c:41
Window os_get_root_window(Xputty *main, int flag)
os_get_root_window - get a pointer to the root window (desktop)
void widget_set_title(Widget_t *w, const char *title)
widget_set_title - set window title for a Widget_t
Definition xwidget.c:359
Widget_t * create_window(Xputty *app, Window win, int x, int y, int width, int height)
*create_window - create a Window You need to create as least minimun one Window to get started....
Definition xwidget.c:163
@ EASTWEST
Definition xwidget.h:310
@ SOUTHWEST
Definition xwidget.h:304
@ NORTHEAST
Definition xwidget.h:302
@ NORTHWEST
Definition xwidget.h:300
@ WESTNORTH
Definition xwidget.h:316
@ IS_WINDOW
Definition xwidget.h:390
void widget_show_all(Widget_t *w)
widget_show_all - map/show Widget_t with all childs
Definition xwidget.c:386

References add_button(), add_check_button(), add_combobox(), add_listview(), add_tooltip(), Widget_t::app, Func_t::button_release_callback, Widget_t::childlist, Childlist_t::childs, combobox_set_active_entry(), create_window(), FileDialog::ct, Xputty::dpy, EASTWEST, Func_t::expose_callback, Widget_t::flags, FileDialog::fp, fp_get_files(), fp_init(), FileDialog::ft, Widget_t::func, Resize_t::gravity, HAS_MEM, IS_WINDOW, Func_t::key_press_callback, listview_set_active_entry(), Func_t::mem_free_callback, NORTHEAST, NORTHWEST, os_get_root_window(), FileDialog::parent, Widget_t::parent_struct, FilePicker::path, Widget_t::scale, FileDialog::sel_dir, FileDialog::send_clear_func, SOUTHWEST, FileDialog::text_entry, Func_t::value_changed_callback, FileDialog::w, FileDialog::w_hidden, FileDialog::w_okay, FileDialog::w_quit, WESTNORTH, Widget_t::widget, widget_set_icon_from_png(), widget_set_title(), and widget_show_all().

◆ open_file_dialog()

Widget_t * open_file_dialog ( Widget_t w,
const char *  path,
const char *  filter 
)

open_file_dialog - open a non blocking dialog window, to select a file. The path to open the file-selector could be NULL It will open then in $HOME. The filter to use could be NULL, then the file-selector will show all files.

Returns
Widget_t* - pointer to the Widget_t struct

Definition at line 599 of file xfile-dialog.c.

599 {
600 FileDialog *file_dialog = (FileDialog*)malloc(sizeof(FileDialog));
601
602 file_dialog->xdg_user_dirs = NULL;
603 file_dialog->xdg_user_dirs_path = NULL;
604 file_dialog->xdg_dir_counter = 0;
605 file_dialog->fp = (FilePicker*)malloc(sizeof(FilePicker));
606
607#ifdef __linux__
608 parse_xdg_dirs(file_dialog);
609
610 struct stat sb;
611 if (stat(path, &sb) == 0 && S_ISDIR(sb.st_mode)) {
612 fp_init(file_dialog->fp, path);
613 } else if (stat(file_dialog->home_dir, &sb) == 0 && S_ISDIR(sb.st_mode)) {
614 fp_init(file_dialog->fp, file_dialog->home_dir);
615 } else {
616 fp_init(file_dialog->fp, "/");
617 }
618#else
619 DWORD attr = GetFileAttributes(path);
620 if (attr&FILE_ATTRIBUTE_DIRECTORY) {
621 fp_init(file_dialog->fp, path);
622 } else {
623 fp_init(file_dialog->fp, "C:\\");
624 }
625
626#endif
627 file_dialog->parent = w;
628 file_dialog->send_clear_func = true;
629 file_dialog->list_view = false;
630
631 file_dialog->w = create_window(w->app, os_get_root_window(w->app, IS_WINDOW), 0, 0, 660, 415);
632#ifdef __linux__
633 XSizeHints* win_size_hints;
634 win_size_hints = XAllocSizeHints();
635 win_size_hints->flags = PMinSize|PBaseSize|PMaxSize|PWinGravity;
636 win_size_hints->min_width = 660;
637 win_size_hints->min_height = 415;
638 win_size_hints->base_width = 660;
639 win_size_hints->base_height = 415;
640 win_size_hints->max_width = 960;
641 win_size_hints->max_height = 865;
642 win_size_hints->win_gravity = CenterGravity;
643 XSetWMNormalHints(file_dialog->w->app->dpy, file_dialog->w->widget, win_size_hints);
644 XFree(win_size_hints);
645#endif
646
647 file_dialog->w->flags |= HAS_MEM;
648 file_dialog->w->parent_struct = file_dialog;
649 file_dialog->w->flags |= NO_PROPAGATE;
650 widget_set_title(file_dialog->w, _("File Selector"));
651 file_dialog->w->func.expose_callback = draw_window;
652 file_dialog->w->func.mem_free_callback = fd_mem_free;
653 widget_set_icon_from_png(file_dialog->w, LDVAR(directory_png));
654
655 file_dialog->ct = add_combobox(file_dialog->w, "", 20, 40, 550, 30);
656 file_dialog->ct->parent_struct = file_dialog;
657 file_dialog->ct->scale.gravity = NORTHEAST;
658 file_dialog->ct->flags |= NO_PROPAGATE;
659
660 file_dialog->sel_dir = add_button(file_dialog->w, _("Open"), 580, 40, 60, 30);
661 file_dialog->sel_dir->parent_struct = file_dialog;
662 file_dialog->sel_dir->scale.gravity = WESTNORTH;
663 file_dialog->sel_dir->flags |= NO_PROPAGATE;
664 add_tooltip(file_dialog->sel_dir,_("Open sub-directory's"));
665 file_dialog->sel_dir->func.value_changed_callback = open_dir_callback;
666
667 file_dialog->scale_size = add_hslider(file_dialog->w, "", 580, 10, 60, 15);
668 set_adjustment(file_dialog->scale_size->adj, 0.2, 0.2, 0.1, 0.4, 0.01, CL_CONTINUOS);
669 file_dialog->scale_size->parent_struct = file_dialog;
670 file_dialog->scale_size->scale.gravity = WESTNORTH;
671 file_dialog->scale_size->flags |= NO_PROPAGATE;
672 file_dialog->scale_size->func.expose_callback = draw_fd_hslider;
673 add_tooltip(file_dialog->scale_size,_("Set Icon scale factor"));
674 file_dialog->scale_size->func.value_changed_callback = set_scale_factor_callback;
675
676 file_dialog->ft = add_multi_listview(file_dialog->w, "", 130, 90, 510, 225);
677 file_dialog->ft->parent_struct = file_dialog;
678 file_dialog->ft->scale.gravity = NORTHWEST;
679 file_dialog->ft->flags |= NO_PROPAGATE;
680 multi_listview_set_check_dir(file_dialog->ft, 1);
681 file_dialog->ft->func.button_release_callback = file_released_b_callback;
682 file_dialog->ft->func.double_click_callback = file_double_click_callback;
683
684 int ds = fp_get_files(file_dialog->fp,file_dialog->fp->path, 1, 1);
685 int set_f = set_files(file_dialog);
686 set_dirs(file_dialog);
687 combobox_set_active_entry(file_dialog->ct, ds);
688 if (set_f != -1) {
689 multi_listview_set_active_entry(file_dialog->ft, set_f);
690 } else {
692 }
693 file_dialog->ct->func.value_changed_callback = combo_response;
694
695#ifdef __linux__
696 add_xdg_dirs(file_dialog);
697#endif
698 file_dialog->w_quit = add_button(file_dialog->w, _("Cancel"), 580, 340, 60, 60);
699 file_dialog->w_quit->parent_struct = file_dialog;
700 file_dialog->w_quit->scale.gravity = SOUTHWEST;
701 file_dialog->w_quit->flags |= NO_PROPAGATE;
702 add_tooltip(file_dialog->w_quit,_("Exit file selector"));
703 file_dialog->w_quit->func.value_changed_callback = button_quit_callback;
704
705 file_dialog->w_okay = add_button(file_dialog->w, _("Load"), 510, 340, 60, 60);
706 file_dialog->w_okay->parent_struct = file_dialog;
707 file_dialog->w_okay->scale.gravity = SOUTHWEST;
708 file_dialog->w_okay->flags |= NO_PROPAGATE;
709 add_tooltip(file_dialog->w_okay,_("Load selected file"));
710 file_dialog->w_okay->func.value_changed_callback = button_ok_callback;
711
712 file_dialog->set_filter = add_combobox(file_dialog->w, "", 360, 345, 120, 30);
713 file_dialog->set_filter->parent_struct = file_dialog;
714 file_dialog->set_filter->scale.gravity = SOUTHWEST;
715 file_dialog->set_filter->flags |= NO_PROPAGATE;
716 combobox_add_entry(file_dialog->set_filter,_("all"));
717 combobox_add_entry(file_dialog->set_filter,_("application"));
718 combobox_add_entry(file_dialog->set_filter,_("audio"));
719 combobox_add_entry(file_dialog->set_filter,_("font"));
720 combobox_add_entry(file_dialog->set_filter,_("image"));
721 combobox_add_entry(file_dialog->set_filter,_("text"));
722 combobox_add_entry(file_dialog->set_filter,_("video"));
723 combobox_add_entry(file_dialog->set_filter,_("x-content"));
724 if(filter !=NULL && strlen(filter))
725 combobox_add_entry(file_dialog->set_filter,filter);
726 combobox_set_active_entry(file_dialog->set_filter, 0);
727 file_dialog->set_filter->func.value_changed_callback = set_filter_callback;
728 if(filter !=NULL && strlen(filter))
729 combobox_set_active_entry(file_dialog->set_filter, 8);
730 add_tooltip(file_dialog->set_filter->childlist->childs[0], _("File filter type"));
731
732 file_dialog->w_hidden = add_check_button(file_dialog->w, "", 20, 345, 20, 20);
733 file_dialog->w_hidden->parent_struct = file_dialog;
734 file_dialog->w_hidden->scale.gravity = EASTWEST;
735 file_dialog->w_hidden->flags |= NO_PROPAGATE;
736 add_tooltip(file_dialog->w_hidden,_("Show hidden files and folders"));
737 file_dialog->w_hidden->func.value_changed_callback = button_hidden_callback;
738
739 file_dialog->view = add_check_button(file_dialog->w, "", 20, 375, 20, 20);
740 file_dialog->view->parent_struct = file_dialog;
741 file_dialog->view->scale.gravity = EASTWEST;
742 file_dialog->view->flags |= NO_PROPAGATE;
743 add_tooltip(file_dialog->view,_("Show entries in list view"));
744 file_dialog->view->func.value_changed_callback = button_view_callback;
745
746 widget_show_all(file_dialog->w);
747 return file_dialog->w;
748}
const char * home_dir
unsigned int xdg_dir_counter
Widget_t * scale_size
Widget_t * view
char ** xdg_user_dirs
char ** xdg_user_dirs_path
Widget_t * set_filter
evfunc double_click_callback
Definition xwidget.h:102
Adjustment_t * adj
Definition xwidget.h:497
void set_adjustment(Adjustment_t *adj, float std_value, float value, float min_value, float max_value, float step, CL_type type)
*set_adjustment - set a new range to a existing Adjustment_t or create if it not exists yet
Definition xadjustment.c:80
@ CL_CONTINUOS
Definition xadjustment.h:49
void combobox_add_entry(Widget_t *wid, const char *label)
combobox_add_entry - add a entry to the combobox
Definition xcombobox.c:175
void multi_listview_set_active_entry(Widget_t *w, int active)
multi_listview_set_active_entry - set the active listview entry
void multi_listview_unset_active_entry(Widget_t *w)
multi_listview_unset_active_entry - unset the active listview entry
Widget_t * add_multi_listview(Widget_t *parent, const char *label, int x, int y, int width, int height)
add_label - add a listview to a Widget_t
void multi_listview_set_check_dir(Widget_t *listview, int set)
multi_listview_set_check_dir - set optional check if list item is a directory
Widget_t * add_hslider(Widget_t *parent, const char *label, int x, int y, int width, int height)
add_hslider - add a horizontal slider to a Widget_t connect to func.value_changed_callback to impleme...
Definition xslider.c:51
@ NO_PROPAGATE
Definition xwidget.h:416

References add_button(), add_check_button(), add_combobox(), add_hslider(), add_multi_listview(), add_tooltip(), Widget_t::adj, Widget_t::app, Func_t::button_release_callback, Widget_t::childlist, Childlist_t::childs, CL_CONTINUOS, combobox_add_entry(), combobox_set_active_entry(), create_window(), FileDialog::ct, Func_t::double_click_callback, Xputty::dpy, EASTWEST, Func_t::expose_callback, Widget_t::flags, FileDialog::fp, fp_get_files(), fp_init(), FileDialog::ft, Widget_t::func, Resize_t::gravity, HAS_MEM, FileDialog::home_dir, IS_WINDOW, FileDialog::list_view, Func_t::mem_free_callback, multi_listview_set_active_entry(), multi_listview_set_check_dir(), multi_listview_unset_active_entry(), NO_PROPAGATE, NORTHEAST, NORTHWEST, os_get_root_window(), FileDialog::parent, Widget_t::parent_struct, FilePicker::path, Widget_t::scale, FileDialog::scale_size, FileDialog::sel_dir, FileDialog::send_clear_func, set_adjustment(), FileDialog::set_filter, SOUTHWEST, Func_t::value_changed_callback, FileDialog::view, FileDialog::w, FileDialog::w_hidden, FileDialog::w_okay, FileDialog::w_quit, WESTNORTH, Widget_t::widget, widget_set_icon_from_png(), widget_set_title(), widget_show_all(), FileDialog::xdg_dir_counter, FileDialog::xdg_user_dirs, and FileDialog::xdg_user_dirs_path.

◆ save_file_dialog()

Widget_t * save_file_dialog ( Widget_t w,
const char *  path,
const char *  filter 
)

save_file_dialog - open a non blocking dialog window, to select a file. The path to open the file-selector could be NULL It will open then in $HOME. The filter to use could be NULL, then the file-selector will show all files.

Returns
Widget_t* - pointer to the Widget_t struct

Definition at line 544 of file xsavefile-dialoge.c.

544 {
545 FileDialog *file_dialog = (FileDialog*)malloc(sizeof(FileDialog));
546
547 file_dialog->xdg_user_dirs = NULL;
548 file_dialog->xdg_dir_counter = 0;
549 file_dialog->fp = (FilePicker*)malloc(sizeof(FilePicker));
550
551#ifdef __linux__
552 parse_xdg_dirs(file_dialog);
553 struct stat sb;
554 if (stat(path, &sb) == 0 && S_ISDIR(sb.st_mode)) {
555 fp_init(file_dialog->fp, path);
556 } else if (stat(file_dialog->home_dir, &sb) == 0 && S_ISDIR(sb.st_mode)) {
557 fp_init(file_dialog->fp, file_dialog->home_dir);
558 } else {
559 fp_init(file_dialog->fp, "/");
560 }
561#else
562 DWORD attr = GetFileAttributes(path);
563 if (attr&FILE_ATTRIBUTE_DIRECTORY) {
564 fp_init(file_dialog->fp, path);
565 } else {
566 fp_init(file_dialog->fp, "c:\\");
567 }
568
569#endif
570
571 file_dialog->parent = w;
572 file_dialog->send_clear_func = true;
573
574 file_dialog->w = create_window(w->app, os_get_root_window(w->app, IS_WINDOW), 0, 0, 660, 420);
575#ifdef __linux__
576 XSizeHints* win_size_hints;
577 win_size_hints = XAllocSizeHints();
578 win_size_hints->flags = PMinSize|PBaseSize|PMaxSize|PWinGravity;
579 win_size_hints->min_width = 660;
580 win_size_hints->min_height = 420;
581 win_size_hints->base_width = 660;
582 win_size_hints->base_height = 420;
583 win_size_hints->max_width = 660;
584 win_size_hints->max_height = 840;
585 win_size_hints->win_gravity = CenterGravity;
586 XSetWMNormalHints(file_dialog->w->app->dpy, file_dialog->w->widget, win_size_hints);
587 XFree(win_size_hints);
588#endif
589 file_dialog->w->flags |= HAS_MEM;
590 file_dialog->w->parent_struct = file_dialog;
591 widget_set_title(file_dialog->w, _("File Save"));
592 file_dialog->w->func.expose_callback = draw_window;
593 file_dialog->w->func.key_press_callback = forward_key_press;
594 file_dialog->w->func.mem_free_callback = fd_mem_free;
595 widget_set_icon_from_png(file_dialog->w,LDVAR(directory_png));
596
597 file_dialog->ct = add_combobox(file_dialog->w, "", 20, 40, 550, 30);
598 file_dialog->ct->parent_struct = file_dialog;
599 file_dialog->ct->scale.gravity = NORTHEAST;
600 file_dialog->ct->func.value_changed_callback = combo_response;
601 file_dialog->ct->func.key_press_callback = forward_key_press;
602
603 file_dialog->sel_dir = add_button(file_dialog->w, _("Open"), 580, 40, 60, 30);
604 file_dialog->sel_dir->parent_struct = file_dialog;
605 file_dialog->sel_dir->scale.gravity = WESTNORTH;
606 add_tooltip(file_dialog->sel_dir,_("Open sub-directory's"));
607 file_dialog->sel_dir->func.value_changed_callback = open_dir_callback;
608 file_dialog->sel_dir->func.key_press_callback = forward_key_press;
609
610 file_dialog->ft = add_listview(file_dialog->w, "", 130, 90, 510, 225);
611 file_dialog->ft->parent_struct = file_dialog;
612 file_dialog->ft->scale.gravity = NORTHWEST;
613 listview_set_check_dir(file_dialog->ft, 1);
614 file_dialog->ft->func.key_press_callback = forward_key_press;
615
616 int ds = fp_get_files(file_dialog->fp,file_dialog->fp->path, 1, 1);
617 int set_f = set_files(file_dialog);
618 set_dirs(file_dialog);
619 combobox_set_active_entry(file_dialog->ct, ds);
620 if (set_f != -1) {
621 listview_set_active_entry(file_dialog->ft, set_f);
622 } else {
623 listview_unset_active_entry(file_dialog->ft);
624 }
625 file_dialog->ft->func.value_changed_callback = file_released_callback;
626
627#ifdef __linux__
628 add_xdg_dirs(file_dialog);
629#endif
630 file_dialog->text_entry = create_widget(file_dialog->w->app, file_dialog->w, 130, 320, 200, 30);
631 memset(file_dialog->text_entry->input_label, 0, 32 * (sizeof file_dialog->text_entry->input_label[0]) );
632 file_dialog->text_entry->func.expose_callback = entry_add_text;
633 file_dialog->text_entry->func.key_press_callback = entry_get_text;
634 file_dialog->text_entry->flags &= ~USE_TRANSPARENCY;
635 file_dialog->text_entry->scale.gravity = EASTWEST;
636 file_dialog->text_entry->parent_struct = file_dialog;
637#ifdef __linux__
638 Cursor c = XCreateFontCursor(file_dialog->w->app->dpy, XC_xterm);
639 XDefineCursor (file_dialog->w->app->dpy, file_dialog->text_entry->widget, c);
640 XFreeCursor(file_dialog->w->app->dpy, c);
641#endif
642
643 file_dialog->w_quit = add_button(file_dialog->w, _("Cancel"), 580, 350, 60, 60);
644 file_dialog->w_quit->parent_struct = file_dialog;
645 file_dialog->w_quit->scale.gravity = SOUTHWEST;
646 add_tooltip(file_dialog->w_quit,_("Exit File Saver"));
647 file_dialog->w_quit->func.value_changed_callback = button_quit_callback;
648 file_dialog->w_quit->func.key_press_callback = forward_key_press;
649
650 file_dialog->w_okay = add_button(file_dialog->w, _("Save"), 490, 350, 80, 60);
651 file_dialog->w_okay->parent_struct = file_dialog;
652 file_dialog->w_okay->scale.gravity = SOUTHWEST;
653 add_tooltip(file_dialog->w_okay,_("Save as selected file"));
654 file_dialog->w_okay->func.value_changed_callback = button_ok_callback;
655 file_dialog->w_okay->func.key_press_callback = forward_key_press;
656
657 file_dialog->set_filter = add_combobox(file_dialog->w, "", 340, 355, 120, 30);
658 file_dialog->set_filter->parent_struct = file_dialog;
659 file_dialog->set_filter->scale.gravity = SOUTHWEST;
660 combobox_add_entry(file_dialog->set_filter,_("all"));
661 combobox_add_entry(file_dialog->set_filter,_("application"));
662 combobox_add_entry(file_dialog->set_filter,_("audio"));
663 combobox_add_entry(file_dialog->set_filter,_("font"));
664 combobox_add_entry(file_dialog->set_filter,_("image"));
665 combobox_add_entry(file_dialog->set_filter,_("text"));
666 combobox_add_entry(file_dialog->set_filter,_("video"));
667 combobox_add_entry(file_dialog->set_filter,_("x-content"));
668 if(filter !=NULL && strlen(filter))
669 combobox_add_entry(file_dialog->set_filter,filter);
670 combobox_set_active_entry(file_dialog->set_filter, 0);
671 file_dialog->set_filter->func.key_press_callback = forward_key_press;
672 file_dialog->set_filter->func.value_changed_callback = set_filter_callback;
673 if(filter !=NULL && strlen(filter))
674 combobox_set_active_entry(file_dialog->set_filter, 8);
675 add_tooltip(file_dialog->set_filter->childlist->childs[0], _("File filter type"));
676
677 file_dialog->w_hidden = add_check_button(file_dialog->w, "", 20, 365, 20, 20);
678 file_dialog->w_hidden->parent_struct = file_dialog;
679 file_dialog->w_hidden->scale.gravity = EASTWEST;
680 add_tooltip(file_dialog->w_hidden,_("Show hidden files and folders"));
681 file_dialog->w_hidden->func.key_press_callback = forward_key_press;
682 file_dialog->w_hidden->func.value_changed_callback = button_hidden_callback;
683
684 widget_show_all(file_dialog->w);
685 return file_dialog->w;
686}
char input_label[32]
Definition xwidget.h:459
void listview_set_check_dir(Widget_t *listview, int set)
listview_set_check_dir - set optional check if list item is a directory
Definition xlistview.c:134
void listview_unset_active_entry(Widget_t *w)
listview_unset_active_entry - unset the active listview entry
Definition xlistview.c:39
Widget_t * create_widget(Xputty *app, Widget_t *win, int x, int y, int width, int height)
*create_widget - create a widget A Widget_t could only be created as child of a other Widget_t To...
Definition xwidget.c:265

References add_button(), add_check_button(), add_combobox(), add_listview(), add_tooltip(), Widget_t::app, Widget_t::childlist, Childlist_t::childs, combobox_add_entry(), combobox_set_active_entry(), create_widget(), create_window(), FileDialog::ct, Xputty::dpy, EASTWEST, Func_t::expose_callback, Widget_t::flags, FileDialog::fp, fp_get_files(), fp_init(), FileDialog::ft, Widget_t::func, Resize_t::gravity, HAS_MEM, FileDialog::home_dir, Widget_t::input_label, IS_WINDOW, Func_t::key_press_callback, listview_set_active_entry(), listview_set_check_dir(), listview_unset_active_entry(), Func_t::mem_free_callback, NORTHEAST, NORTHWEST, os_get_root_window(), FileDialog::parent, Widget_t::parent_struct, FilePicker::path, Widget_t::scale, FileDialog::sel_dir, FileDialog::send_clear_func, FileDialog::set_filter, SOUTHWEST, FileDialog::text_entry, Func_t::value_changed_callback, FileDialog::w, FileDialog::w_hidden, FileDialog::w_okay, FileDialog::w_quit, WESTNORTH, Widget_t::widget, widget_set_icon_from_png(), widget_set_title(), widget_show_all(), FileDialog::xdg_dir_counter, and FileDialog::xdg_user_dirs.