#pragma once #ifdef __cplusplus extern "C" { #endif #include typedef enum { OSDIALOG_INFO, OSDIALOG_WARNING, OSDIALOG_ERROR, } osdialog_message_level; typedef enum { OSDIALOG_OK, OSDIALOG_OK_CANCEL, OSDIALOG_YES_NO, } osdialog_message_buttons; /** Launches a message box Returns 1 if the "OK" or "Yes" button was pressed */ int osdialog_message(osdialog_message_level level, osdialog_message_buttons buttons, const char *message); typedef enum { OSDIALOG_OPEN, OSDIALOG_OPEN_DIR, OSDIALOG_SAVE, } osdialog_file_action; /** Linked list of patterns */ typedef struct osdialog_filter_patterns { char *pattern; struct osdialog_filter_patterns *next; } osdialog_filter_patterns; /** Linked list of file filters */ typedef struct osdialog_filters { char *name; osdialog_filter_patterns *patterns; struct osdialog_filters *next; } osdialog_filters; /** Launches a file dialog and returns the selected path or NULL if nothing was selected If the return result is not NULL, caller must free() it `path` is the default folder the file dialog will attempt to open in. `filename` is the default text that will appear in the filename input. Relevant to save dialog only. `filters` is a list of patterns to filter the file selection, or NULL */ char *osdialog_file(osdialog_file_action action, const char *path, const char *filename, osdialog_filters *filters); /** Parses a filter string of the form Source:c,cpp,m;Header:h,hpp Caller must eventually free with osdialog_filters_free() */ osdialog_filters *osdialog_filters_parse(const char *str); void osdialog_filters_free(osdialog_filters *filters); typedef struct { uint8_t r, g, b, a; } osdialog_color; /** Launches an RGBA color picker dialog and sets `color` to the selected color Returns 1 if "OK" was pressed `color` should be set to the initial color before calling. It is only overwritten if the user selects "OK". `opacity` enables the opacity slider by setting to 1. Not supported on Windows. TODO Implement on Mac */ int osdialog_color_picker(osdialog_color *color, int opacity); #ifdef __cplusplus } #endif