From 2101f37c1b81840beda99a7b4e87e938f9e52a7a Mon Sep 17 00:00:00 2001 From: Dirk Hohndel Date: Fri, 28 Oct 2011 18:46:53 -0700 Subject: [PATCH] Use Registry on Windows to store preferences No change at all to non-Windows builds. Everything seems to work with preferences - but only tested on Win7 Remaining issue: displaying an icon (or the logo in the About dialog) Signed-off-by: Dirk Hohndel --- dive.h | 4 +++ gtk-gui.c | 73 +++++++++++++++++++++++++++++++++++++++++++++++++ subsurface.bmp | Bin 0 -> 40054 bytes 3 files changed, 77 insertions(+) create mode 100644 subsurface.bmp diff --git a/dive.h b/dive.h index 92d358d..58b6611 100644 --- a/dive.h +++ b/dive.h @@ -187,6 +187,10 @@ struct dive { * the input and output may come in some random format. This * keeps track of those units. */ +/* turns out in Win32 PASCAL is defined as a calling convention */ +#ifdef WIN32 +#undef PASCAL +#endif struct units { enum { METERS, FEET } length; enum { LITER, CUFT } volume; diff --git a/gtk-gui.c b/gtk-gui.c index 04fdbec..ea3f646 100644 --- a/gtk-gui.c +++ b/gtk-gui.c @@ -10,6 +10,8 @@ #ifndef WIN32 #include +#else +#include #endif #include "dive.h" @@ -415,6 +417,33 @@ static void preferences_dialog(GtkWidget *w, gpointer data) gconf_client_set_bool(gconf, GCONF_NAME(SAC), visible_cols.sac, NULL); gconf_client_set_bool(gconf, GCONF_NAME(OTU), visible_cols.otu, NULL); gconf_client_set_string(gconf, GCONF_NAME(divelist_font), divelist_font, NULL); +#else + HKEY hkey; + LONG success = RegCreateKeyEx(HKEY_CURRENT_USER, TEXT("Software\\subsurface"), + 0L, NULL, REG_OPTION_NON_VOLATILE, KEY_ALL_ACCESS, + NULL, &hkey, NULL); + if (success != ERROR_SUCCESS) + printf("CreateKey Software\\subsurface failed %ld\n", success); + DWORD value; + +#define StoreInReg(_key, _val) { \ + value = (_val) ; \ + RegSetValueEx(hkey, TEXT(_key), 0, REG_DWORD, &value, 4); \ + } + + StoreInReg("feet", output_units.length == FEET); + StoreInReg("psi", output_units.pressure == PSI); + StoreInReg("cuft", output_units.volume == CUFT); + StoreInReg("fahrenheit", output_units.temperature == FAHRENHEIT); + StoreInReg("temperature", visible_cols.temperature); + StoreInReg("cylinder", visible_cols.cylinder); + StoreInReg("nitrox", visible_cols.nitrox); + StoreInReg("sac", visible_cols.sac); + StoreInReg("otu", visible_cols.otu); + RegSetValueEx(hkey, TEXT("divelist_font"), 0, REG_SZ, divelist_font, strlen(divelist_font)); + if (RegFlushKey(hkey) != ERROR_SUCCESS) + printf("RegFlushKey failed %ld\n"); + RegCloseKey(hkey); #endif } gtk_widget_destroy(dialog); @@ -691,6 +720,22 @@ static void drag_cb(GtkWidget *widget, GdkDragContext *context, nbdp->name = NULL; } +#ifdef WIN32 +static int get_from_registry(const char *key) +{ + DWORD value; + DWORD type; + DWORD len = 4; + LONG success; + + success = RegGetValue(HKEY_CURRENT_USER, TEXT("Software\\subsurface"), TEXT(key), + RRF_RT_ANY, &type, &value, &len); + if (success != ERROR_SUCCESS) + return FALSE; /* that's what happens the first time we start */ + return value; +} +#endif + void init_ui(int argc, char **argv) { GtkWidget *win; @@ -732,6 +777,30 @@ void init_ui(int argc, char **argv) visible_cols.sac = gconf_client_get_bool(gconf, GCONF_NAME(SAC), NULL); divelist_font = gconf_client_get_string(gconf, GCONF_NAME(divelist_font), NULL); +#else + DWORD type; + DWORD len = 4; + LONG success; + + output_units.length = get_from_registry("feet"); + output_units.pressure = get_from_registry("psi"); + output_units.volume = get_from_registry("cuft"); + output_units.temperature = get_from_registry("fahrenheit"); + visible_cols.temperature = get_from_registry("temperature"); + visible_cols.cylinder = get_from_registry("cylinder"); + visible_cols.nitrox = get_from_registry("nitrox"); + visible_cols.sac = get_from_registry("sac"); + visible_cols.otu = get_from_registry("otu"); + + divelist_font = malloc(80); + len = 80; + success = RegGetValue(HKEY_CURRENT_USER, TEXT("Software\\subsurface"), + TEXT("divelist_font"), RRF_RT_ANY, &type, divelist_font, &len); + if (success != ERROR_SUCCESS) { + /* that's what happens the first time we start - just use the default */ + free(divelist_font); + divelist_font = NULL; + } #endif if (!divelist_font) divelist_font = DIVELIST_DEFAULT_FONT; @@ -751,7 +820,11 @@ void init_ui(int argc, char **argv) } } if (need_icon) +#ifndef WIN32 gtk_window_set_icon_from_file(GTK_WINDOW(win), "subsurface.svg", NULL); +#else + gtk_window_set_icon_from_file(GTK_WINDOW(win), "subsurface.bmp", NULL); +#endif g_signal_connect(G_OBJECT(win), "delete-event", G_CALLBACK(on_delete), NULL); g_signal_connect(G_OBJECT(win), "destroy", G_CALLBACK(on_destroy), NULL); main_window = win; diff --git a/subsurface.bmp b/subsurface.bmp new file mode 100644 index 0000000000000000000000000000000000000000..db1ae18c16a820e7b4adb8171c3b9ef4c0c2786e GIT binary patch literal 40054 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 TFg9tM+FM+kyPJPK5$697ulY80 literal 0 HcmV?d00001 -- 2.43.0