Main Page | Namespace List | Class Hierarchy | Alphabetical List | Class List | Directories | File List | Namespace Members | Class Members | File Members

settings-file.h File Reference

#include <gtk/gtk.h>
#include "common.h"

Include dependency graph for settings-file.h:

This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Defines

#define CELESTIARC   ".celestiarc"

Functions

void applySettingsFileMain (AppData *app, GKeyFile *file)
void applySettingsFilePre (AppData *app, GKeyFile *file)
void initSettingsFile (AppData *app)
void saveSettingsFile (AppData *app)


Define Documentation

#define CELESTIARC   ".celestiarc"
 

Definition at line 21 of file settings-file.h.

Referenced by initSettingsFile(), and saveSettingsFile().


Function Documentation

void applySettingsFileMain AppData app,
GKeyFile *  file
 

Definition at line 87 of file settings-file.cpp.

References getFlag(), setDefaultRenderFlags(), setSaneAltSurface(), setSaneAmbientLight(), setSaneGalaxyLightGain(), setSaneStarStyle(), setSaneVerbosity(), and setSaneVisualMagnitude().

Referenced by initRealize().

00088 {
00089         GError* e;
00090         float ambientLight, visualMagnitude, galaxyLightGain;
00091         int errors, verbosity, starStyle, rf, om, lm;
00092                 
00093         /* See comment in applySettingsFilePrefs() */
00094         e= NULL;
00095         ambientLight = (float)g_key_file_get_integer(file, "Main", "ambientLight", &e) / 1000.0;
00096         if (e != NULL) ambientLight = -1.0;
00097         
00098         e = NULL;
00099         visualMagnitude = (float)g_key_file_get_integer(file, "Main", "visualMagnitude", &e) / 1000.0;
00100         if (e != NULL) visualMagnitude = -1.0;
00101 
00102         e = NULL;
00103         galaxyLightGain = (float)g_key_file_get_integer(file, "Main", "galaxyLightGain", &e) / 1000.0;
00104         if (e != NULL) galaxyLightGain = -1.0;
00105 
00106         e = NULL;
00107         verbosity = g_key_file_get_integer(file, "Main", "verbosity", &e);
00108         if (e != NULL) verbosity = -1;
00109         
00110         e = NULL;
00111         starStyle = g_key_file_get_integer(file, "Main", "starStyle", &e);
00112         if (e != NULL) starStyle = -1;
00113                 
00114         e= NULL;
00115         app->showLocalTime = g_key_file_get_boolean(file, "Main", "localTime", &e);
00116         if (e != NULL) app->showLocalTime = FALSE;
00117         
00118         /* All settings that need sanity checks get them */
00119         setSaneAmbientLight(app, ambientLight);
00120         setSaneVisualMagnitude(app, visualMagnitude);
00121         setSaneGalaxyLightGain(galaxyLightGain);
00122         setSaneVerbosity(app, verbosity);
00123         setSaneStarStyle(app, (Renderer::StarStyle)starStyle);
00124         setSaneAltSurface(app, g_key_file_get_string(file, "Main", "altSurfaceName", NULL));
00125         
00126         /* Render Flags */
00127         errors = 0;
00128         rf = Renderer::ShowNothing;
00129         getFlag(file, &rf, Renderer::ShowStars, "RenderFlags", "stars", &errors);
00130         getFlag(file, &rf, Renderer::ShowPlanets, "RenderFlags", "planets", &errors);
00131         getFlag(file, &rf, Renderer::ShowGalaxies, "RenderFlags", "galaxies", &errors);
00132         getFlag(file, &rf, Renderer::ShowDiagrams, "RenderFlags", "diagrams", &errors);
00133         getFlag(file, &rf, Renderer::ShowCloudMaps, "RenderFlags", "cloudMaps", &errors);
00134         getFlag(file, &rf, Renderer::ShowOrbits, "RenderFlags", "orbits", &errors);
00135         getFlag(file, &rf, Renderer::ShowCelestialSphere, "RenderFlags", "celestialSphere", &errors);
00136         getFlag(file, &rf, Renderer::ShowNightMaps, "RenderFlags", "nightMaps", &errors);
00137         getFlag(file, &rf, Renderer::ShowAtmospheres, "RenderFlags", "atmospheres", &errors);
00138         getFlag(file, &rf, Renderer::ShowSmoothLines, "RenderFlags", "smoothLines", &errors);
00139         getFlag(file, &rf, Renderer::ShowEclipseShadows, "RenderFlags", "eclipseShadows", &errors);
00140         getFlag(file, &rf, Renderer::ShowRingShadows, "RenderFlags", "ringShadows", &errors);
00141         getFlag(file, &rf, Renderer::ShowBoundaries, "RenderFlags", "boundaries", &errors);
00142         getFlag(file, &rf, Renderer::ShowAutoMag, "RenderFlags", "autoMag", &errors);
00143         getFlag(file, &rf, Renderer::ShowCometTails, "RenderFlags", "cometTails", &errors);
00144         getFlag(file, &rf, Renderer::ShowMarkers, "RenderFlags", "markers", &errors);
00145         getFlag(file, &rf, Renderer::ShowPartialTrajectories, "RenderFlags", "partialTrajectories", &errors);
00146         getFlag(file, &rf, Renderer::ShowNebulae, "RenderFlags", "nebulae", &errors);
00147         getFlag(file, &rf, Renderer::ShowOpenClusters, "RenderFlags", "openClusters", &errors);
00148         
00149         /* If any flag is missing, use defaults for all. */
00150         if (errors > 0)
00151                 setDefaultRenderFlags(app);
00152         else
00153                 app->renderer->setRenderFlags(rf);
00154         
00155         /* Orbit Mask */
00156         errors = 0;
00157         om = 0;
00158         getFlag(file, &om, Body::Planet, "OrbitMask", "planet", &errors);
00159         getFlag(file, &om, Body::Moon, "OrbitMask", "moon", &errors);
00160         getFlag(file, &om, Body::Asteroid, "OrbitMask", "asteroid", &errors);
00161         getFlag(file, &om, Body::Comet, "OrbitMask", "comet", &errors);
00162         getFlag(file, &om, Body::Spacecraft, "OrbitMask", "spacecraft", &errors);
00163         getFlag(file, &om, Body::Invisible, "OrbitMask", "invisible", &errors);
00164         getFlag(file, &om, Body::Unknown, "OrbitMask", "unknown", &errors);
00165         
00166         /* If any orbit is missing, use core defaults for all (do nothing). */
00167         if (errors == 0)
00168                 app->renderer->setOrbitMask(om);
00169 
00170         /* Label Mode */
00171         errors = 0;
00172         lm = Renderer::NoLabels;
00173         
00174         getFlag(file, &lm, Renderer::StarLabels, "LabelMode", "star", &errors);
00175         getFlag(file, &lm, Renderer::PlanetLabels, "LabelMode", "planet", &errors);
00176         getFlag(file, &lm, Renderer::MoonLabels, "LabelMode", "moon", &errors);
00177         getFlag(file, &lm, Renderer::ConstellationLabels, "LabelMode", "constellation", &errors);
00178         getFlag(file, &lm, Renderer::GalaxyLabels, "LabelMode", "galaxy", &errors);
00179         getFlag(file, &lm, Renderer::AsteroidLabels, "LabelMode", "asteroid", &errors);
00180         getFlag(file, &lm, Renderer::SpacecraftLabels, "LabelMode", "spacecraft", &errors);
00181         getFlag(file, &lm, Renderer::LocationLabels, "LabelMode", "location", &errors);
00182         getFlag(file, &lm, Renderer::CometLabels, "LabelMode", "comet", &errors);
00183         getFlag(file, &lm, Renderer::NebulaLabels, "LabelMode", "nebula", &errors);
00184         getFlag(file, &lm, Renderer::OpenClusterLabels, "LabelMode", "opencluster", &errors);
00185         getFlag(file, &lm, Renderer::I18nConstellationLabels, "LabelMode", "i18n", &errors);
00186         
00187         /* If any label is missing, use core defaults for all (do nothing). */
00188         if (errors == 0)
00189                 app->renderer->setLabelMode(lm);
00190 }

