Maximilian Mader
6ea36bbc39
This uses the file modification date and opens a choice dialog if the date has changed since.
122 lines
3.9 KiB
C
122 lines
3.9 KiB
C
#ifndef settings_h
|
|
#define settings_h
|
|
|
|
#include <gtk/gtk.h>
|
|
#include <Core/gb.h>
|
|
#include "shader.h"
|
|
|
|
#define SETTINGS_FILE "sameboy-gtk3-settings.ini"
|
|
|
|
#define FORMAT_FOR_KEY_TYPE(type) FORMAT_FOR_##type
|
|
#define FORMAT_FOR_string "%s"
|
|
#define FORMAT_FOR_integer "%d"
|
|
#define FORMAT_FOR_boolean "%d"
|
|
|
|
#define GTYPE_OF_KEY_TYPE(type) GTYPE_OF_##type
|
|
#define GTYPE_OF_string gchar *
|
|
#define GTYPE_OF_integer gint
|
|
#define GTYPE_OF_boolean gboolean
|
|
|
|
#define GTYPE_IS_POINTER(type) GTYPE_IS_POINTER_##type
|
|
#define GTYPE_IS_POINTER_string 1
|
|
#define GTYPE_IS_POINTER_integer 0
|
|
#define GTYPE_IS_POINTER_boolean 0
|
|
|
|
// Macro usage:
|
|
// EXPAND_CONFIG(EXPAND_GROUP(…) EXPAND_GROUP(…) …)
|
|
// EXPAND_GROUP(group_name, group_members)
|
|
// EXPAND_GROUP_MEMBER(member_name, key_type, default_value)
|
|
#define EXPAND_CONFIG \
|
|
EXPAND_GROUP(emulation, \
|
|
EXPAND_GROUP_MEMBER(boot_rom_path, string, "auto") /* overrides search location for boot ROMs by name */ \
|
|
EXPAND_GROUP_MEMBER(rewind_duration, integer, 10) \
|
|
EXPAND_GROUP_MEMBER(dmg_revision_name, string, "DMG_CPU_C") \
|
|
EXPAND_GROUP_MEMBER(sgb_revision_name, string, "SGB2") \
|
|
EXPAND_GROUP_MEMBER(cgb_revision_name, string, "CPU_CGB_E") \
|
|
EXPAND_GROUP_MEMBER(model, string, "cgb") \
|
|
) \
|
|
EXPAND_GROUP(video, \
|
|
EXPAND_GROUP_MEMBER(shader, string, "NearestNeighbor") \
|
|
EXPAND_GROUP_MEMBER(color_correction_id, string, "emulate_hardware") \
|
|
EXPAND_GROUP_MEMBER(frame_blending_mode, string, "disabled") \
|
|
EXPAND_GROUP_MEMBER(display_border_mode, string, "never") \
|
|
EXPAND_GROUP_MEMBER(monochrome_palette_id, string, "greyscale") \
|
|
EXPAND_GROUP_MEMBER(keep_aspect_ratio, boolean, true) \
|
|
EXPAND_GROUP_MEMBER(use_integer_scaling, boolean, true) \
|
|
) \
|
|
EXPAND_GROUP(audio, \
|
|
EXPAND_GROUP_MEMBER(high_pass_filter_id, string, "emulate_hardware") \
|
|
EXPAND_GROUP_MEMBER(sample_rate, integer, -1) \
|
|
EXPAND_GROUP_MEMBER(muted, boolean, false) \
|
|
) \
|
|
EXPAND_GROUP(controls, \
|
|
EXPAND_GROUP_MEMBER(analog_speed_controls, boolean, false) \
|
|
EXPAND_GROUP_MEMBER(rumble_mode, string, "Never") \
|
|
) \
|
|
EXPAND_GROUP(window, \
|
|
EXPAND_GROUP_MEMBER(menubar_override, string, "auto") \
|
|
)
|
|
|
|
typedef struct config_t {
|
|
#define EXPAND_GROUP(group_name, members) struct config_ ## group_name ## _t { \
|
|
members \
|
|
} group_name;
|
|
#define EXPAND_GROUP_MEMBER(member, key_type, default_value) GTYPE_OF_KEY_TYPE(key_type) member;
|
|
|
|
EXPAND_CONFIG
|
|
|
|
#undef EXPAND_GROUP
|
|
#undef EXPAND_GROUP_MEMBER
|
|
} config_t;
|
|
|
|
enum menubar_type_t {
|
|
MENUBAR_AUTO,
|
|
MENUBAR_SHOW_IN_SHELL,
|
|
MENUBAR_SHOW_IN_WINDOW,
|
|
MENUBAR_SHOW_HAMBURGER
|
|
};
|
|
|
|
config_t config;
|
|
|
|
void on_preferences_realize(GtkWidget *w, gpointer builder_ptr);
|
|
|
|
void print_config(config_t *config);
|
|
void load_config_from_key_file(config_t *config, GKeyFile *key_file);
|
|
|
|
void init_settings(GApplication *app, gchar *path, GDateTime **modification_date, GtkWindow *preferences);
|
|
int load_settings(GApplication *app, GDateTime **modification_date);
|
|
void save_settings(GtkWindow *main_window, GDateTime *saved_modification_date);
|
|
void free_settings(void);
|
|
|
|
void update_boot_rom_selector(GtkBuilder *builder);
|
|
|
|
enum menubar_type_t get_show_menubar(void);
|
|
void set_show_menubar(enum menubar_type_t);
|
|
|
|
GB_color_correction_mode_t get_color_correction_mode(void);
|
|
void set_color_correction_mode(GB_color_correction_mode_t);
|
|
|
|
GB_frame_blending_mode_t get_frame_blending_mode(void);
|
|
void set_frame_blending_mode(GB_frame_blending_mode_t);
|
|
|
|
GB_border_mode_t get_display_border_mode(void);
|
|
void set_display_border_mode(GB_border_mode_t);
|
|
|
|
GB_highpass_mode_t get_highpass_mode(void);
|
|
void set_highpass_mode(GB_highpass_mode_t);
|
|
|
|
const GB_palette_t* get_monochrome_palette(void);
|
|
void set_monochrome_palette(const GB_palette_t*);
|
|
|
|
const GB_rumble_mode_t get_rumble_mode(void);
|
|
void set_rumble_mode(const GB_rumble_mode_t);
|
|
|
|
void set_model(GB_model_t model);
|
|
GB_model_t get_model(void);
|
|
|
|
GB_model_t get_dmg_model(void);
|
|
GB_model_t get_sgb_model(void);
|
|
GB_model_t get_cgb_model(void);
|
|
|
|
#endif /* settings_h */
|