#ifndef _GTCACA_FILECHOOSER_H_
#define _GTCACA_FILECHOOSER_H_
#include <stdint.h>
#include <limits.h>
#include <gtcaca/main.h>
#include <gtcaca/widget.h>
#ifndef PATH_MAX
#define PATH_MAX 4096
#endif
enum { GTCACA_FILECHOOSER_OPEN = 0, GTCACA_FILECHOOSER_SAVE = 1 };
#define GTCACA_FC_MAX_OPTS 6
typedef struct { char *name; int isdir; } gtcaca_fc_entry_t;
typedef struct { const char *label; int initial; } gtcaca_fc_option_t;
typedef struct _gtcaca_filechooser_widget_t gtcaca_filechooser_widget_t;
struct _gtcaca_filechooser_widget_t {
gtcaca_widget_type_t type;
unsigned int id;
int has_focus;
int is_visible;
int x;
int y;
int width;
int height;
uint8_t color_focus_fg;
uint8_t color_focus_bg;
uint8_t color_nonfocus_fg;
uint8_t color_nonfocus_bg;
gtcaca_widget_t *parent;
gtcaca_widget_t *children;
struct _gtcaca_filechooser_widget_t *prev;
struct _gtcaca_filechooser_widget_t *next;
char curdir[PATH_MAX];
gtcaca_fc_entry_t *entries;
int nentries, cap;
int sel, top;
int mode;
char name[256];
char *title;
int result;
char chosen[PATH_MAX];
char search[128];
int searching;
int *filt;
int nfilt, filt_cap;
struct { char label[80]; int state; } opt[GTCACA_FC_MAX_OPTS];
int nopt;
int focus;
};
enum { GTCACA_FC_FOCUS_LIST = 0, GTCACA_FC_FOCUS_NAME = 1, GTCACA_FC_FOCUS_OPT = 2 };
gtcaca_filechooser_widget_t *gtcaca_filechooser_new(gtcaca_widget_t *parent, int x, int y, int width, int height);
void gtcaca_filechooser_set_dir(gtcaca_filechooser_widget_t *fc, const char *dir);
void gtcaca_filechooser_draw(gtcaca_filechooser_widget_t *fc);
int gtcaca_filechooser_key(gtcaca_filechooser_widget_t *fc, int key, void *userdata);
void gtcaca_filechooser_free(gtcaca_filechooser_widget_t *fc);
void gtcaca_filechooser_set_options(gtcaca_filechooser_widget_t *fc,
const gtcaca_fc_option_t *opts, int nopts);
int gtcaca_filechooser_run(const char *start_dir, char *out_path, int outlen, int save_mode);
int gtcaca_filechooser_run_opts(const char *start_dir, char *out_path, int outlen,
int save_mode, const gtcaca_fc_option_t *opts,
int nopts, int *states_out);
int gtcaca_filechooser_run_named(const char *start_dir, const char *default_name,
char *out_path, int outlen);
#endif