/* NIGHTFALL Light Curve Synthesis Program */
/* Copyright (C) 1999 Rainer Wichmann */
/* */
/* 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. */
/* */
/* This program is distributed in the hope that it will be useful, */
/* but WITHOUT ANY WARRANTY; without even the implied warranty of */
/* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the */
/* GNU General Public License for more details. */
/* */
/* You should have received a copy of the GNU General Public License */
/* along with this program; if not, write to the Free Software */
/* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */
/* ANSI C forbids an empty source file, so put this outside */
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "Light.h"
#ifdef HAVE_GNOME
static GtkWidget *propbox = NULL; /* preferences window */
static int TmpPromptOnExit; /* temp store */
static int TmpRememberPosition; /* temp store */
static int TmpHaveTooltips; /* temp store */
extern int TG_P1spot, TG_P2spot;
extern int TG_S1spot, TG_S2spot;
extern int SpotActive[4];
extern int FitSpotS[16];
extern SpotLight SpotStore[2][2];
/******************************************************************
@package nightfall
@author Rainer Wichmann
@version 1.0
@short Callback for exit confirmation
@param (GtkWidget) *w Discarded
@param (gint) pagenum Notebook page
@param (gpointer) data Discarded
@return (void)
@heading Gnome
*******************************************************************/
static void promptonexit_cb( GtkWidget *widget, gpointer data)
{
TmpPromptOnExit = GTK_TOGGLE_BUTTON(widget)->active;
gnome_property_box_changed(GNOME_PROPERTY_BOX(propbox));
return;
}
/******************************************************************
@package nightfall
@author Rainer Wichmann
@version 1.0
@short Callback for exit confirmation
@param (GtkWidget) *w Discarded
@param (gint) pagenum Notebook page
@param (gpointer) data Discarded
@return (void)
@heading Gnome
*******************************************************************/
static void havetooltips_cb( GtkWidget *widget, gpointer data)
{
TmpHaveTooltips = GTK_TOGGLE_BUTTON(widget)->active;
gnome_property_box_changed(GNOME_PROPERTY_BOX(propbox));
return;
}
/******************************************************************
@package nightfall
@author Rainer Wichmann
@version 1.0
@short Callback for exit confirmation
@param (GtkWidget) *w Discarded
@param (gint) pagenum Notebook page
@param (gpointer) data Discarded
@return (void)
@heading Gnome
*******************************************************************/
static void rememberpos_cb( GtkWidget *widget, gpointer data)
{
TmpRememberPosition = GTK_TOGGLE_BUTTON(widget)->active;
gnome_property_box_changed(GNOME_PROPERTY_BOX(propbox));
return;
}
/******************************************************************
@package nightfall
@author Rainer Wichmann
@version 1.0
@short Callback for preferences box destroy
@param (GtkWidget) *w Discarded
@param (gint) pagenum Notebook page
@param (gpointer) data Discarded
@return (void)
@heading Gnome
*******************************************************************/
static void destroy_cb( GtkWidget *w, gpointer data)
{
gtk_widget_destroy (propbox);
propbox = NULL;
return;
}
/******************************************************************
@package nightfall
@author Rainer Wichmann
@version 1.0
@short Callback for help
@param (GtkWidget) *w Discarded
@param (gpointer) data Discarded
@return (void)
@heading Gnome
*******************************************************************/
static void help_cb( GtkWidget *w, gpointer data)
{
GtkWidget *woosh;
woosh = gnome_message_box_new(_("Set your preferences"),
GNOME_MESSAGE_BOX_INFO,
GNOME_STOCK_BUTTON_OK, NULL);
gnome_dialog_set_close(GNOME_DIALOG(woosh), TRUE);
gtk_window_set_modal(GTK_WINDOW(woosh), TRUE);
gtk_widget_show(woosh);
return;
}
/******************************************************************
@package nightfall
@author Rainer Wichmann
@version 1.0
@short Callback for apply config changes
@param (GtkWidget) *w Discarded
@param (gint) pagenum Notebook page
@param (gpointer) data Discarded
@return (void)
@heading Gnome
*******************************************************************/
static void apply_cb( GtkWidget *w, gint pagenum, gpointer data)
{
Flags.GN_rempos = TmpRememberPosition;
Flags.GN_exitconfirm = TmpPromptOnExit;
Flags.GN_tooltips = TmpHaveTooltips;
/* now write these values back to the config */
gnome_config_push_prefix ("nightfall/");
gnome_config_set_int("Options/PromptOnQuit", Flags.GN_exitconfirm);
gnome_config_set_int("Options/RememberPosition", Flags.GN_rempos);
gnome_config_set_int("Options/HaveTooltips", Flags.GN_tooltips);
gnome_config_sync();
gnome_config_pop_prefix();
if (! Flags.GN_tooltips)
gtk_tooltips_disable( tooltips );
else
gtk_tooltips_enable( tooltips );
return;
}
/******************************************************************
@package nightfall
@author Rainer Wichmann (rwichman@lsw.uni-heidelberg.de)
@version 1.0
@short About
@param (void)
@return (void)
@heading Graphical User Interface
*******************************************************************/
void gnome_help_cb ()
{
GError *error = NULL;
gnome_help_display("nightfall", NULL, &error);
if (error) {
GtkWidget *dialog;
dialog = gtk_message_dialog_new_with_markup (NULL, GTK_DIALOG_MODAL,
GTK_MESSAGE_ERROR, GTK_BUTTONS_OK,
"<span weight=\"bold\" size=\"larger\">%s</span>\n\n%s",
_("Could not display help"),
error->message);
g_signal_connect (G_OBJECT (dialog), "response",
G_CALLBACK (gtk_widget_destroy),
NULL);
gtk_window_set_resizable (GTK_WINDOW (dialog), FALSE);
gtk_widget_show (dialog);
g_error_free (error);
}
}
/******************************************************************
@package nightfall
@author Rainer Wichmann
@version 1.0
@short Preferences dialog
@param (GtkWidget) *w Discarded
@param (gint) pagenum Notebook page
@param (gpointer) data Discarded
@return (void)
@heading Gnome
*******************************************************************/
void show_properties_dialog() {
GtkWidget *cpage;
GtkWidget *hbox;
GtkWidget *chkbox;
GtkWidget *label;
if(propbox) return;
/* Copy current setting into temporary */
TmpRememberPosition = Flags.GN_rempos;
TmpPromptOnExit = Flags.GN_exitconfirm;
TmpHaveTooltips = Flags.GN_tooltips;
propbox = gnome_property_box_new();
gtk_window_set_modal(GTK_WINDOW(propbox), TRUE);
gtk_window_set_title(GTK_WINDOW(&GNOME_PROPERTY_BOX(propbox)->dialog.window),
_("Nightfall Preferences"));
cpage = gtk_vbox_new(FALSE, 0);
gtk_container_set_border_width(GTK_CONTAINER(cpage), GNOME_PAD_SMALL);
hbox = gtk_hbox_new(TRUE, 0);
gtk_box_pack_start(GTK_BOX(cpage), hbox, FALSE, TRUE, GNOME_PAD_SMALL);
chkbox = gtk_check_button_new_with_label(_("Remember Position"));
GTK_TOGGLE_BUTTON(chkbox)->active = TmpRememberPosition;
gtk_signal_connect(GTK_OBJECT(chkbox), "clicked",
(GtkSignalFunc)rememberpos_cb, NULL);
gtk_box_pack_start(GTK_BOX(hbox), chkbox, TRUE, TRUE, GNOME_PAD_SMALL);
gtk_widget_show (chkbox);
gtk_widget_show(hbox);
hbox = gtk_hbox_new(TRUE, 0);
gtk_box_pack_start(GTK_BOX(cpage), hbox, FALSE, TRUE, GNOME_PAD_SMALL);
chkbox = gtk_check_button_new_with_label(_("Prompt On Exit"));
GTK_TOGGLE_BUTTON(chkbox)->active = TmpPromptOnExit;
gtk_signal_connect(GTK_OBJECT(chkbox), "clicked",
(GtkSignalFunc)promptonexit_cb, NULL);
gtk_box_pack_start(GTK_BOX(hbox), chkbox, TRUE, TRUE, GNOME_PAD_SMALL);
gtk_widget_show (chkbox);
gtk_widget_show(hbox);
hbox = gtk_hbox_new(TRUE, 0);
gtk_box_pack_start(GTK_BOX(cpage), hbox, FALSE, TRUE, GNOME_PAD_SMALL);
chkbox = gtk_check_button_new_with_label(_("Enable Tooltips"));
GTK_TOGGLE_BUTTON(chkbox)->active = TmpHaveTooltips;
gtk_signal_connect(GTK_OBJECT(chkbox), "clicked",
(GtkSignalFunc)havetooltips_cb, NULL);
gtk_box_pack_start(GTK_BOX(hbox), chkbox, TRUE, TRUE, GNOME_PAD_SMALL);
gtk_widget_show (chkbox);
gtk_widget_show(hbox);
gtk_widget_show(cpage);
label = gtk_label_new(_("Configuration"));
gtk_notebook_append_page(GTK_NOTEBOOK(GNOME_PROPERTY_BOX(propbox)->notebook),
cpage, label);
gtk_signal_connect (GTK_OBJECT (propbox), "destroy",
GTK_SIGNAL_FUNC (destroy_cb), NULL);
gtk_signal_connect (GTK_OBJECT (propbox), "help",
GTK_SIGNAL_FUNC (help_cb), NULL);
gtk_signal_connect (GTK_OBJECT (propbox), "apply",
GTK_SIGNAL_FUNC (apply_cb), NULL);
gtk_widget_show(propbox);
}
/******************************************************************
@package nightfall
@author ? ripped from Gnome website
@version 1.0
@short Exit
@param (GnomeClient) *client
@param (gpointer) client_data
@return (gint) Exit status
@heading Gnome
*******************************************************************/
gint
die (GnomeClient *client, gpointer client_data)
{
#ifdef _WITH_GNUPLOT
if (Flags.plotOpened == ON)
{
Flags.plotOpened = OFF;
cpgend();
}
#endif
NF_Mpi_call(NF_TAG_END);
MPI_Finalize();
gtk_exit (0);
return FALSE;
}
/******************************************************************
@package nightfall
@author ? ripped from Gnome website
@version 1.0
@short Exit
@param (GnomeClient) *client
@param (gint) phase
@param (GnomeRestartStyle) restart_style
@param (gint) shutdown
@param (GnomeInteractStyle) interact_style
@param (gint) fast
@param (gpointer) client_data
@return (gint) Exit status
@heading Gnome
*******************************************************************/
gint
save_yourself (GnomeClient *client,
gint phase,
GnomeSaveStyle save_style,
gint shutdown,
GnomeInteractStyle interact_style,
gint fast,
gpointer client_data)
{
gchar *discard_argv[] = {"rm", "-r", NULL, NULL };
gchar *argv[3];
gint x, y, w, h, lo;
gint dataIndex = 0;
FileType *dataFile = FileList;
char path[256];
#if 0
argv[0] = program_invocation_name;
#else
argv[0] = g_get_prgname();
#endif
argv[1] = "-U";
argv[2] = NULL;
gdk_window_get_geometry (top_window->window, &x, &y, &w, &h, NULL);
/* Save the state using gnome-config stuff.
*/
gnome_config_push_prefix (gnome_client_get_config_prefix (client));
gnome_config_set_int ("Geometry/x", x);
gnome_config_set_int ("Geometry/y", y);
gnome_config_set_int ("Geometry/w", w);
gnome_config_set_int ("Geometry/h", h);
gnome_config_set_int("Options/PromptOnQuit", Flags.GN_exitconfirm);
gnome_config_set_int("Options/RememberPosition", Flags.GN_rempos);
gnome_config_set_int("Options/HaveTooltips", Flags.GN_tooltips);
while ((dataFile != NULL) && (dataIndex < 12)) {
snprintf(path, 255, "Data/File%02d", dataIndex);
gnome_config_set_string(path, dataFile->DataFile );
dataFile = dataFile->nextFile;
++dataIndex;
}
if (strlen(Flags.ConfFile) > 2) {
snprintf(path, 255, "Configuration/File");
gnome_config_set_string(path, Flags.ConfFile);
}
gnome_config_set_int("Flags/fill", Flags.fill);
gnome_config_set_int("Flags/elliptic", Flags.elliptic);
gnome_config_set_int("Flags/asynchron1", Flags.asynchron1);
gnome_config_set_int("Flags/asynchron2", Flags.asynchron2);
gnome_config_set_int("Flags/animate", Flags.animate);
gnome_config_set_int("Flags/plot", Flags.plot);
gnome_config_set_int("Flags/eps", Flags.eps);
gnome_config_set_int("Flags/lineprofile", Flags.lineprofile);
gnome_config_set_int("Flags/blackbody", Flags.blackbody);
gnome_config_set_int("Flags/fractional", Flags.fractional);
gnome_config_set_int("Flags/limb", Flags.limb);
gnome_config_set_int("Flags/reflect", Flags.reflect);
gnome_config_set_int("Flags/anneal", Flags.anneal);
gnome_config_set_int("Flags/PlotBand", Flags.PlotBand);
gnome_config_set_float("Flags/STol", Flags.SimplexTol);
gnome_config_set_float("Flags/Step0", Flags.Step[0]);
gnome_config_set_float("Flags/Step1", Flags.Step[1]);
for (lo = 0; lo < 12; ++lo)
{
snprintf(path, 255, "Flags/Dbg%02d", lo);
gnome_config_set_int (path, Flags.debug[lo] );
}
gnome_config_set_int("Flags/reflectstore", TG_reflectstore);
gnome_config_set_int("Flags/graphstore", TG_graphstore);
gnome_config_set_int("Flags/visualstore", TG_visualstore);
gnome_config_set_int("Misc/NoteBookPage",
gtk_notebook_current_page( GTK_NOTEBOOK(notebook)) );
gnome_config_set_float("Misc/PhaseSteps", PhaseSteps);
gnome_config_set_string("Orbit/Name", Orbit.Name);
gnome_config_set_float("Orbit/LambdaZero", Orbit.LambdaZero);
gnome_config_set_float("Orbit/ThirdU", Orbit.Third[Umag]);
gnome_config_set_float("Orbit/ThirdB", Orbit.Third[Bmag]);
gnome_config_set_float("Orbit/ThirdV", Orbit.Third[Vmag]);
gnome_config_set_float("Orbit/ThirdR", Orbit.Third[Rmag]);
gnome_config_set_float("Orbit/ThirdI", Orbit.Third[Imag]);
gnome_config_set_float("Orbit/ThirdJ", Orbit.Third[Jmag]);
gnome_config_set_float("Orbit/ThirdH", Orbit.Third[Hmag]);
gnome_config_set_float("Orbit/ThirdK", Orbit.Third[Kmag]);
gnome_config_set_float("Orbit/Thirdu", Orbit.Third[umag]);
gnome_config_set_float("Orbit/Thirdv", Orbit.Third[vmag]);
gnome_config_set_float("Orbit/Thirdb", Orbit.Third[bmag]);
gnome_config_set_float("Orbit/Thirdy", Orbit.Third[ymag]);
gnome_config_set_float("Orbit/Period", Orbit.TruePeriod);
gnome_config_set_float("Orbit/Mass", Orbit.TrueMass);
gnome_config_set_float("Orbit/Distance", Orbit.TrueDistance);
gnome_config_set_float("Orbit/Excentr", Orbit.Excentricity);
gnome_config_set_float("Orbit/Omega", Orbit.Omega);
gnome_config_set_float("Orbit/Inclination",Orbit.Inclination);
gnome_config_set_float("Binary/FR1", Binary[Primary].Fratio);
gnome_config_set_float("Binary/FR2", Binary[Secondary].Fratio);
gnome_config_set_float("Binary/MQ1", Binary[Primary].Mq);
gnome_config_set_float("Binary/MQ2", Binary[Secondary].Mq);
gnome_config_set_float("Binary/RocheFill1",Binary[Primary].RocheFill);
gnome_config_set_float("Binary/RocheFill2",Binary[Secondary].RocheFill);
gnome_config_set_float("Binary/Temp1", Binary[Primary].Temperature);
gnome_config_set_float("Binary/Temp2", Binary[Secondary].Temperature);
gnome_config_set_float("Binary/LogG1", Binary[Primary].log_g);
gnome_config_set_float("Binary/LogG2", Binary[Secondary].log_g);
/* the spots ...
*/
gnome_config_set_int ("Flags/Spots1", Flags.Spots1);
gnome_config_set_int ("Flags/Spots2", Flags.Spots2);
gnome_config_set_int ("Flags/TGP1", TG_P1spot);
gnome_config_set_int ("Flags/TGP2", TG_P2spot);
gnome_config_set_int ("Flags/TGS1", TG_S1spot);
gnome_config_set_int ("Flags/TGS2", TG_S2spot);
gnome_config_set_float("SpotP1/logitude", SpotStore[Primary][0].longitude);
gnome_config_set_float("SpotP1/latitude", SpotStore[Primary][0].latitude);
gnome_config_set_float("SpotP1/radius", SpotStore[Primary][0].radius);
gnome_config_set_float("SpotP1/dimfactor", SpotStore[Primary][0].dimfactor);
gnome_config_set_float("SpotP2/logitude", SpotStore[Primary][1].longitude);
gnome_config_set_float("SpotP2/latitude", SpotStore[Primary][1].latitude);
gnome_config_set_float("SpotP2/radius", SpotStore[Primary][1].radius);
gnome_config_set_float("SpotP2/dimfactor", SpotStore[Primary][1].dimfactor);
gnome_config_set_float("SpotS1/logitude", SpotStore[Secondary][0].longitude);
gnome_config_set_float("SpotS1/latitude", SpotStore[Secondary][0].latitude);
gnome_config_set_float("SpotS1/radius", SpotStore[Secondary][0].radius);
gnome_config_set_float("SpotS1/dimfactor", SpotStore[Secondary][0].dimfactor);
gnome_config_set_float("SpotS2/logitude", SpotStore[Secondary][1].longitude);
gnome_config_set_float("SpotS2/latitude", SpotStore[Secondary][1].latitude);
gnome_config_set_float("SpotS2/radius", SpotStore[Secondary][1].radius);
gnome_config_set_float("SpotS2/dimfactor", SpotStore[Secondary][1].dimfactor);
for (lo = 0; lo < 4; ++lo)
{
snprintf(path, 255, "SpotActive/%02d", lo);
gnome_config_set_int (path, SpotActive[lo] );
}
for (lo = 0; lo < 16; ++lo)
{
snprintf(path, 255, "SpotFit/%02d", lo);
gnome_config_set_int (path, FitSpotS[lo] );
}
for (lo = 0; lo < Flags.Spots1; ++lo)
{
snprintf(path, 255, "Spot_P%02d/longitude", lo);
gnome_config_set_float (path, Spot[Primary][lo].longitude );
snprintf(path, 255, "Spot_P%02d/latitude", lo);
gnome_config_set_float (path, Spot[Primary][lo].latitude );
snprintf(path, 255, "Spot_P%02d/radius", lo);
gnome_config_set_float (path, Spot[Primary][lo].radius );
snprintf(path, 255, "Spot_P%02d/dimfactor", lo);
gnome_config_set_float (path, Spot[Primary][lo].dimfactor );
}
for (lo = 0; lo < Flags.Spots2; ++lo)
{
snprintf(path, 255, "Spot_S%02d/longitude", lo);
gnome_config_set_float (path, Spot[Secondary][lo].longitude );
snprintf(path, 255, "Spot_S%02d/latitude", lo);
gnome_config_set_float (path, Spot[Secondary][lo].latitude );
snprintf(path, 255, "Spot_S%02d/radius", lo);
gnome_config_set_float (path, Spot[Secondary][lo].radius );
snprintf(path, 255, "Spot_S%02d/dimfactor", lo);
gnome_config_set_float (path, Spot[Secondary][lo].dimfactor );
}
/* fit flags
*/
for (lo = 0; lo < 64; ++lo)
{
snprintf(path, 255, "Simplex/%02d", lo);
gnome_config_set_int (path, Flags.simplex[lo] );
}
gnome_config_sync();
gnome_config_pop_prefix ();
discard_argv[2] = gnome_config_get_real_path
(gnome_client_get_config_prefix (client));
gnome_client_set_discard_command (client, 3, discard_argv);
gnome_client_set_clone_command (client, 2, argv);
gnome_client_set_restart_command (client, 2, argv);
return TRUE;
}
#endif
syntax highlighted by Code2HTML, v. 0.9.1