/* help.c
* geg, a GTK+ Equation Grapher
* David Bryant 1998
*/
#ifdef HAVE_CONFIG_H
#include <config.h>
#endif /* HAVE_CONFIG_H */
#include "help.h"
/* locally global data */
static gchar *help_text =
"Mouse Buttons:\n" \
" Left Zoom Selection\n" \
" Middle Solve Function Intercepts\n" \
" Right Solve Axis Intercepts\n" \
"\n" \
"The following functions are recognised:\n" \
" sin (Sine)\n" \
" cos (Cosine)\n" \
" tan (Tangent)\n" \
" asin (Arc-Sine)\n" \
" acos (Arc-Cosine)\n" \
" atan (Arc-Tan)\n" \
" sinc (Sinc)\n" \
" sinh (Hyperbolic Sine)\n" \
" cosh (Hyperbolic Cosine)\n" \
" tanh (Hyperbolic Tangent)\n" \
" log (log base 10)\n" \
" ln (Natural Log, Log base e)\n" \
" sqrt (Square Root)\n" \
" cbrt (Cube Root)\n" \
" u (Unit Step)\n" \
" abs (Absolute Value)\n" \
"\n" \
"The following constants are recognised:\n" \
" pi (3.141592654....)\n" \
" e (2.718281828....)\n" \
"\n" \
"The following operators are recognised:\n" \
" + (Add)\n" \
" - (Subtract)\n" \
" * (Multiply)\n" \
" / (Divide)\n" \
" ^ (Raise to the Power)\n" \
"\n" \
"The following miscellaneous symbols are recognised:\n" \
" ( (Left Bracket)\n" \
" ) (Right Bracket)\n" \
" [ (Left Square Bracket)\n" \
" ] (Right Square Bracket)\n" \
" { (Left Curly Bracket)\n" \
" } (Right Curly Bracket)\n" \
" x (Variable Parameter)\n" \
"\n" \
"The Extended Backus Naur Notation (EBNF used in geg is:\n" \
" <expression> ::= [ + | - ] <term> { + | - <term> }\n" \
" <term> ::= <factor> { * | / | ^ <factor> }\n" \
" <factor> ::= <number> | <function> | (<expression>)\n" \
" <number> ::= <float> | x\n" \
" <function> ::= <function_name>(<expression>)\n";
static GtkWidget *wi = NULL;
static gint delete_event(GtkWidget *widget, GdkEvent *event, gpointer data);
static void ok_event(GtkWidget *widget, gpointer data);
static void
ok_event(GtkWidget *widget, gpointer data)
{
gtk_widget_destroy(wi);
wi = NULL;
}
static gint
delete_event(GtkWidget *widget, GdkEvent *event, gpointer data)
{
gtk_widget_destroy(wi);
wi = NULL;
return(TRUE);
}
void
help_event(GtkWidget *widget, gpointer data)
{
static GdkFont *font = NULL;
GtkWidget *bu, *fr, *hb, *te, *sb;
if(wi && wi->window) {
gtk_widget_map(wi);
gdk_window_raise(wi->window);
return;
}
if(!font)
font = gdk_font_load("fixed");
g_assert(font != NULL);
wi = gtk_dialog_new();
gtk_signal_connect(GTK_OBJECT(wi), "delete_event",
GTK_SIGNAL_FUNC(delete_event), NULL);
gtk_window_set_wmclass(GTK_WINDOW(wi), "help", "Geg");
gtk_window_set_title(GTK_WINDOW(wi), "Help");
gtk_window_set_policy(GTK_WINDOW(wi), TRUE, TRUE, TRUE);
gtk_window_position(GTK_WINDOW(wi), GTK_WIN_POS_NONE);
gtk_container_border_width(GTK_CONTAINER(GTK_DIALOG(wi)->vbox), 5);
fr = gtk_frame_new("Syntax information:");
gtk_box_pack_start(GTK_BOX(GTK_DIALOG(wi)->vbox), fr, TRUE, TRUE, 0);
gtk_widget_show(fr);
hb = gtk_hbox_new(FALSE, 0);
gtk_container_add(GTK_CONTAINER(fr), hb);
gtk_widget_show(hb);
te = gtk_text_new(NULL, NULL);
gtk_widget_set_usize(te, 65 * gdk_char_width(font, ' '), 400);
gtk_text_set_word_wrap(GTK_TEXT(te), FALSE);
gtk_box_pack_start(GTK_BOX(hb), te, TRUE, TRUE, 0);
gtk_widget_show(te);
sb = gtk_vscrollbar_new(GTK_TEXT(te)->vadj);
gtk_box_pack_start(GTK_BOX(hb), sb, FALSE, FALSE, 0);
gtk_widget_show(sb);
bu = gtk_button_new_with_label("Ok");
GTK_WIDGET_SET_FLAGS(bu, GTK_CAN_DEFAULT);
gtk_box_pack_start(GTK_BOX(GTK_DIALOG(wi)->action_area), bu, TRUE, TRUE, 0);
gtk_signal_connect(GTK_OBJECT(bu), "clicked",
GTK_SIGNAL_FUNC(ok_event), NULL);
gtk_widget_grab_default(bu);
gtk_widget_show(bu);
gtk_widget_show(wi);
gtk_text_insert(GTK_TEXT(te), font, NULL, NULL, help_text, strlen(help_text));
}
syntax highlighted by Code2HTML, v. 0.9.1