#ifndef _GTCACA_MINDMAP_H_
#define _GTCACA_MINDMAP_H_
#include <stdint.h>
#include <gtcaca/main.h>
#include <gtcaca/widget.h>
typedef struct gtcaca_mm_node {
char *text;
uint8_t colour;
int folded;
void *userdata;
struct gtcaca_mm_node *parent;
struct gtcaca_mm_node **kids;
int nkids, capkids;
int row, depth, px;
} gtcaca_mm_node_t;
typedef struct _gtcaca_mindmap_widget_t gtcaca_mindmap_widget_t;
struct _gtcaca_mindmap_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_mindmap_widget_t *prev;
struct _gtcaca_mindmap_widget_t *next;
gtcaca_mm_node_t *root;
gtcaca_mm_node_t *sel;
int top;
int xoff;
char *title;
uint8_t sel_fg, sel_bg;
};
gtcaca_mindmap_widget_t *gtcaca_mindmap_new(gtcaca_widget_t *parent, int x, int y, int width, int height);
gtcaca_mm_node_t *gtcaca_mindmap_root(gtcaca_mindmap_widget_t *m);
gtcaca_mm_node_t *gtcaca_mindmap_add_child(gtcaca_mindmap_widget_t *m, gtcaca_mm_node_t *parent, const char *text);
gtcaca_mm_node_t *gtcaca_mindmap_add_sibling(gtcaca_mindmap_widget_t *m, gtcaca_mm_node_t *node, const char *text);
void gtcaca_mindmap_delete(gtcaca_mindmap_widget_t *m, gtcaca_mm_node_t *node);
void gtcaca_mindmap_set_text(gtcaca_mm_node_t *node, const char *text);
void gtcaca_mindmap_toggle_fold(gtcaca_mm_node_t *node);
gtcaca_mm_node_t *gtcaca_mindmap_selected(gtcaca_mindmap_widget_t *m);
void gtcaca_mindmap_select(gtcaca_mindmap_widget_t *m, gtcaca_mm_node_t *node);
void gtcaca_mindmap_set_title(gtcaca_mindmap_widget_t *m, const char *title);
void gtcaca_mindmap_draw(gtcaca_mindmap_widget_t *m);
int gtcaca_mindmap_key(gtcaca_mindmap_widget_t *m, int key, void *userdata);
void gtcaca_mindmap_clear(gtcaca_mindmap_widget_t *m, const char *root_text);
void gtcaca_mindmap_free(gtcaca_mindmap_widget_t *m);
#endif