settings-gconf.cpp
上传用户:center1979
上传日期:2022-07-26
资源大小:50633k
文件大小:23k
源码类别:

OpenGL

开发平台:

Visual C++

  1. /*
  2.  *  Celestia GTK+ Front-End
  3.  *  Copyright (C) 2005 Pat Suwalski <pat@suwalski.net>
  4.  *
  5.  *  This program is free software; you can redistribute it and/or modify
  6.  *  it under the terms of the GNU General Public License as published by
  7.  *  the Free Software Foundation; either version 2 of the License, or
  8.  *  (at your option) any later version.
  9.  *
  10.  *  $Id: settings-gconf.cpp,v 1.4 2008-01-18 04:36:11 suwalski Exp $
  11.  */
  12. #include <gtk/gtk.h>
  13. #include <gconf/gconf-client.h>
  14. #include <celengine/body.h>
  15. #include <celengine/galaxy.h>
  16. #include <celengine/render.h>
  17. #include "settings-gconf.h"
  18. #include "common.h"
  19. /* Definitions: GConf Callbacks */
  20. static void confLabels(GConfClient*, guint, GConfEntry*, AppData* app);
  21. static void confRender(GConfClient*, guint, GConfEntry*, AppData* app);
  22. static void confOrbits(GConfClient*, guint, GConfEntry*, AppData* app);
  23. static void confWinWidth(GConfClient*, guint, GConfEntry* e, AppData* app);
  24. static void confWinHeight(GConfClient*, guint, GConfEntry* e, AppData* app);
  25. static void confWinX(GConfClient*, guint, GConfEntry* e, AppData* app);
  26. static void confWinY(GConfClient*, guint, GConfEntry* e, AppData* app);
  27. static void confAmbientLight(GConfClient*, guint, GConfEntry* e, AppData* app);
  28. static void confVisualMagnitude(GConfClient*, guint, GConfEntry* e, AppData* app);
  29. static void confGalaxyLightGain(GConfClient*, guint, GConfEntry* e, AppData*);
  30. static void confDistanceLimit(GConfClient*, guint, GConfEntry* e, AppData*);
  31. static void confShowLocalTime(GConfClient*, guint, GConfEntry* e, AppData* app);
  32. static void confVerbosity(GConfClient*, guint, GConfEntry* e, AppData* app);
  33. static void confFullScreen(GConfClient*, guint, GConfEntry* e, AppData* app);
  34. static void confStarStyle(GConfClient*, guint, GConfEntry* e, AppData* app);
  35. static void confTextureResolution(GConfClient*, guint, GConfEntry* e, AppData* app);
  36. static void confAltSurfaceName(GConfClient*, guint, GConfEntry* e, AppData* app);
  37. static void confVideoSync(GConfClient*, guint, GConfEntry* e, AppData* app);
  38. /* Definitions: Helpers */
  39. static int readGConfRender(GConfClient* client);
  40. static int readGConfOrbits(GConfClient* client);
  41. static int readGConfLabels(GConfClient* client);
  42. static void gcSetFlag(int type, const char* name, gboolean value, GConfClient* client);
  43. /* ENTRY: Initializes the GConf connection */
  44. void initSettingsGConf(AppData* app)
  45. {
  46. app->client = gconf_client_get_default();
  47. gconf_client_add_dir(app->client, "/apps/celestia", GCONF_CLIENT_PRELOAD_RECURSIVE, NULL);
  48. }
  49. /* ENTRY: Connects GConf keys to their callbacks */
  50. void initSettingsGConfNotifiers(AppData* app)
  51. {
  52. /* Add preference client notifiers. */
  53. gconf_client_notify_add (app->client, "/apps/celestia/labels", (GConfClientNotifyFunc)confLabels, app, NULL, NULL);
  54. gconf_client_notify_add (app->client, "/apps/celestia/render", (GConfClientNotifyFunc)confRender, app, NULL, NULL);
  55. gconf_client_notify_add (app->client, "/apps/celestia/orbits", (GConfClientNotifyFunc)confOrbits, app, NULL, NULL);
  56. gconf_client_notify_add (app->client, "/apps/celestia/winWidth", (GConfClientNotifyFunc)confWinWidth, app, NULL, NULL);
  57. gconf_client_notify_add (app->client, "/apps/celestia/winHeight", (GConfClientNotifyFunc)confWinHeight, app, NULL, NULL);
  58. gconf_client_notify_add (app->client, "/apps/celestia/winX", (GConfClientNotifyFunc)confWinX, app, NULL, NULL);
  59. gconf_client_notify_add (app->client, "/apps/celestia/winY", (GConfClientNotifyFunc)confWinY, app, NULL, NULL);
  60. gconf_client_notify_add (app->client, "/apps/celestia/ambientLight", (GConfClientNotifyFunc)confAmbientLight, app, NULL, NULL);
  61. gconf_client_notify_add (app->client, "/apps/celestia/visualMagnitude", (GConfClientNotifyFunc)confVisualMagnitude, app, NULL, NULL);
  62. gconf_client_notify_add (app->client, "/apps/celestia/galaxyLightGain", (GConfClientNotifyFunc)confGalaxyLightGain, app, NULL, NULL);
  63. gconf_client_notify_add (app->client, "/apps/celestia/distanceLimit", (GConfClientNotifyFunc)confDistanceLimit, app, NULL, NULL);
  64. gconf_client_notify_add (app->client, "/apps/celestia/showLocalTime", (GConfClientNotifyFunc)confShowLocalTime, app, NULL, NULL);
  65. gconf_client_notify_add (app->client, "/apps/celestia/verbosity", (GConfClientNotifyFunc)confVerbosity, app, NULL, NULL);
  66. gconf_client_notify_add (app->client, "/apps/celestia/fullScreen", (GConfClientNotifyFunc)confFullScreen, app, NULL, NULL);
  67. gconf_client_notify_add (app->client, "/apps/celestia/starStyle", (GConfClientNotifyFunc)confStarStyle, app, NULL, NULL);
  68. gconf_client_notify_add (app->client, "/apps/celestia/textureResolution", (GConfClientNotifyFunc)confTextureResolution, app, NULL, NULL);
  69. gconf_client_notify_add (app->client, "/apps/celestia/altSurfaceName", (GConfClientNotifyFunc)confAltSurfaceName, app, NULL, NULL);
  70. gconf_client_notify_add (app->client, "/apps/celestia/videoSync", (GConfClientNotifyFunc)confVideoSync, app, NULL, NULL);
  71. }
  72. /* ENTRY: Reads preferences required before initializing simulation */
  73. void applySettingsGConfPre(AppData* app, GConfClient* client)
  74. {
  75. int sizeX, sizeY, positionX, positionY;
  76. /* Error checking occurs as values are used */
  77. sizeX = gconf_client_get_int(client, "/apps/celestia/winWidth", NULL);
  78. sizeY = gconf_client_get_int(client, "/apps/celestia/winHeight", NULL);
  79. positionX = gconf_client_get_int(client, "/apps/celestia/winX", NULL);
  80. positionY = gconf_client_get_int(client, "/apps/celestia/winY", NULL);
  81. app->fullScreen = gconf_client_get_bool(client, "/apps/celestia/fullScreen", NULL);
  82. setSaneWinSize(app, sizeX, sizeY);
  83. setSaneWinPosition(app, positionX, positionY);
  84. }
  85. /* ENTRY: Reads and applies basic preferences */
  86. void applySettingsGConfMain(AppData* app, GConfClient* client)
  87. {
  88. int rf, om, lm;
  89. /* All settings that need sanity checks get them */
  90. setSaneAmbientLight(app, gconf_client_get_float(client, "/apps/celestia/ambientLight", NULL));
  91. setSaneVisualMagnitude(app, gconf_client_get_float(client, "/apps/celestia/visualMagnitude", NULL));
  92. setSaneGalaxyLightGain(gconf_client_get_float(client, "/apps/celestia/galaxyLightGain", NULL));
  93. setSaneDistanceLimit(app, gconf_client_get_int(client, "/apps/celestia/distanceLimit", NULL));
  94. setSaneVerbosity(app, gconf_client_get_int(client, "/apps/celestia/verbosity", NULL));
  95. setSaneStarStyle(app, (Renderer::StarStyle)gconf_client_get_int(client, "/apps/celestia/starStyle", NULL));
  96. setSaneTextureResolution(app, gconf_client_get_int(client, "/apps/celestia/textureResolution", NULL));
  97. setSaneAltSurface(app, gconf_client_get_string(client, "/apps/celestia/altSurfaceName", NULL));
  98. app->showLocalTime = gconf_client_get_bool(client, "/apps/celestia/showLocalTime", NULL);
  99. app->renderer->setVideoSync(gconf_client_get_bool(client, "/apps/celestia/videoSync", NULL));
  100. /* Render Flags */
  101. rf = readGConfRender(app->client);
  102. app->renderer->setRenderFlags(rf);
  103. /* Orbit Mode */
  104. om = readGConfOrbits(app->client);
  105. app->renderer->setOrbitMask(om);
  106. /* Label Mode */
  107. lm = readGConfLabels(app->client);
  108. app->renderer->setLabelMode(lm);
  109. }
  110. /* ENTRY: Saves the final settings that are not updated on-the-fly */
  111. void saveSettingsGConf(AppData* app)
  112. {
  113. /* Save window position */
  114. gconf_client_set_int(app->client, "/apps/celestia/winX", getWinX(app), NULL);
  115. gconf_client_set_int(app->client, "/apps/celestia/winY", getWinY(app), NULL);
  116. /* Save window size */
  117. gconf_client_set_int(app->client, "/apps/celestia/winWidth", getWinWidth(app), NULL);
  118. gconf_client_set_int(app->client, "/apps/celestia/winHeight", getWinHeight(app), NULL);
  119. /* These do not produce notification when changed */
  120. gconf_client_set_int(app->client, "/apps/celestia/textureResolution", app->renderer->getResolution(), NULL);
  121. gconf_client_set_int(app->client, "/apps/celestia/distanceLimit", (int)app->renderer->getDistanceLimit(), NULL);
  122. g_object_unref (G_OBJECT (app->client));
  123. }
  124. /* UTILITY: Converts a binary render flag to individual keys */
  125. void gcSetRenderFlag(int flag, gboolean state, GConfClient* client)
  126. {
  127. switch (flag)
  128. {
  129. case Renderer::ShowStars: gcSetFlag(Render, "stars", state, client); break;
  130. case Renderer::ShowPlanets: gcSetFlag(Render, "planets", state, client); break;
  131. case Renderer::ShowGalaxies: gcSetFlag(Render, "galaxies", state, client); break;
  132. case Renderer::ShowDiagrams: gcSetFlag(Render, "diagrams", state, client); break;
  133. case Renderer::ShowCloudMaps: gcSetFlag(Render, "cloudMaps", state, client); break;
  134. case Renderer::ShowOrbits: gcSetFlag(Render, "orbits", state, client); break;
  135. case Renderer::ShowCelestialSphere: gcSetFlag(Render, "celestialSphere", state, client); break;
  136. case Renderer::ShowNightMaps: gcSetFlag(Render, "nightMaps", state, client); break;
  137. case Renderer::ShowAtmospheres: gcSetFlag(Render, "atmospheres", state, client); break;
  138. case Renderer::ShowSmoothLines: gcSetFlag(Render, "smoothLines", state, client); break;
  139. case Renderer::ShowEclipseShadows: gcSetFlag(Render, "eclipseShadows", state, client); break;
  140. case Renderer::ShowRingShadows: gcSetFlag(Render, "ringShadows", state, client); break;
  141. case Renderer::ShowBoundaries: gcSetFlag(Render, "boundaries", state, client); break;
  142. case Renderer::ShowAutoMag: gcSetFlag(Render, "autoMag", state, client); break;
  143. case Renderer::ShowCometTails: gcSetFlag(Render, "cometTails", state, client); break;
  144. case Renderer::ShowMarkers: gcSetFlag(Render, "markers", state, client); break;
  145. case Renderer::ShowPartialTrajectories: gcSetFlag(Render, "partialTrajectories", state, client); break;
  146. case Renderer::ShowNebulae: gcSetFlag(Render, "nebulae", state, client); break;
  147. case Renderer::ShowOpenClusters: gcSetFlag(Render, "openClusters", state, client); break;
  148. case Renderer::ShowGlobulars: gcSetFlag(Render, "globulars", state, client); break;
  149. case Renderer::ShowGalacticGrid: gcSetFlag(Render, "gridGalactic", state, client); break;
  150. case Renderer::ShowEclipticGrid: gcSetFlag(Render, "gridEcliptic", state, client); break;
  151. case Renderer::ShowHorizonGrid: gcSetFlag(Render, "gridHorizontal", state, client); break;
  152. }
  153. }
  154. /* UTILITY: Converts a binary orbit mask to individual keys */
  155. void gcSetOrbitMask(int flag, gboolean state, GConfClient* client)
  156. {
  157. switch (flag)
  158. {
  159. case Body::Planet: gcSetFlag(Orbit, "planet", state, client); break;
  160. case Body::Moon: gcSetFlag(Orbit, "moon", state, client); break;
  161. case Body::Asteroid: gcSetFlag(Orbit, "asteroid", state, client); break;
  162. case Body::Spacecraft: gcSetFlag(Orbit, "spacecraft", state, client); break;
  163. case Body::Comet: gcSetFlag(Orbit, "comet", state, client); break;
  164. case Body::Invisible: gcSetFlag(Orbit, "invisible", state, client); break;
  165. case Body::Unknown: gcSetFlag(Orbit, "unknown", state, client); break;
  166. }
  167. }
  168. /* UTILITY: Converts a binary label mode to individual keys */
  169. void gcSetLabelMode(int flag, gboolean state, GConfClient* client)
  170. {
  171. switch (flag)
  172. {
  173. case Renderer::StarLabels: gcSetFlag(Label, "star", state, client); break;
  174. case Renderer::PlanetLabels: gcSetFlag(Label, "planet", state, client); break;
  175. case Renderer::MoonLabels: gcSetFlag(Label, "moon", state, client); break;
  176. case Renderer::ConstellationLabels: gcSetFlag(Label, "constellation", state, client); break;
  177. case Renderer::GalaxyLabels: gcSetFlag(Label, "galaxy", state, client); break;
  178. case Renderer::AsteroidLabels: gcSetFlag(Label, "asteroid", state, client); break;
  179. case Renderer::SpacecraftLabels: gcSetFlag(Label, "spacecraft", state, client); break;
  180. case Renderer::LocationLabels: gcSetFlag(Label, "location", state, client); break;
  181. case Renderer::CometLabels: gcSetFlag(Label, "comet", state, client); break;
  182. case Renderer::NebulaLabels: gcSetFlag(Label, "nebula", state, client); break;
  183. case Renderer::OpenClusterLabels: gcSetFlag(Label, "openCluster", state, client); break;
  184. case Renderer::I18nConstellationLabels: gcSetFlag(Label, "i18n", state, client); break;
  185. case Renderer::GlobularLabels: gcSetFlag(Label, "globular", state, client); break;
  186. }
  187. }
  188. /* GCONF CALLBACK: Reloads labels upon change */
  189. static void confLabels(GConfClient*, guint, GConfEntry*, AppData* app)
  190. {
  191. int oldLabels = app->renderer->getLabelMode();
  192. /* Reload all the labels */
  193. int newLabels = readGConfLabels(app->client);
  194. /* Set label flags */
  195. if (newLabels != oldLabels)
  196. app->renderer->setLabelMode(newLabels);
  197. }
  198. /* GCONF CALLBACK: Reloads render flags upon change */
  199. static void confRender(GConfClient*, guint, GConfEntry*, AppData* app)
  200. {
  201. int oldRender = app->renderer->getRenderFlags();
  202. /* Reload all the render flags */
  203. int newRender = readGConfRender(app->client);
  204. /* Set render flags */
  205. if (newRender != oldRender)
  206. app->renderer->setRenderFlags(newRender);
  207. }
  208. /* GCONF CALLBACK: Reloads orbits upon change */
  209. static void confOrbits(GConfClient*, guint, GConfEntry*, AppData* app)
  210. {
  211. int oldOrbit = app->renderer->getOrbitMask();
  212. /* Reload all the orbits */
  213. int newOrbit = readGConfOrbits(app->client);
  214. /* Set orbit flags */
  215. if (newOrbit != oldOrbit)
  216. app->renderer->setOrbitMask(newOrbit);
  217. }
  218. /* GCONF CALLBACK: Sets window width upon change */
  219. static void confWinWidth(GConfClient*, guint, GConfEntry* e, AppData* app)
  220. {
  221. int w = gconf_value_get_int(e->value);
  222. if (w != getWinWidth(app))
  223. setSaneWinSize(app, w, getWinHeight(app));
  224. }
  225. /* GCONF CALLBACK: Sets window height upon change */
  226. static void confWinHeight(GConfClient*, guint, GConfEntry* e, AppData* app)
  227. {
  228. int h = gconf_value_get_int(e->value);
  229. if (h != getWinHeight(app))
  230. setSaneWinSize(app, getWinWidth(app), h);
  231. }
  232. /* GCONF CALLBACK: Sets window X position upon change */
  233. static void confWinX(GConfClient*, guint, GConfEntry* e, AppData* app)
  234. {
  235. int x = gconf_value_get_int(e->value);
  236. if (x != getWinX(app))
  237. setSaneWinPosition(app, x, getWinY(app));
  238. }
  239. /* GCONF CALLBACK: Sets window Y position upon change */
  240. static void confWinY(GConfClient*, guint, GConfEntry* e, AppData* app)
  241. {
  242. int y = gconf_value_get_int(e->value);
  243. if (y != getWinY(app))
  244. setSaneWinPosition(app, getWinX(app), y);
  245. }
  246. /* GCONF CALLBACK: Reloads ambient light setting upon change */
  247. static void confAmbientLight(GConfClient*, guint, GConfEntry* e, AppData* app)
  248. {
  249. float value = gconf_value_get_float(e->value);
  250. /* Comparing floats is tricky. Three decimal places is "close enough." */
  251. if (abs(value - app->renderer->getAmbientLightLevel()) < 0.001)
  252. return;
  253. setSaneAmbientLight(app, value);
  254. }
  255. /* GCONF CALLBACK: Reloads visual magnitude setting upon change */
  256. static void confVisualMagnitude(GConfClient*, guint, GConfEntry* e, AppData* app)
  257. {
  258. float value = gconf_value_get_float(e->value);
  259. if (abs(value - app->simulation->getFaintestVisible()) < 0.001)
  260. return;
  261. setSaneVisualMagnitude(app, value);
  262. }
  263. /* GCONF CALLBACK: Reloads galaxy light gain setting upon change */
  264. static void confGalaxyLightGain(GConfClient*, guint, GConfEntry* e, AppData*)
  265. {
  266. float value = gconf_value_get_float(e->value);
  267. if (abs(value - Galaxy::getLightGain()) < 0.001)
  268. return;
  269. setSaneGalaxyLightGain(value);
  270. }
  271. /* GCONF CALLBACK: Sets texture resolution when changed */
  272. static void confDistanceLimit(GConfClient*, guint, GConfEntry* e, AppData* app)
  273. {
  274. int value = gconf_value_get_int(e->value);
  275. if (value == app->renderer->getDistanceLimit())
  276. return;
  277. setSaneDistanceLimit(app, value);
  278. }
  279. /* GCONF CALLBACK: Sets "show local time" setting upon change */
  280. static void confShowLocalTime(GConfClient*, guint, GConfEntry* e, AppData* app)
  281. {
  282. gboolean value = gconf_value_get_bool(e->value);
  283. if (value == app->showLocalTime)
  284. return;
  285. app->showLocalTime = value;
  286. updateTimeZone(app, app->showLocalTime);
  287. }
  288. /* GCONF CALLBACK: Sets HUD detail when changed */
  289. static void confVerbosity(GConfClient*, guint, GConfEntry* e, AppData* app)
  290. {
  291. int value = gconf_value_get_int(e->value);
  292. if (value == app->core->getHudDetail())
  293. return;
  294. setSaneVerbosity(app, value);
  295. }
  296. /* GCONF CALLBACK: Sets window to fullscreen when change occurs */
  297. static void confFullScreen(GConfClient*, guint, GConfEntry* e, AppData* app)
  298. {
  299. gboolean value = gconf_value_get_bool(e->value);
  300. /* There is no way to determine if the window is actually full screen */
  301. if (value == app->fullScreen)
  302. return;
  303. /* The Action handler for full-screen toggles for us, so we set it opposite
  304.  * of what is wanted, and... */
  305. app->fullScreen = !value;
  306. /* ... tickle it. */
  307. gtk_toggle_action_set_active(GTK_TOGGLE_ACTION(gtk_action_group_get_action(app->agMain, "FullScreen")), value);
  308. }
  309. /* GCONF CALLBACK: Sets star style when changed */
  310. static void confStarStyle(GConfClient*, guint, GConfEntry* e, AppData* app)
  311. {
  312. int value = gconf_value_get_int(e->value);
  313. if (value == app->renderer->getStarStyle())
  314. return;
  315. setSaneStarStyle(app, (Renderer::StarStyle)value);
  316. }
  317. /* GCONF CALLBACK: Sets texture resolution when changed */
  318. static void confTextureResolution(GConfClient*, guint, GConfEntry* e, AppData* app)
  319. {
  320. int value = gconf_value_get_int(e->value);
  321. if (value == (int)app->renderer->getResolution())
  322. return;
  323. setSaneTextureResolution(app, value);
  324. }
  325. /* GCONF CALLBACK: Sets alternate surface texture when changed */
  326. static void confAltSurfaceName(GConfClient*, guint, GConfEntry* e, AppData* app)
  327. {
  328. const char* value = gconf_value_get_string(e->value);
  329. if (string(value) == app->simulation->getActiveObserver()->getDisplayedSurface())
  330. return;
  331. setSaneAltSurface(app, (char*)value);
  332. }
  333. /* GCONF CALLBACK: Sets video framerate sync when changed */
  334. static void confVideoSync(GConfClient*, guint, GConfEntry* e, AppData* app)
  335. {
  336. gboolean value = gconf_value_get_bool(e->value);
  337. if (value == app->renderer->getVideoSync())
  338. return;
  339. app->renderer->setVideoSync(value);
  340. }
  341. /* HELPER: Reads in GConf->Render preferences and returns as int mask */
  342. static int readGConfRender(GConfClient* client)
  343. {
  344. int rf = Renderer::ShowNothing;
  345. rf |= Renderer::ShowStars * gconf_client_get_bool(client, "/apps/celestia/render/stars",  NULL);
  346. rf |= Renderer::ShowPlanets * gconf_client_get_bool(client, "/apps/celestia/render/planets",  NULL);
  347. rf |= Renderer::ShowGalaxies * gconf_client_get_bool(client, "/apps/celestia/render/galaxies",  NULL);
  348. rf |= Renderer::ShowDiagrams * gconf_client_get_bool(client, "/apps/celestia/render/diagrams",  NULL);
  349. rf |= Renderer::ShowCloudMaps * gconf_client_get_bool(client, "/apps/celestia/render/cloudMaps",  NULL);
  350. rf |= Renderer::ShowOrbits * gconf_client_get_bool(client, "/apps/celestia/render/orbits",  NULL);
  351. rf |= Renderer::ShowCelestialSphere * gconf_client_get_bool(client, "/apps/celestia/render/celestialSphere",  NULL);
  352. rf |= Renderer::ShowNightMaps * gconf_client_get_bool(client, "/apps/celestia/render/nightMaps",  NULL);
  353. rf |= Renderer::ShowAtmospheres * gconf_client_get_bool(client, "/apps/celestia/render/atmospheres",  NULL);
  354. rf |= Renderer::ShowSmoothLines * gconf_client_get_bool(client, "/apps/celestia/render/smoothLines",  NULL);
  355. rf |= Renderer::ShowEclipseShadows * gconf_client_get_bool(client, "/apps/celestia/render/eclipseShadows",  NULL);
  356. rf |= Renderer::ShowRingShadows * gconf_client_get_bool(client, "/apps/celestia/render/ringShadows",  NULL);
  357. rf |= Renderer::ShowBoundaries * gconf_client_get_bool(client, "/apps/celestia/render/boundaries",  NULL);
  358. rf |= Renderer::ShowAutoMag * gconf_client_get_bool(client, "/apps/celestia/render/autoMag",  NULL);
  359. rf |= Renderer::ShowCometTails * gconf_client_get_bool(client, "/apps/celestia/render/cometTails",  NULL);
  360. rf |= Renderer::ShowMarkers * gconf_client_get_bool(client, "/apps/celestia/render/markers",  NULL);
  361. rf |= Renderer::ShowPartialTrajectories * gconf_client_get_bool(client, "/apps/celestia/render/partialTrajectories",  NULL);
  362. rf |= Renderer::ShowNebulae * gconf_client_get_bool(client, "/apps/celestia/render/nebulae",  NULL);
  363. rf |= Renderer::ShowOpenClusters * gconf_client_get_bool(client, "/apps/celestia/render/openClusters",  NULL);
  364. rf |= Renderer::ShowGlobulars * gconf_client_get_bool(client, "/apps/celestia/render/globulars",  NULL);
  365. rf |= Renderer::ShowGalacticGrid * gconf_client_get_bool(client, "/apps/celestia/render/gridGalactic",  NULL);
  366. rf |= Renderer::ShowEclipticGrid * gconf_client_get_bool(client, "/apps/celestia/render/gridEcliptic",  NULL);
  367. rf |= Renderer::ShowHorizonGrid * gconf_client_get_bool(client, "/apps/celestia/render/gridHorizontal",  NULL);
  368. return rf;
  369. }
  370. /* HELPER: Reads in GConf->Orbits preferences and returns as int mask */
  371. static int readGConfOrbits(GConfClient* client)
  372. {
  373. int om = 0;
  374. om |= Body::Planet * gconf_client_get_bool(client, "/apps/celestia/orbits/planet",  NULL);
  375. om |= Body::Moon * gconf_client_get_bool(client, "/apps/celestia/orbits/moon",  NULL);
  376. om |= Body::Asteroid * gconf_client_get_bool(client, "/apps/celestia/orbits/asteroid",  NULL);
  377. om |= Body::Comet * gconf_client_get_bool(client, "/apps/celestia/orbits/comet",  NULL);
  378. om |= Body::Spacecraft * gconf_client_get_bool(client, "/apps/celestia/orbits/spacecraft",  NULL);
  379. om |= Body::Invisible * gconf_client_get_bool(client, "/apps/celestia/orbits/invisible",  NULL);
  380. om |= Body::Unknown * gconf_client_get_bool(client, "/apps/celestia/orbits/unknown",  NULL);
  381. return om;
  382. }
  383. /* HELPER: Reads in GConf->Labels preferences and returns as int mask */
  384. static int readGConfLabels(GConfClient* client)
  385. {
  386. int lm = Renderer::NoLabels;
  387. lm |= Renderer::StarLabels  * gconf_client_get_bool(client, "/apps/celestia/labels/star", NULL);
  388. lm |= Renderer::PlanetLabels  * gconf_client_get_bool(client, "/apps/celestia/labels/planet", NULL);
  389. lm |= Renderer::MoonLabels  * gconf_client_get_bool(client, "/apps/celestia/labels/moon", NULL);
  390. lm |= Renderer::ConstellationLabels  * gconf_client_get_bool(client, "/apps/celestia/labels/constellation", NULL);
  391. lm |= Renderer::GalaxyLabels  * gconf_client_get_bool(client, "/apps/celestia/labels/galaxy", NULL);
  392. lm |= Renderer::AsteroidLabels  * gconf_client_get_bool(client, "/apps/celestia/labels/asteroid", NULL);
  393. lm |= Renderer::SpacecraftLabels  * gconf_client_get_bool(client, "/apps/celestia/labels/spacecraft", NULL);
  394. lm |= Renderer::LocationLabels  * gconf_client_get_bool(client, "/apps/celestia/labels/location", NULL);
  395. lm |= Renderer::CometLabels  * gconf_client_get_bool(client, "/apps/celestia/labels/comet", NULL);
  396. lm |= Renderer::NebulaLabels  * gconf_client_get_bool(client, "/apps/celestia/labels/nebula", NULL);
  397. lm |= Renderer::OpenClusterLabels  * gconf_client_get_bool(client, "/apps/celestia/labels/openCluster", NULL);
  398. lm |= Renderer::I18nConstellationLabels  * gconf_client_get_bool(client, "/apps/celestia/labels/i18n", NULL);
  399. lm |= Renderer::GlobularLabels  * gconf_client_get_bool(client, "/apps/celestia/labels/globular", NULL);
  400. return lm;
  401. }
  402. /* HELPER: Sets one of the flags according to provided type, key, and value */
  403. static void gcSetFlag(int type, const char* name, gboolean value, GConfClient* client)
  404. {
  405. gchar key[60];
  406. switch (type)
  407. {
  408. case Render: sprintf(key, "%s%s", "/apps/celestia/render/", name); break;
  409. case Orbit: sprintf(key, "%s%s", "/apps/celestia/orbits/", name); break;
  410. case Label: sprintf(key, "%s%s", "/apps/celestia/labels/", name); break;
  411. }
  412. gconf_client_set_bool(client, key, value, NULL);
  413. }