void applySettingsFilePre AppData app,
GKeyFile *  file
 

Definition at line 50 of file settings-file.cpp.

References setSaneWinPosition(), and setSaneWinSize().

Referenced by main().

00051 {
00052         int sizeX, sizeY, positionX, positionY;
00053         GError* e;
00054 
00055         /* Numbers require special treatment because if they are not found they
00056          * are not set to NULL like strings. So, if that is the case, we set them
00057          * to values that will cause setSane*() to set defaults. */
00058         e= NULL;
00059         sizeX = g_key_file_get_integer(file, "Window", "width", &e);
00060         if (e != NULL) sizeX = -1;
00061 
00062         e= NULL;
00063         sizeY = g_key_file_get_integer(file, "Window", "height", &e);
00064         if (e != NULL) sizeY = -1;
00065 
00066         e= NULL;
00067         positionX = g_key_file_get_integer(file, "Window", "x", &e);
00068         if (e != NULL) positionX = -1;
00069 
00070         e= NULL;
00071         positionY = g_key_file_get_integer(file, "Window", "y", &e);
00072         if (e != NULL) positionY = -1;
00073 
00074         /* These next two cannot be checked for sanity, default set here */
00075         e= NULL;
00076         app->fullScreen = g_key_file_get_boolean(file, "Window", "fullScreen", &e);
00077         if (e != NULL) app->fullScreen = FALSE;
00078         
00079         /* Nothing is set here. The prefs structure is used to set things at the
00080          * corrent times. */
00081         setSaneWinSize(app, sizeX, sizeY);
00082         setSaneWinPosition(app, positionX, positionY);
00083 }

