celestia/src/celestia/gtk/common.h

147 lines
3.3 KiB
C

/*
* Celestia GTK+ Front-End
* Copyright (C) 2005 Pat Suwalski <pat@suwalski.net>
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* $Id: common.h,v 1.5 2008-01-18 04:36:11 suwalski Exp $
*/
#ifndef GTK_COMMON_H
#define GTK_COMMON_H
#ifdef HAVE_CONFIG_H
#include <config.h>
#endif /* HAVE_CONFIG_H */
#include <glib/gi18n.h>
#include <gtk/gtk.h>
#ifdef GNOME
#include <gconf/gconf-client.h>
#endif /* GNOME */
#include <celengine/render.h>
#include <celengine/simulation.h>
#include <celestia/celestiacore.h>
typedef struct _AppData AppData;
struct _AppData {
/* Core Pointers */
CelestiaCore* core;
Renderer* renderer;
Simulation* simulation;
/* Important Widgets */
GtkWidget* mainWindow;
GtkWidget* mainMenu;
GtkWidget* glArea;
GtkWidget* optionDialog;
GtkWidget* contextMenu;
/* Action Groups */
GtkActionGroup* agMain;
GtkActionGroup* agRender;
GtkActionGroup* agOrbit;
GtkActionGroup* agLabel;
GtkActionGroup* agVerbosity;
GtkActionGroup* agStarStyle;
GtkActionGroup* agAmbient;
/* Settings */
#ifdef GNOME
GConfClient* client;
#else
GKeyFile* settingsFile;
#endif /* GNOME */
/* Ready to render? */
gboolean bReady;
/* Mouse motion tracking */
int lastX;
int lastY;
/* Starting URL */
char* startURL;
/* A few preferences not tracked by the core */
gboolean showLocalTime;
gboolean fullScreen;
};
/* Helper functions used throughout */
gint tzOffsetAtDate(astro::Date date);
void updateTimeZone(AppData* app, gboolean local);
gint buttonMake(GtkWidget *hbox, const char *txt, GtkSignalFunc func, gpointer data);
void makeRadioItems(const char* const *labels, GtkWidget *box, GtkSignalFunc sigFunc, GtkToggleButton **gads, gpointer data);
char* readFromFile(const char *fname);
/* Functions to get window properties regardless of window state */
int getWinWidth(AppData* app);
int getWinHeight(AppData* app);
int getWinX(AppData* app);
int getWinY(AppData* app);
/* Functions to apply preferences with sanity checks */
void setSaneAmbientLight(AppData* app, float value);
void setSaneVisualMagnitude(AppData* app, float value);
void setSaneGalaxyLightGain(float value);
void setSaneDistanceLimit(AppData* app, int value);
void setSaneVerbosity(AppData* app, int value);
void setSaneStarStyle(AppData* app, Renderer::StarStyle value);
void setSaneTextureResolution(AppData* app, int value);
void setSaneAltSurface(AppData* app, char* value);
void setSaneWinSize(AppData* app, int x, int y);
void setSaneWinPosition(AppData* app, int x, int y);
void setDefaultRenderFlags(AppData* app);
/* Constants used throughout */
const char * const monthOptions[] =
{
N_("January"),
N_("February"),
N_("March"),
N_("April"),
N_("May"),
N_("June"),
N_("July"),
N_("August"),
N_("September"),
N_("October"),
N_("November"),
N_("December"),
NULL
};
static const float amLevels[] =
{
0.0,
0.1,
0.25
};
static const int resolutions[] =
{
0, /* Must start with 0 */
640,
800,
1024,
1152,
1280,
1400,
1600,
-1 /* Must end with -1 */
};
/* This is the spacing used for widgets throughout the program */
#define CELSPACING 8
#endif /* GTK_COMMON_H */