void initSettingsFile AppData app  ) 
 

Definition at line 28 of file settings-file.cpp.

References CELESTIARC.

Referenced by main().

00029 {
00030         GError *error = NULL;
00031         app->settingsFile = g_key_file_new();
00032         
00033         char* fn = g_build_filename(g_get_home_dir(), CELESTIARC, NULL);
00034         
00035         g_key_file_load_from_file(app->settingsFile, fn, G_KEY_FILE_NONE, &error);
00036 
00037         /* Should check G_KEY_FILE_ERROR_NOT_FOUND, but bug in glib returns wrong
00038          * error code. */
00039         if (error != NULL && g_file_test(fn, G_FILE_TEST_EXISTS))
00040         {
00041                 g_print("Error reading '%s': %s.\n", fn, error->message);
00042                 exit(1);
00043         }
00044         
00045         g_free(fn);
00046 }

void saveSettingsFile AppData app  ) 
 

Definition at line 194 of file settings-file.cpp.

References CELESTIARC, getWinHeight(), getWinWidth(), getWinX(), and getWinY().

Referenced by actionQuit().

00195 {
00196         int rf, om, lm;
00197         GKeyFile* file = app->settingsFile;
00198         char* fn = g_build_filename(g_get_home_dir(), CELESTIARC, NULL);
00199         FILE* outfile;
00200         
00201         g_key_file_set_integer(file, "Main", "ambientLight", (int)(1000 * app->renderer->getAmbientLightLevel()));
00202         g_key_file_set_comment(file, "Main", "ambientLight", "ambientLight = (int)(1000 * AmbientLightLevel)", NULL);
00203         g_key_file_set_integer(file, "Main", "visualMagnitude", (int)(1000 * app->simulation->getFaintestVisible()));
00204         g_key_file_set_comment(file, "Main", "visualMagnitude", "visualMagnitude = (int)(1000 * FaintestVisible)", NULL);
00205         g_key_file_set_integer(file, "Main", "galaxyLightGain", (int)(1000 * Galaxy::getLightGain()));
00206         g_key_file_set_comment(file, "Main", "galaxyLightGain", "galaxyLightGain = (int)(1000 * GalaxyLightGain)", NULL);
00207         g_key_file_set_boolean(file, "Main", "localTime", app->showLocalTime);
00208         g_key_file_set_integer(file, "Main", "verbosity", app->core->getHudDetail());
00209         g_key_file_set_comment(file, "Main", "verbosity", "Level of Detail in the heads-up-display. 0=None, 1=Terse, 2=Verbose", NULL);
00210         g_key_file_set_integer(file, "Main", "starStyle", app->renderer->getStarStyle());
00211         g_key_file_set_comment(file, "Main", "starStyle", "Style of star rendering. 0=Fuzzy Points, 1=Points, 2=Scaled Discs", NULL);
00212         g_key_file_set_string(file, "Main", "altSurfaceName", app->simulation->getActiveObserver()->getDisplayedSurface().c_str());
00213         
00214         g_key_file_set_integer(file, "Window", "width", getWinWidth(app));
00215         g_key_file_set_integer(file, "Window", "height", getWinHeight(app));
00216         g_key_file_set_integer(file, "Window", "x", getWinX(app));
00217         g_key_file_set_integer(file, "Window", "y", getWinY(app));
00218         g_key_file_set_boolean(file, "Window", "fullScreen", app->fullScreen);
00219         
00220         rf = app->renderer->getRenderFlags();
00221         g_key_file_set_boolean(file, "RenderFlags", "stars", rf & Renderer::ShowStars);
00222         g_key_file_set_boolean(file, "RenderFlags", "planets", rf & Renderer::ShowPlanets);
00223         g_key_file_set_boolean(file, "RenderFlags", "galaxies", rf & Renderer::ShowGalaxies);
00224         g_key_file_set_boolean(file, "RenderFlags", "diagrams", rf & Renderer::ShowDiagrams);
00225         g_key_file_set_boolean(file, "RenderFlags", "cloudMaps", rf & Renderer::ShowCloudMaps);
00226         g_key_file_set_boolean(file, "RenderFlags", "orbits", rf & Renderer::ShowOrbits);
00227         g_key_file_set_boolean(file, "RenderFlags", "celestialSphere", rf & Renderer::ShowCelestialSphere);
00228         g_key_file_set_boolean(file, "RenderFlags", "nightMaps", rf & Renderer::ShowNightMaps);
00229         g_key_file_set_boolean(file, "RenderFlags", "atmospheres", rf & Renderer::ShowAtmospheres);
00230         g_key_file_set_boolean(file, "RenderFlags", "smoothLines", rf & Renderer::ShowSmoothLines);
00231         g_key_file_set_boolean(file, "RenderFlags", "eclipseShadows", rf & Renderer::ShowEclipseShadows);
00232         g_key_file_set_boolean(file, "RenderFlags", "ringShadows", rf & Renderer::ShowRingShadows);
00233         g_key_file_set_boolean(file, "RenderFlags", "boundaries", rf & Renderer::ShowBoundaries);
00234         g_key_file_set_boolean(file, "RenderFlags", "autoMag", rf & Renderer::ShowAutoMag);
00235         g_key_file_set_boolean(file, "RenderFlags", "cometTails", rf & Renderer::ShowCometTails);
00236         g_key_file_set_boolean(file, "RenderFlags", "markers", rf & Renderer::ShowMarkers);
00237         g_key_file_set_boolean(file, "RenderFlags", "partialTrajectories", rf & Renderer::ShowPartialTrajectories);
00238         g_key_file_set_boolean(file, "RenderFlags", "nebulae", rf & Renderer::ShowNebulae);
00239         g_key_file_set_boolean(file, "RenderFlags", "openClusters", rf & Renderer::ShowOpenClusters);
00240         
00241         om = app->renderer->getOrbitMask();
00242         g_key_file_set_boolean(file, "OrbitMask", "planet", om & Body::Planet);
00243         g_key_file_set_boolean(file, "OrbitMask", "moon", om & Body::Moon);
00244         g_key_file_set_boolean(file, "OrbitMask", "asteroid", om & Body::Asteroid);
00245         g_key_file_set_boolean(file, "OrbitMask", "comet", om & Body::Comet);
00246         g_key_file_set_boolean(file, "OrbitMask", "spacecraft", om & Body::Spacecraft);
00247         g_key_file_set_boolean(file, "OrbitMask", "invisible", om & Body::Invisible);
00248         g_key_file_set_boolean(file, "OrbitMask", "unknown", om & Body::Unknown);
00249         
00250         lm = app->renderer->getLabelMode();
00251         g_key_file_set_boolean(file, "LabelMode", "star", lm & Renderer::StarLabels);
00252         g_key_file_set_boolean(file, "LabelMode", "planet", lm & Renderer::PlanetLabels);
00253         g_key_file_set_boolean(file, "LabelMode", "moon", lm & Renderer::MoonLabels);
00254         g_key_file_set_boolean(file, "LabelMode", "constellation", lm & Renderer::ConstellationLabels);
00255         g_key_file_set_boolean(file, "LabelMode", "galaxy", lm & Renderer::GalaxyLabels);
00256         g_key_file_set_boolean(file, "LabelMode", "asteroid", lm & Renderer::AsteroidLabels);
00257         g_key_file_set_boolean(file, "LabelMode", "spacecraft", lm & Renderer::SpacecraftLabels);
00258         g_key_file_set_boolean(file, "LabelMode", "location", lm & Renderer::LocationLabels);
00259         g_key_file_set_boolean(file, "LabelMode", "comet", lm & Renderer::CometLabels);
00260         g_key_file_set_boolean(file, "LabelMode", "nebula", lm & Renderer::NebulaLabels);
00261         g_key_file_set_boolean(file, "LabelMode", "opencluster", lm & Renderer::OpenClusterLabels);
00262         g_key_file_set_boolean(file, "LabelMode", "i18n", lm & Renderer::I18nConstellationLabels);
00263         
00264         g_key_file_set_comment(file, "RenderFlags", NULL, "All Render Flag values must be true or false", NULL);
00265         g_key_file_set_comment(file, "OrbitMask", NULL, "All Orbit Mask values must be true or false", NULL);
00266         g_key_file_set_comment(file, "LabelMode", NULL, "All Label Mode values must be true or false", NULL);
00267         
00268         /* Write the settings to a file */
00269         outfile = fopen(fn, "w");
00270         
00271         if (outfile == NULL)
00272                 g_print("Error writing '%s'.\n", fn);
00273         
00274         fputs(g_key_file_to_data(file, NULL, NULL), outfile);
00275         
00276         g_free(fn);
00277 }


Generated on Sat Jan 14 22:32:02 2006 for Celestia by  doxygen 1.4.1