callbacks.c (gdcalc-2.20) | : | callbacks.c (gdcalc-3.0) | ||
---|---|---|---|---|
/* $Id: callbacks.c,v 1.11 2006/12/30 19:21:04 bhepple Exp $ */ | /* $Id: callbacks.c,v 1.11 2006/12/30 19:21:04 bhepple Exp $ */ | |||
#ifdef HAVE_CONFIG_H | #ifdef HAVE_CONFIG_H | |||
# include <config.h> | # include <config.h> | |||
#endif | #endif | |||
#include <gnome.h> | #include <gtk/gtk.h> | |||
#include <ctype.h> | #include <ctype.h> | |||
#include <sys/types.h> /* for wait */ | ||||
#include <sys/wait.h> /* for wait */ | ||||
#include <math.h> | ||||
#include "callbacks.h" | #include "callbacks.h" | |||
#include "interface.h" | ||||
#include "support.h" | ||||
#include "dcalc.h" | #include "dcalc.h" | |||
#include "main.h" | #include "main.h" | |||
#define _(x) x | ||||
void | void | |||
on_exit_activate (GtkMenuItem *menuitem, | on_exit_activate (GtkMenuItem *menuitem, | |||
gpointer user_data) | gpointer user_data) | |||
{ | { | |||
process(QUIT); | process(QUIT); | |||
} | } | |||
void | void | |||
on_edit_activate (GtkMenuItem *menuitem, | on_edit_activate (GtkMenuItem *menuitem, | |||
gpointer user_data) | gpointer user_data) | |||
skipping to change at line 55 | skipping to change at line 58 | |||
{ | { | |||
process(RADIAN); | process(RADIAN); | |||
} | } | |||
void | void | |||
on_scientific_mode_activate (GtkMenuItem *menuitem, | on_scientific_mode_activate (GtkMenuItem *menuitem, | |||
g pointer user_data) | g pointer user_data) | |||
{ | { | |||
process(SCI); | process(SCI); | |||
display_buttons(SCI); | display_buttons(SCI); | |||
dispregs(); | ||||
} | } | |||
void | void | |||
on_financial_mode_activate (GtkMenuItem *menuitem, | on_financial_mode_activate (GtkMenuItem *menuitem, | |||
gpointer user_data) | gpointer user_data) | |||
{ | { | |||
process(FIN); | process(FIN); | |||
display_buttons(FIN); | display_buttons(FIN); | |||
dispregs(); | ||||
} | } | |||
void | void | |||
on_statistics_mode_activate (GtkMenuItem *menuitem, | on_statistics_mode_activate (GtkMenuItem *menuitem, | |||
gpointer user_data) | gpointer user_data) | |||
{ | { | |||
process(STAT); | process(STAT); | |||
display_buttons(STAT); | display_buttons(STAT); | |||
dispregs(); | ||||
} | } | |||
void | void | |||
on_programming_mode_activate (GtkMenuItem *menuitem, | on_programming_mode_activate (GtkMenuItem *menuitem, | |||
gpointer user_data) | gpointer user_data) | |||
{ | { | |||
process(PROG); | process(PROG); | |||
display_buttons(PROG); | display_buttons(PROG); | |||
dispregs(); | ||||
} | } | |||
void | void | |||
on_convert_activate (GtkMenuItem *menuitem, | on_convert_activate (GtkMenuItem *menuitem, | |||
gpointer user_data) | gpointer user_data) | |||
{ | { | |||
} | } | |||
#define ENTRYSIZE 25 | #define ENTRYSIZE 25 | |||
/* structure to hold GUI settings: */ | ||||
struct assoc_s { | struct assoc_s { | |||
char *name; | char *name; | |||
char *value; | char *value; | |||
}; | }; | |||
typedef struct assoc_s *assoc; | typedef struct assoc_s *assoc; | |||
static assoc *assocList = NULL; | static assoc *assocList = NULL; | |||
static assoc *getNextNameValue(assoc *p, char *name, char *value) { | static assoc *getNextNameValue(assoc *p, char *name, char *value) { | |||
assoc *a = (assoc *) p; | assoc *a = (assoc *) p; | |||
if (a == NULL) | if (a == NULL) | |||
skipping to change at line 158 | skipping to change at line 166 | |||
void readGuiSettings(char *b) { | void readGuiSettings(char *b) { | |||
char *name, *value; | char *name, *value; | |||
name = b; | name = b; | |||
while (*b && !isspace(*b)) | while (*b && !isspace(*b)) | |||
b++; | b++; | |||
*b++ = 0; | *b++ = 0; | |||
if (*b) { | if (*b) { | |||
if (strcmp(name, "registers") == 0) { | if (strcmp(name, "registers") == 0) { | |||
registers = (GtkWidget *) (long) atoi(b); /* I know, it's | registers_popup = (GtkWidget *) (long) atoi(b); /* I know | |||
a clunker, but it works */ | , it's a clunker, but it works */ | |||
#ifdef RUNTIME_FONT_CHANGES_ARE_WORKING | ||||
} else if (strcmp(name, "numberfont") == 0) { | ||||
strcpy(calculatorFont, b); | ||||
fixFont(calculatorFont, main_window, "entry_X"); | ||||
fixFont(calculatorFont, main_window, "entry_Y"); | ||||
fixFont(calculatorFont, main_window, "entry_Z"); | ||||
fixFont(calculatorFont, main_window, "entry_T"); | ||||
fixFont(calculatorFont, main_window, "entry_L"); | ||||
} else if (strcmp(name, "buttonfont") == 0) { | ||||
strcpy(buttonFont, b); | ||||
setButtonFont(buttonFont); | ||||
} else if (strcmp(name, "plusminusfont") == 0) { | ||||
strcpy(plusMinusFont, b); | ||||
setPlusMinusFont(plusMinusFont); | ||||
#endif | ||||
} else { | } else { | |||
value = b; | value = b; | |||
saveNameString(name, value); | saveNameString(name, value); | |||
} | } | |||
} | } | |||
} | } | |||
void saveGuiSettings(FILE *f) { | void saveGuiSettings(FILE *f) { | |||
assoc *a = NULL; | assoc *a = NULL; | |||
char name[ENTRYSIZE], value[ENTRYSIZE]; | char name[ENTRYSIZE], value[ENTRYSIZE]; | |||
if (f) { | if (f) { | |||
while ((a = getNextNameValue(a, name, value)) != NULL) | while ((a = getNextNameValue(a, name, value)) != NULL) | |||
fprintf(f, "gui %s %s\n", name, value); | fprintf(f, "gui %s %s\n", name, value); | |||
fprintf(f, "gui registers %d\n", registers? 1: 0); | fprintf(f, "gui registers %d\n", registers_popup? 1: 0); | |||
#ifdef RUNTIME_FONT_CHANGES_ARE_WORKING | ||||
fprintf(f, "gui numberfont %s\n", calculatorFont); | ||||
fprintf(f, "gui buttonfont %s\n", buttonFont); | ||||
fprintf(f, "gui plusminusfont %s\n", plusMinusFont); | ||||
#endif | ||||
} | } | |||
} | } | |||
/* trim all white space from buf (for units) */ | ||||
static void trim_all_spaces(char const *s) { | ||||
char *d = (char *)s; | ||||
while (*s) { | ||||
if (!isspace(*s)) | ||||
*d++ = *s; | ||||
s++; | ||||
} | ||||
*d = 0; | ||||
} | ||||
static void convertX(char const *from, char const *to) { | ||||
#ifdef unix | ||||
int fd[2], pid; | ||||
#endif | ||||
if (mode == PROG) { | ||||
msg("No conversions in PROG mode"); | ||||
return; | ||||
} | ||||
trim_all_spaces(from); | ||||
trim_all_spaces(to); | ||||
stop_entering(); | ||||
#ifdef unix | ||||
if (pipe(fd) < 0) | ||||
msg("Can't open a pipe."); | ||||
else { | ||||
double oldX = xfReg; | ||||
char *argv[5]; | ||||
char fromarg[80]; | ||||
char toarg[80]; | ||||
BOOLEAN is_neg = FALSE; | ||||
if (oldX < 0.0) { | ||||
is_neg = TRUE; | ||||
oldX = -oldX; | ||||
} | ||||
sprintf(fromarg, "%f %s", oldX, from); | ||||
strcpy(toarg, to); | ||||
/* temperature special case - "non-linear" */ | ||||
if (strncmp(from, "deg", 3) == 0) { | ||||
is_neg = FALSE; | ||||
if (strcmp(from, "degcelsius") == 0) { | ||||
sprintf(fromarg, "tempC(%f)", xfReg); | ||||
} else if (strcmp(from, "degfahrenheit") == 0) { | ||||
sprintf(fromarg, "tempF(%f)", xfReg); | ||||
} else { | ||||
sprintf(fromarg, "tempK(%f)", xfReg); | ||||
} | ||||
if (strcmp(to, "degcelsius") == 0) { | ||||
strcpy(toarg, "tempC"); | ||||
} else if (strcmp(to, "degfahrenheit") == 0) { | ||||
strcpy(toarg, "tempF"); | ||||
} else { | ||||
strcpy(toarg, "tempK"); | ||||
} | ||||
} | ||||
argv[0] = "/usr/bin/units"; | ||||
argv[1] = "-o%.16g"; | ||||
argv[2] = fromarg; | ||||
argv[3] = toarg; | ||||
argv[4] = 0; | ||||
if ((pid = vfork()) == -1) { | ||||
msg("Fork failed."); | ||||
} else if (pid == 0) { /* child - put stdout on pipe */ | ||||
close(fd[0]); /* child does not need to read from pipe */ | ||||
close(1); /* set stdout to the pipe */ | ||||
if (dup(fd[1]) == -1) _exit(1); | ||||
close(fd[1]); | ||||
execvp(argv[0], argv); | ||||
_exit(1); /* abandon hope all ye who get here */ | ||||
} else { /* PARENT - read from pipe */ | ||||
FILE *p; | ||||
close(fd[1]); /* parent does not write to pipe */ | ||||
if ((p = fdopen(fd[0], "r")) == NULL) { | ||||
msg("Can't read from pipe"); | ||||
} else { | ||||
double newX; | ||||
int numRead = 0, status, bytesRead = 0; | ||||
char inbuf[80]; | ||||
while (fgets(inbuf, 80, p) != NULL) { | ||||
bytesRead += strlen(inbuf); | ||||
if (!numRead) { | ||||
if (strchr(inbuf, '*') == 0) | ||||
numRead = sscanf(inbuf, "%lf", &newX); | ||||
else | ||||
numRead = sscanf(inbuf, " * %lf", &newX); | ||||
} | ||||
} | ||||
wait(&status); | ||||
if (is_neg) | ||||
newX = -newX; | ||||
if (numRead == 1 && | ||||
WIFEXITED(status) && | ||||
WEXITSTATUS(status) == 0) { | ||||
double xf; | ||||
xf = popf(); | ||||
pushf(newX); | ||||
if (fabs(xf) < 0.0001) | ||||
sprintf(inbuf, "Conversion factor %s to %s", from, to); | ||||
else | ||||
sprintf(inbuf, "Converted %s to %s", from, to); | ||||
msg(inbuf); | ||||
dispnums(); | ||||
} else if (bytesRead) | ||||
/* Note: if you are tempted to catch units's error | ||||
message be aware that as of version 1.55 it | ||||
does not use stderr! */ | ||||
msg("Bad units"); | ||||
else | ||||
msg("Can't find the units program - please install it!"); | ||||
fclose(p); /* no need to close fd[1] too */ | ||||
} | ||||
} | ||||
} | ||||
#else | ||||
msg("Conversions not supported here"); | ||||
#endif | ||||
} | ||||
/* ref: https://stackoverflow.com/questions/16630528/trying-to-populate-a-gtkcom | ||||
bobox-with-model-in-c */ | ||||
static GtkComboBox *createCombo(char *combo_name, char table[][ENTRYSIZE], char | ||||
*item) { | ||||
GtkListStore *liststore; | ||||
GtkComboBox *retval; | ||||
int index, i; | ||||
GtkCellRenderer *column; | ||||
liststore = gtk_list_store_new(1, G_TYPE_STRING); | ||||
retval = (GtkComboBox *) get_widget("createCombo", combo_name); | ||||
index = 1; | ||||
for (i = 0; *table[i] != 0; i++) { | ||||
if (strcmp(item, table[i]) == 0) | ||||
index = i; | ||||
gtk_list_store_insert_with_values(liststore, NULL, -1, | ||||
0, table[i], | ||||
-1); | ||||
} | ||||
gtk_combo_box_set_model(retval, GTK_TREE_MODEL(liststore)); | ||||
g_object_unref(liststore); | ||||
column = gtk_cell_renderer_text_new(); | ||||
gtk_cell_layout_clear(GTK_CELL_LAYOUT(retval)); | ||||
gtk_cell_layout_pack_start(GTK_CELL_LAYOUT(retval), column, TRUE); | ||||
gtk_cell_layout_set_attributes(GTK_CELL_LAYOUT(retval), column, | ||||
"text", 0, | ||||
NULL); | ||||
gtk_combo_box_set_active(GTK_COMBO_BOX(retval), index); | ||||
return retval; | ||||
} | ||||
static int doConvert(char table[][ENTRYSIZE], | static int doConvert(char table[][ENTRYSIZE], | |||
char *title, | char *title, | |||
char *pFrom, | char *pFrom, | |||
char *pTo) { | char *pTo) { | |||
GtkWidget *convert_dialog; | GtkWidget *convert_dialog; | |||
GtkLabel *convert_label; | GtkLabel *convert_label; | |||
GList *combo_items = NULL; | GtkComboBox *from_combo, *to_combo; | |||
GtkCombo *from_combo, *to_combo; | int reply, retval = 1; | |||
int i, reply, retval = 1; | ||||
const char *from, *to; | const char *from, *to; | |||
msg(""); | msg(""); | |||
convert_dialog = create_convert(); | convert_dialog = get_widget("doConvert", "convert_dialog"); | |||
if (strlen(pFrom)) | /* "from" combo box */ | |||
combo_items = g_list_append (combo_items, pFrom); | from_combo = createCombo("convert_from_combo", table, pFrom); | |||
for (i = 0; *table[i] != 0; i++) | ||||
combo_items = g_list_append (combo_items, table[i]); | ||||
from_combo = gtk_object_get_data(GTK_OBJECT (convert_dialog), "convert_fr | ||||
om_combo"); | ||||
gtk_combo_set_popdown_strings (GTK_COMBO (from_combo), combo_items); | ||||
g_list_free(combo_items); | ||||
combo_items = NULL; | ||||
if (strlen(pTo)) | ||||
combo_items = g_list_append (combo_items, pTo); | ||||
for (i = 0; *table[i] != 0; i++) | ||||
combo_items = g_list_append (combo_items, table[i]); | ||||
to_combo = gtk_object_get_data(GTK_OBJECT (convert_dialog), "convert_to | ||||
_combo"); | ||||
gtk_combo_set_popdown_strings (GTK_COMBO (to_combo), combo_items); | ||||
g_list_free(combo_items); | ||||
combo_items = NULL; | ||||
convert_label = gtk_object_get_data(GTK_OBJECT (convert_dialog), "convert | /* "to" combo box */ | |||
_label"); | to_combo = createCombo("convert_to_combo", table, pTo); | |||
convert_label = (GtkLabel *) get_widget("doConvert", "convert_label"); | ||||
gtk_label_set_text(convert_label, title); | gtk_label_set_text(convert_label, title); | |||
reply = gtk_dialog_run(GTK_DIALOG(convert_dialog)); | reply = gtk_dialog_run(GTK_DIALOG(convert_dialog)); | |||
from = gtk_entry_get_text(GTK_ENTRY(GTK_COMBO(from_combo)->entry)); | from = table[gtk_combo_box_get_active(from_combo)]; | |||
to = gtk_entry_get_text(GTK_ENTRY(GTK_COMBO(to_combo)->entry)); | to = table[gtk_combo_box_get_active(to_combo)]; | |||
strcpy(pFrom, from); | if (reply == 2) | |||
strcpy(pTo, to); | retval = 0; /* CANCEL */ | |||
if (reply == 0) | else { | |||
convertX(from, to); | strcpy(pFrom, from); | |||
else if (reply == 1) | strcpy(pTo, to); | |||
convertX(to, from); | if (reply == 0) | |||
else | convertX(from, to); | |||
retval = 0; | else /* INVERSE */ | |||
convertX(to, from); | ||||
} | ||||
gtk_widget_destroy(convert_dialog); | gtk_widget_hide(convert_dialog); | |||
return retval; | return retval; | |||
} | } | |||
void | void | |||
on_length_activate (GtkMenuItem *menuitem, | on_length_activate (GtkMenuItem *menuitem, | |||
gpointer user_data) | gpointer user_data) | |||
{ | { | |||
char table[][ENTRYSIZE] = { | char table[][ENTRYSIZE] = { | |||
"mile", | "mile", | |||
"nautical mile", | "nautical mile", | |||
skipping to change at line 611 | skipping to change at line 751 | |||
_exit(1); /* abandon hope all ye who get here */ | _exit(1); /* abandon hope all ye who get here */ | |||
} | } | |||
} | } | |||
void | void | |||
on_about_activate (GtkMenuItem *menuitem, | on_about_activate (GtkMenuItem *menuitem, | |||
gpointer user_data) | gpointer user_data) | |||
{ | { | |||
GtkWidget *about; | GtkWidget *about; | |||
about = create_about (); | about = get_widget("on_about_activate", "about_dialog"); | |||
gtk_dialog_run(GTK_DIALOG(about)); | gtk_dialog_run(GTK_DIALOG(about)); | |||
gtk_widget_destroy(about); | gtk_widget_hide(about); | |||
} | } | |||
#define LCLICK(x,y) void on_L ## x ## _ ## y ## _clicked \ | #define LCLICK(x,y) void on_L ## x ## _ ## y ## _clicked \ | |||
(GtkButton *button, gpointer user_data) \ | (GtkButton *button, gpointer user_data) \ | |||
{ process(button_command(l_buttons, x, y)); } | { process(button_command(l_buttons, x, y)); } | |||
LCLICK(0,0) | LCLICK(0,0) | |||
LCLICK(0,1) | LCLICK(0,1) | |||
LCLICK(0,2) | LCLICK(0,2) | |||
LCLICK(0,3) | LCLICK(0,3) | |||
skipping to change at line 654 | skipping to change at line 794 | |||
LCLICK(2,6) | LCLICK(2,6) | |||
LCLICK(2,7) | LCLICK(2,7) | |||
void | void | |||
on_R0_0_clicked (GtkButton *button, | on_R0_0_clicked (GtkButton *button, | |||
gpointer user_data) | gpointer user_data) | |||
{ | { | |||
int b = button_command(r_buttons, 0, 0); | int b = button_command(r_buttons, 0, 0); | |||
GtkWidget *w; | GtkWidget *w; | |||
w = gtk_object_get_data(GTK_OBJECT(main_window), | w = get_widget("display_buttons", | |||
(b==SCI)? "scientific_mod e": | (b==SCI)? "scientific_mod e": | |||
(b==FIN)? "financial_mode ": | (b==FIN)? "financial_mode ": | |||
(b==STAT)? "statistics_mo de": | (b==STAT)? "statistics_mo de": | |||
"programming_mode"); | "programming_mode"); | |||
if (w) | if (w) | |||
gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(w), 1); | gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(w), 1); | |||
else | else | |||
fprintf(stderr, "gdcalc: Can't find main mode item in menu\n"); | fprintf(stderr, "gdcalc: Can't find main mode item in menu\n"); | |||
} | } | |||
void | void | |||
on_R0_1_clicked (GtkButton *button, | on_R0_1_clicked (GtkButton *button, | |||
gpointer user_data) | gpointer user_data) | |||
{ | { | |||
int b = button_command(r_buttons, 0, 1); | int b = button_command(r_buttons, 0, 1); | |||
GtkWidget *w; | GtkWidget *w; | |||
w = gtk_object_get_data(GTK_OBJECT(main_window), | w = get_widget("display_buttons", | |||
(b==SCI)? "scientific_mod e": | (b==SCI)? "scientific_mod e": | |||
(b==FIN)? "financial_mode ": | (b==FIN)? "financial_mode ": | |||
(b==STAT)? "statistics_mo de": | (b==STAT)? "statistics_mo de": | |||
"programming_mode"); | "programming_mode"); | |||
if (w) | if (w) | |||
gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(w), 1); | gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(w), 1); | |||
else | else | |||
fprintf(stderr, "gdcalc: Can't find main mode item in menu\n"); | fprintf(stderr, "gdcalc: Can't find main mode item in menu\n"); | |||
} | } | |||
void | void | |||
on_R0_2_clicked (GtkButton *button, | on_R0_2_clicked (GtkButton *button, | |||
gpointer user_data) | gpointer user_data) | |||
{ | { | |||
int b = button_command(r_buttons, 0, 2); | int b = button_command(r_buttons, 0, 2); | |||
GtkWidget *w; | GtkWidget *w; | |||
w = gtk_object_get_data(GTK_OBJECT(main_window), | w = get_widget("display_buttons", | |||
(b==SCI)? "scientific_mod e": | (b==SCI)? "scientific_mod e": | |||
(b==FIN)? "financial_mode ": | (b==FIN)? "financial_mode ": | |||
(b==STAT)? "statistics_mo de": | (b==STAT)? "statistics_mo de": | |||
"programming_mode"); | "programming_mode"); | |||
if (w) | if (w) | |||
gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(w), 1); | gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(w), 1); | |||
else | else | |||
fprintf(stderr, "gdcalc: Can't find main mode item in menu\n"); | fprintf(stderr, "gdcalc: Can't find main mode item in menu\n"); | |||
} | } | |||
skipping to change at line 799 | skipping to change at line 939 | |||
append_x("+"); | append_x("+"); | |||
} else | } else | |||
process(PLUS); | process(PLUS); | |||
} | } | |||
void | void | |||
on_Enter_clicked (GtkButton *button, | on_Enter_clicked (GtkButton *button, | |||
gpointer user_data) | gpointer user_data) | |||
{ | { | |||
process(ENTER); | process(ENTER); | |||
} | } | |||
void | void | |||
on_LeftBrace_clicked (GtkButton *button, | on_LeftBrace_clicked (GtkButton *button, | |||
gpointer user_data) | gpointer user_data) | |||
{ | { | |||
if (liftStack()) { | if (algebraic_mode) { | |||
set_x(""); | if (liftStack()) { | |||
} | set_x(""); | |||
append_x("("); | } | |||
append_x("("); | ||||
} | ||||
} | } | |||
void | void | |||
on_RightBrace_clicked (GtkButton *button, | on_RightBrace_clicked (GtkButton *button, | |||
gpointer user_data) | gpointer user_data) | |||
{ | { | |||
if (liftStack()) { | if (algebraic_mode) { | |||
set_x(""); | if (liftStack()) { | |||
} | set_x(""); | |||
append_x(")"); | } | |||
append_x(")"); | ||||
} | ||||
} | } | |||
void | void | |||
on_Equals_clicked (GtkButton *button, | on_Equals_clicked (GtkButton *button, | |||
gpointer user_data) | gpointer user_data) | |||
{ | { | |||
strcpy(last_eval, get_x()); | strcpy(last_eval, get_x()); | |||
if (mode == PROG) | if (mode == PROG) | |||
pop(); | pop(); | |||
else | else | |||
skipping to change at line 892 | skipping to change at line 1035 | |||
void | void | |||
on_dialog_cancel_clicked (GtkButton *button, | on_dialog_cancel_clicked (GtkButton *button, | |||
gpointer user_data) | gpointer user_data) | |||
{ | { | |||
} | } | |||
void | void | |||
on_mem_cancel_clicked (GtkButton *button, | on_mem_cancel_clicked (GtkButton *button, | |||
gpointer user_data) | gpointer user_data) | |||
{ | { | |||
printf("on_mem_cancel_clicked\n"); | ||||
} | ||||
static void mem_button(int i) { | ||||
if (registers_popup) { | ||||
GtkLabel *mem_label = GTK_LABEL(get_widget("toggle_registers", "mem_labe | ||||
l")); | ||||
gtk_label_set_text(mem_label, registers_label); | ||||
g_signal_emit_by_name(G_OBJECT(mem_dialog), "response"); | ||||
} else | ||||
gtk_widget_hide(mem_dialog); | ||||
mem_value = i; | ||||
} | } | |||
gboolean | gboolean | |||
on_mem0_button_release_event (GtkWidget *widget, | on_mem0_button_release_event (GtkWidget *widget, | |||
GdkEventButton *event, | GdkEventButton *event, | |||
gpointer user_data) | gpointer user_data) | |||
{ | { | |||
mem_value = 0; | mem_button(0); | |||
gtk_widget_destroy(mem_dialog); | ||||
return FALSE; | return FALSE; | |||
} | } | |||
gboolean | gboolean | |||
on_mem1_button_release_event (GtkWidget *widget, | on_mem1_button_release_event (GtkWidget *widget, | |||
GdkEventButton *event, | GdkEventButton *event, | |||
gpointer user_data) | gpointer user_data) | |||
{ | { | |||
mem_value = 1; | mem_button(1); | |||
gtk_widget_destroy(mem_dialog); | ||||
return FALSE; | return FALSE; | |||
} | } | |||
gboolean | gboolean | |||
on_mem2_button_release_event (GtkWidget *widget, | on_mem2_button_release_event (GtkWidget *widget, | |||
GdkEventButton *event, | GdkEventButton *event, | |||
gpointer user_data) | gpointer user_data) | |||
{ | { | |||
mem_value = 2; | mem_button(2); | |||
gtk_widget_destroy(mem_dialog); | ||||
return FALSE; | return FALSE; | |||
} | } | |||
gboolean | gboolean | |||
on_mem3_button_release_event (GtkWidget *widget, | on_mem3_button_release_event (GtkWidget *widget, | |||
GdkEventButton *event, | GdkEventButton *event, | |||
gpointer user_data) | gpointer user_data) | |||
{ | { | |||
mem_value = 3; | mem_button(3); | |||
gtk_widget_destroy(mem_dialog); | ||||
return FALSE; | return FALSE; | |||
} | } | |||
gboolean | gboolean | |||
on_mem4_button_release_event (GtkWidget *widget, | on_mem4_button_release_event (GtkWidget *widget, | |||
GdkEventButton *event, | GdkEventButton *event, | |||
gpointer user_data) | gpointer user_data) | |||
{ | { | |||
mem_value = 4; | mem_button(4); | |||
gtk_widget_destroy(mem_dialog); | ||||
return FALSE; | return FALSE; | |||
} | } | |||
gboolean | gboolean | |||
on_mem5_button_release_event (GtkWidget *widget, | on_mem5_button_release_event (GtkWidget *widget, | |||
GdkEventButton *event, | GdkEventButton *event, | |||
gpointer user_data) | gpointer user_data) | |||
{ | { | |||
mem_value = 5; | mem_button(5); | |||
gtk_widget_destroy(mem_dialog); | ||||
return FALSE; | return FALSE; | |||
} | } | |||
gboolean | gboolean | |||
on_mem6_button_release_event (GtkWidget *widget, | on_mem6_button_release_event (GtkWidget *widget, | |||
GdkEventButton *event, | GdkEventButton *event, | |||
gpointer user_data) | gpointer user_data) | |||
{ | { | |||
mem_value = 6; | mem_button(6); | |||
gtk_widget_destroy(mem_dialog); | ||||
return FALSE; | return FALSE; | |||
} | } | |||
gboolean | gboolean | |||
on_mem7_button_release_event (GtkWidget *widget, | on_mem7_button_release_event (GtkWidget *widget, | |||
GdkEventButton *event, | GdkEventButton *event, | |||
gpointer user_data) | gpointer user_data) | |||
{ | { | |||
mem_value = 7; | mem_button(7); | |||
gtk_widget_destroy(mem_dialog); | ||||
return FALSE; | return FALSE; | |||
} | } | |||
gboolean | gboolean | |||
on_mem8_button_release_event (GtkWidget *widget, | on_mem8_button_release_event (GtkWidget *widget, | |||
GdkEventButton *event, | GdkEventButton *event, | |||
gpointer user_data) | gpointer user_data) | |||
{ | { | |||
mem_value = 8; | mem_button(8); | |||
gtk_widget_destroy(mem_dialog); | ||||
return FALSE; | return FALSE; | |||
} | } | |||
gboolean | gboolean | |||
on_mem9_button_release_event (GtkWidget *widget, | on_mem9_button_release_event (GtkWidget *widget, | |||
GdkEventButton *event, | GdkEventButton *event, | |||
gpointer user_data) | gpointer user_data) | |||
{ | { | |||
mem_value = 9; | mem_button(9); | |||
gtk_widget_destroy(mem_dialog); | ||||
return FALSE; | return FALSE; | |||
} | } | |||
static void | static void | |||
do_copy() { | do_copy() { | |||
gtk_signal_emit_by_name( GTK_OBJECT(entryX), "copy-clipboard"); | g_signal_emit_by_name( G_OBJECT(entry_x), "copy-clipboard"); | |||
} | } | |||
static void | static void | |||
do_paste() { | do_paste() { | |||
gtk_signal_emit_by_name( GTK_OBJECT(entryX), "paste-clipboard"); | g_signal_emit_by_name( G_OBJECT(entry_x), "paste-clipboard"); | |||
} | ||||
gboolean | ||||
on_mem_dialog_key_press_event (GtkWidget *widget, | ||||
GdkEventKey *event, | ||||
gpointer user_data) | ||||
{ | ||||
int inval = event->keyval; | ||||
printf("on_mem_dialog_key_press_event(%d)\n", inval); | ||||
if ((inval >= '0') && (inval <= '9')) { | ||||
mem_button(inval - '0'); | ||||
return FALSE; | ||||
} | ||||
return TRUE; | ||||
} | } | |||
gboolean | gboolean | |||
on_main_window_key_press_event (GtkWidget *widget, | on_main_window_key_press_event (GtkWidget *widget, | |||
GdkEventKey *event, | GdkEventKey *event, | |||
gpointer user_data) | gpointer user_data) | |||
{ | { | |||
int inval; | int inval; | |||
/* | /* | |||
skipping to change at line 1052 | skipping to change at line 1199 | |||
if (inval >= 'a' && inval <= 'z') | if (inval >= 'a' && inval <= 'z') | |||
inval -= 0x20; | inval -= 0x20; | |||
inval -= 0x40; | inval -= 0x40; | |||
} | } | |||
if (event->state & GDK_MOD1_MASK) | if (event->state & GDK_MOD1_MASK) | |||
inval |= 0x80; | inval |= 0x80; | |||
if (mode == PROG && intmode == ASCIIM) { | if (mode == PROG && intmode == ASCIIM) { | |||
switch (inval) { | switch (inval) { | |||
case GDK_Escape: inval = 27; break; | case GDK_KEY_Escape: inval = 27; break; | |||
case GDK_KP_Enter: | case GDK_KEY_KP_Enter: | |||
case GDK_Return: inval = 10; break; | case GDK_KEY_Return: inval = 10; break; | |||
case GDK_Tab: inval = 9; break; | case GDK_KEY_Tab: inval = 9; break; | |||
case GDK_BackSpace: inval = 8; break; | case GDK_KEY_BackSpace: inval = 8; break; | |||
case GDK_KP_Add: inval = '+'; break; | case GDK_KEY_KP_Add: inval = '+'; break; | |||
case GDK_KP_Subtract: inval = '-'; break; | case GDK_KEY_KP_Subtract: inval = '-'; break; | |||
case GDK_KP_Multiply: inval = '*'; break; | case GDK_KEY_KP_Multiply: inval = '*'; break; | |||
case GDK_KP_Divide: inval = '/'; break; | case GDK_KEY_KP_Divide: inval = '/'; break; | |||
default: break; | default: break; | |||
} | } | |||
} else { | } else { | |||
inval = toupper(inval); | inval = toupper(inval); | |||
switch (inval) { | switch (inval) { | |||
case GDK_KP_Enter: | case GDK_KEY_KP_Enter: | |||
case GDK_Return: | case GDK_KEY_Return: | |||
case '=': | case '=': | |||
case 10: if (algebraic_mode) inval = EQUALS; else inval = ENTER; break; | case 10: if (algebraic_mode) inval = EQUALS; else inval = ENTER; break; | |||
case 3: /* ^c - copy X to clipboard */ | case 3: /* ^c - copy X to clipboard */ | |||
do_copy(); | do_copy(); | |||
inval = NOP; | inval = NOP; | |||
break; | break; | |||
case 22: /* ^v - paste from clipboard to X */ | case 22: /* ^v - paste from clipboard to X */ | |||
do_paste(); | do_paste(); | |||
inval = NOP; | inval = NOP; | |||
skipping to change at line 1105 | skipping to change at line 1252 | |||
case '<': inval = SHIFTL; break; | case '<': inval = SHIFTL; break; | |||
case '>': inval = SHIFTR; break; | case '>': inval = SHIFTR; break; | |||
case ',': inval = CHS; break; | case ',': inval = CHS; break; | |||
} | } | |||
break; | break; | |||
} | } | |||
} | } | |||
/* map input characters to commands */ | /* map input characters to commands */ | |||
switch(inval) { | switch(inval) { | |||
case GDK_Escape: inval = INV; break; | case GDK_KEY_Escape: inval = INV; break; | |||
case GDK_Tab: inval = 9; break; | case GDK_KEY_Tab: inval = 9; break; | |||
case GDK_Up: | case GDK_KEY_Up: | |||
case GDK_Page_Up: inval = ENTER; break; | case GDK_KEY_Page_Up: inval = ENTER; break; | |||
case GDK_Down: | case GDK_KEY_Down: | |||
case GDK_Page_Down: inval = ROLLDOWN; break; | case GDK_KEY_Page_Down: inval = ROLLDOWN; break; | |||
default: | default: | |||
if (!algebraic_mode) | if (!algebraic_mode) | |||
switch(inval) { | switch(inval) { | |||
case GDK_Left: | case GDK_KEY_Left: | |||
case GDK_BackSpace: inval = 8; break; | case GDK_KEY_BackSpace: inval = 8; break; | |||
case GDK_KP_Add: inval = PLUS; break; | case GDK_KEY_KP_Add: inval = PLUS; break; | |||
case GDK_KP_Subtract: inval = MINUS; break; | case GDK_KEY_KP_Subtract: inval = MINUS; break; | |||
case GDK_KP_Multiply: inval = MULT; break; | case GDK_KEY_KP_Multiply: inval = MULT; break; | |||
case GDK_KP_Divide: inval = DIVIDE; break; | case GDK_KEY_KP_Divide: inval = DIVIDE; break; | |||
case GDK_KP_Insert: | case GDK_KEY_KP_Insert: | |||
case GDK_KP_0: inval = '0'; break; | case GDK_KEY_KP_0: inval = '0'; brea | |||
case GDK_KP_End: | k; | |||
case GDK_KP_1: inval = '1'; break; | case GDK_KEY_KP_End: | |||
case GDK_KP_Down: | case GDK_KEY_KP_1: inval = '1'; brea | |||
case GDK_KP_2: inval = '2'; break; | k; | |||
case GDK_KP_Page_Down: | case GDK_KEY_KP_Down: | |||
case GDK_KP_3: inval = '3'; break; | case GDK_KEY_KP_2: inval = '2'; brea | |||
case GDK_KP_Left: | k; | |||
case GDK_KP_4: inval = '4'; break; | case GDK_KEY_KP_Page_Down: | |||
case GDK_KP_Begin: | case GDK_KEY_KP_3: inval = '3'; brea | |||
case GDK_KP_5: inval = '5'; break; | k; | |||
case GDK_KP_Right: | case GDK_KEY_KP_Left: | |||
case GDK_KP_6: inval = '6'; break; | case GDK_KEY_KP_4: inval = '4'; brea | |||
case GDK_KP_Home: | k; | |||
case GDK_KP_7: inval = '7'; break; | case GDK_KEY_KP_Begin: | |||
case GDK_KP_Up: | case GDK_KEY_KP_5: inval = '5'; brea | |||
case GDK_KP_8: inval = '8'; break; | k; | |||
case GDK_KP_Page_Up: | case GDK_KEY_KP_Right: | |||
case GDK_KP_9: inval = '9'; break; | case GDK_KEY_KP_6: inval = '6'; brea | |||
case GDK_KP_Delete: | k; | |||
case GDK_KP_Decimal: inval = '.'; break; | case GDK_KEY_KP_Home: | |||
case GDK_KEY_KP_7: inval = '7'; brea | ||||
k; | ||||
case GDK_KEY_KP_Up: | ||||
case GDK_KEY_KP_8: inval = '8'; brea | ||||
k; | ||||
case GDK_KEY_KP_Page_Up: | ||||
case GDK_KEY_KP_9: inval = '9'; brea | ||||
k; | ||||
case GDK_KEY_KP_Delete: | ||||
case GDK_KEY_KP_Decimal: inval = '.'; break; | ||||
/* ignore these: */ | /* ignore these: */ | |||
case GDK_Shift_L: | case GDK_KEY_Shift_L: | |||
case GDK_Shift_R: | case GDK_KEY_Shift_R: | |||
case GDK_Control_L: | case GDK_KEY_Control_L: | |||
case GDK_Control_R: | case GDK_KEY_Control_R: | |||
case GDK_Meta_L: | case GDK_KEY_Meta_L: | |||
case GDK_Meta_R: | case GDK_KEY_Meta_R: | |||
case GDK_Alt_L: | case GDK_KEY_Alt_L: | |||
case GDK_Alt_R: | case GDK_KEY_Alt_R: | |||
case GDK_Num_Lock: | case GDK_KEY_Num_Lock: | |||
case GDK_Caps_Lock: | case GDK_KEY_Caps_Lock: | |||
case GDK_Shift_Lock: | case GDK_KEY_Shift_Lock: | |||
return TRUE; | return TRUE; | |||
} | } | |||
break; | break; | |||
} | } | |||
if (algebraic_mode) { | if (algebraic_mode) { | |||
switch (inval) { | switch (inval) { | |||
case PERCENT: | case PERCENT: | |||
append_x("%"); | append_x("%"); | |||
case EQUALS: | case EQUALS: | |||
last_was_fin_key = 0; | last_was_fin_key = 0; | |||
gtk_signal_emit_stop_by_name(GTK_OBJECT (widget), "key_pr ess_event"); | // g_signal_emit_stop_by_name(G_OBJECT (widget), "key_pre ss_event"); | |||
on_Equals_clicked(NULL, NULL); | on_Equals_clicked(NULL, NULL); | |||
return TRUE; | return TRUE; | |||
/* These needY: */ | /* These needY: */ | |||
case COMB: | case COMB: | |||
case DIVIDE12: | case DIVIDE12: | |||
case DIVIDE: | case DIVIDE: | |||
case DYS: | case DYS: | |||
case SHIFTL: | case SHIFTL: | |||
case SHIFTR: | case SHIFTR: | |||
skipping to change at line 1208 | skipping to change at line 1355 | |||
return TRUE; | return TRUE; | |||
} while (0); | } while (0); | |||
default: | default: | |||
if (liftStack()) { | if (liftStack()) { | |||
set_x(""); | set_x(""); | |||
} | } | |||
last_was_fin_key = 0; | last_was_fin_key = 0; | |||
return FALSE; /* ... just echo to the buffer */ | return FALSE; /* ... just echo to the buffer */ | |||
} | } | |||
} else { | } else { | |||
gtk_signal_emit_stop_by_name(GTK_OBJECT (widget), "key_press_even t"); | // gtk_signal_emit_stop_by_name(G_OBJECT (widget), "key_press_eve nt"); | |||
process(inval); | process(inval); | |||
} | } | |||
return TRUE; | return TRUE; | |||
} | } | |||
void | void | |||
close_registers(GtkButton *button, | on_close_registers(GtkButton *button, | |||
gpointer user_data) { | gpointer user_data) { | |||
/* this rather assumes that they're on ... */ | if (registers_popup) | |||
toggle_registers(); | toggle_registers(); | |||
else | ||||
gtk_widget_hide(get_widget("on_close_registers", "mem_dialog")); | ||||
msg(""); | ||||
} | } | |||
void | void | |||
on_register_window_activate(GtkMenuItem *menuitem, | on_register_window_activate(GtkMenuItem *menuitem, | |||
gpointer user_dat a) { | gpointer user_dat a) { | |||
toggle_registers(); | toggle_registers(); | |||
} | } | |||
static GtkWidget *font_dialog; | ||||
static GtkWidget *button_font_dialog; | ||||
static GtkWidget *plusminus_font_dialog; | ||||
void | ||||
on_font_activate (GtkMenuItem *menuitem, | ||||
gpointer user_data) | ||||
{ | ||||
GnomeFontPicker *gfp; | ||||
font_dialog = create_font_dialog(); | ||||
gfp = GNOME_FONT_PICKER(gtk_object_get_data(GTK_OBJECT (font_dialog), "fo | ||||
ntpicker")); | ||||
gnome_font_picker_set_font_name(gfp, calculatorFont); | ||||
gtk_widget_show(font_dialog); | ||||
} | ||||
void | ||||
on_font_apply_clicked (GtkButton *button, | ||||
gpointer user_data) | ||||
{ | ||||
#ifdef RUNTIME_FONT_CHANGES_ARE_WORKING | ||||
GnomeFontPicker *gfp; | ||||
gfp = GNOME_FONT_PICKER(gtk_object_get_data(GTK_OBJECT (font_dialog), "fo | ||||
ntpicker")); | ||||
if (gfp == NULL) | ||||
msg("Can't find fontpicker"); | ||||
else { | ||||
strcpy(calculatorFont, gnome_font_picker_get_font_name(gfp)); | ||||
fixFont(calculatorFont, main_window, "entry_X"); | ||||
fixFont(calculatorFont, main_window, "entry_Y"); | ||||
fixFont(calculatorFont, main_window, "entry_Z"); | ||||
fixFont(calculatorFont, main_window, "entry_T"); | ||||
fixFont(calculatorFont, main_window, "entry_L"); | ||||
gtk_widget_draw(main_window, NULL); | ||||
} | ||||
#endif | ||||
} | ||||
void | ||||
on_font_ok_clicked (GtkButton *button, | ||||
gpointer | ||||
user_data) | ||||
{ | ||||
on_font_apply_clicked(button, user_data); | ||||
gtk_widget_destroy(font_dialog); | ||||
} | ||||
void | ||||
on_font_cancel_clicked (GtkButton *button, | ||||
gpointer user_data) | ||||
{ | ||||
gtk_widget_destroy(font_dialog); | ||||
} | ||||
void | ||||
on_button_font_activate (GtkMenuItem *menuitem, | ||||
gpointer user_data) | ||||
{ | ||||
GnomeFontPicker *gfp; | ||||
button_font_dialog = create_button_font_dialog(); | ||||
gfp = GNOME_FONT_PICKER(gtk_object_get_data(GTK_OBJECT (button_font_dialo | ||||
g), "buttonfontpicker")); | ||||
gnome_font_picker_set_font_name(gfp, buttonFont); | ||||
gtk_widget_show(button_font_dialog); | ||||
} | ||||
void | ||||
on_button_font_apply_clicked (GtkButton *button, | ||||
gpointer user_data) | ||||
{ | ||||
#ifdef RUNTIME_FONT_CHANGES_ARE_WORKING | ||||
GnomeFontPicker *gfp; | ||||
gfp = GNOME_FONT_PICKER(gtk_object_get_data(GTK_OBJECT (button_font_dialo | ||||
g), "buttonfontpicker")); | ||||
if (gfp == NULL) | ||||
msg("Can't find buttonfontpicker"); | ||||
else { | ||||
strcpy(buttonFont, gnome_font_picker_get_font_name(gfp)); | ||||
setButtonFont(buttonFont); | ||||
gtk_widget_draw(main_window, NULL); | ||||
} | ||||
#endif | ||||
} | ||||
void | ||||
on_button_font_ok_clicked (GtkButton *button, | ||||
gpointer | ||||
user_data) | ||||
{ | ||||
on_button_font_apply_clicked(button, user_data); | ||||
gtk_widget_destroy(button_font_dialog); | ||||
} | ||||
void | ||||
on_button_font_cancel_clicked (GtkButton *button, | ||||
gpointer user_data) | ||||
{ | ||||
gtk_widget_destroy(button_font_dialog); | ||||
} | ||||
void | ||||
on_plus_minus_font_activate (GtkMenuItem *menuitem, | ||||
gpointer user_data) | ||||
{ | ||||
GnomeFontPicker *gfp; | ||||
plusminus_font_dialog = create_plusminus_font_dialog(); | ||||
gfp = GNOME_FONT_PICKER(gtk_object_get_data(GTK_OBJECT (plusminus_font_di | ||||
alog), "plusminusfontpicker")); | ||||
gnome_font_picker_set_font_name(gfp, plusMinusFont); | ||||
gtk_widget_show(plusminus_font_dialog); | ||||
} | ||||
void | ||||
on_plusminus_font_apply_clicked (GtkButton *button, | ||||
gpointer user_data) | ||||
{ | ||||
#ifdef RUNTIME_FONT_CHANGES_ARE_WORKING | ||||
GnomeFontPicker *gfp; | ||||
gfp = GNOME_FONT_PICKER(gtk_object_get_data(GTK_OBJECT (plusminus_font_di | ||||
alog), "plusminusfontpicker")); | ||||
if (gfp == NULL) | ||||
msg("Can't find plusminusfontpicker"); | ||||
else { | ||||
strcpy(plusMinusFont, gnome_font_picker_get_font_name(gfp)); | ||||
setPlusMinusFont(plusMinusFont); | ||||
gtk_widget_draw(main_window, NULL); | ||||
} | ||||
#endif | ||||
} | ||||
void | ||||
on_plusminus_font_ok_clicked (GtkButton *button, | ||||
gpointer | ||||
user_data) | ||||
{ | ||||
on_plusminus_font_apply_clicked(button, user_data); | ||||
gtk_widget_destroy(plusminus_font_dialog); | ||||
} | ||||
void | ||||
on_plusminus_font_cancel_clicked (GtkButton *button, | ||||
gpointer user_data) | ||||
{ | ||||
gtk_widget_destroy(plusminus_font_dialog); | ||||
} | ||||
gboolean | gboolean | |||
on_entry_L_button_release_event (GtkWidget *widget, | on_entry_L_button_release_event (GtkWidget *widget, | |||
GdkEventButton *event, | GdkEventButton *event, | |||
gpointer user_data) | gpointer user_data) | |||
{ | { | |||
if (algebraic_mode && !lift_needed) | if (algebraic_mode && !lift_needed) | |||
append_x("L"); | append_x("L"); | |||
else | else | |||
process(XNL); | process(XNL); | |||
return 0; | return 0; | |||
skipping to change at line 1437 | skipping to change at line 1436 | |||
on_annuity_in_advance_activate (GtkMenuItem *menuitem, | on_annuity_in_advance_activate (GtkMenuItem *menuitem, | |||
gpointer user_data) | gpointer user_data) | |||
{ | { | |||
process(BEGIN); | process(BEGIN); | |||
} | } | |||
void | void | |||
on_fixed_point_numbering_activate (GtkMenuItem *menuitem, | on_fixed_point_numbering_activate (GtkMenuItem *menuitem, | |||
gpointer user_data) | gpointer user_data) | |||
{ | { | |||
process(FIX); | process(FIXFORMAT); | |||
} | } | |||
void | void | |||
on_engineering_numbering_activate (GtkMenuItem *menuitem, | on_engineering_numbering_activate (GtkMenuItem *menuitem, | |||
gpointer user_data) | gpointer user_data) | |||
{ | { | |||
process(ENG); | process(ENGFORMAT); | |||
} | } | |||
void | void | |||
on_scientific_numbering_activate (GtkMenuItem *menuitem, | on_scientific_numbering_activate (GtkMenuItem *menuitem, | |||
gpointer user_data) | gpointer user_data) | |||
{ | { | |||
process(SCIFORMAT); | process(SCIFORMAT); | |||
} | } | |||
void | void | |||
on_places_activate (GtkMenuItem *menuitem, | on_places_activate (GtkMenuItem *menuitem, | |||
gpoint er user_data) | gpoint er user_data) | |||
{ | { | |||
process(PLACES); | process(PLACES); | |||
} | } | |||
static void | static void | |||
showWidget(char *name) { | showWidget(char *name) { | |||
gpointer g; | gpointer g; | |||
g = gtk_object_get_data(GTK_OBJECT (main_window), name); | g = get_widget("display_buttons",name); | |||
if (g) | if (g) | |||
gtk_widget_show(g); | gtk_widget_show(g); | |||
else | else | |||
fprintf(stderr, "gdcalc: Can't find widget %s\n", name); | fprintf(stderr, "gdcalc: showWidget: Can't find widget %s\n", nam e); | |||
} | } | |||
static void | static void | |||
hideWidget(char *name) { | hideWidget(char *name) { | |||
gpointer g; | gpointer g; | |||
g = gtk_object_get_data(GTK_OBJECT (main_window), name); | g = get_widget("display_buttons",name); | |||
if (g) | if (g) | |||
gtk_widget_hide(g); | gtk_widget_hide(g); | |||
else | else | |||
fprintf(stderr, "gdcalc: Can't find widget %s\n", name); | fprintf(stderr, "gdcalc: hideWidget: Can't find widget %s\n", nam e); | |||
} | } | |||
void | void | |||
on_rpn_activate (GtkMenuItem *menuitem, | on_rpn_activate (GtkMenuItem *menuitem, | |||
gpointer user_data) | gpointer user_data) | |||
{ | { | |||
/* gtk_entry_set_editable(entryX, 0); */ | /* gtk_entry_set_editable(entry_x, 0); */ | |||
/* GTK_WIDGET_UNSET_FLAGS (entryX, GTK_CAN_FOCUS); */ | /* GTK_WIDGET_UNSET_FLAGS (entry_x, GTK_CAN_FOCUS); */ | |||
showWidget("Enter"); | showWidget("Enter"); | |||
hideWidget("LeftBrace"); | hideWidget("LeftBrace"); | |||
hideWidget("RightBrace"); | hideWidget("RightBrace"); | |||
hideWidget("Equals"); | hideWidget("Equals"); | |||
process(RPN); | process(RPN); | |||
} | } | |||
void | void | |||
on_algebraic_activate (GtkMenuItem *menuitem, | on_algebraic_activate (GtkMenuItem *menuitem, | |||
gpointer user_data) | gpointer user_data) | |||
{ | { | |||
/* gtk_entry_set_editable(entryX, 1); */ | /* gtk_entry_set_editable(entry_x, 1); */ | |||
/* GTK_WIDGET_SET_FLAGS (entryX, GTK_CAN_FOCUS); */ | /* GTK_WIDGET_SET_FLAGS (entry_x, GTK_CAN_FOCUS); */ | |||
gtk_widget_grab_focus(GTK_WIDGET(entryX)); | gtk_widget_grab_focus(GTK_WIDGET(entry_x)); | |||
hideWidget("Enter"); | hideWidget("Enter"); | |||
showWidget("LeftBrace"); | showWidget("LeftBrace"); | |||
showWidget("RightBrace"); | showWidget("RightBrace"); | |||
showWidget("Equals"); | showWidget("Equals"); | |||
process(ALGEBRAIC); | process(ALGEBRAIC); | |||
} | } | |||
gboolean | gboolean | |||
skipping to change at line 1526 | skipping to change at line 1525 | |||
GdkEventKey *event, | GdkEventKey *event, | |||
gpointer user_data) | gpointer user_data) | |||
{ | { | |||
int inval; | int inval; | |||
GtkWidget *eval_ok; | GtkWidget *eval_ok; | |||
inval = event->keyval; | inval = event->keyval; | |||
/* printf("on_eval_key_press_event: inval = %d\n", inval); */ | /* printf("on_eval_key_press_event: inval = %d\n", inval); */ | |||
if (inval == GDK_Return) { | if (inval == GDK_KEY_Return) { | |||
gtk_signal_emit_stop_by_name(GTK_OBJECT (widget), "key_press_even | // gtk_signal_emit_stop_by_name(G_OBJECT (widget), "key_press_eve | |||
t"); | nt"); | |||
eval_ok = gtk_object_get_data(GTK_OBJECT (eval_dialog), _("eval_o | eval_ok = get_widget("display_buttons",_("eval_ok")); | |||
k")); | ||||
gtk_button_clicked(GTK_BUTTON(eval_ok)); | gtk_button_clicked(GTK_BUTTON(eval_ok)); | |||
return TRUE; | return TRUE; | |||
} | } | |||
return FALSE; | return FALSE; | |||
} | } | |||
static void | static void | |||
cleanup(char *buf, int i) { | cleanup(char *buf, int i) { | |||
long lval; | long lval; | |||
double dval; | double dval; | |||
skipping to change at line 1554 | skipping to change at line 1553 | |||
for (s = buf; *s && isspace(*s); s++) | for (s = buf; *s && isspace(*s); s++) | |||
; | ; | |||
if (s > buf) { | if (s > buf) { | |||
for (d = buf; *s; ) | for (d = buf; *s; ) | |||
*d++ = *s++; | *d++ = *s++; | |||
*d = 0; | *d = 0; | |||
} | } | |||
} | } | |||
/* Yes this is more ugliness - due to ugliness in the way gtk handles | /* Yes this is more ugliness - due to ugliness in the way gtk handles | |||
* copy/paste etc. We get here every time text is put into entryX. If | * copy/paste etc. We get here every time text is put into entry_x. If | |||
* we are doing it from dCalc we set the global flag (!) | * we are doing it from dCalc we set the global flag | |||
* insertedTextIsFromDcalc. Otherwise we assume we are doing a | * insertedTextIsFromDcalc. Otherwise we assume we are doing a paste. | |||
* paste. We also get a chance to tidy up the paste (syncronise with | * We also get a chance to tidy up the paste (syncronise with dCalc's | |||
* dCalc's understanding of the contents of entryX) in the _port | * understanding of the contents of entry_x) in the _port routine. | |||
* routine. Yuck. | * Yuck. | |||
*/ | */ | |||
#define MAX_PASTE 45 | #define MAX_PASTE 45 | |||
char pasteBuf[MAX_PASTE]; | char pasteBuf[MAX_PASTE]; | |||
void | void | |||
on_entry_X_insert_text(GtkEditable *editable, | on_entry_X_insert_text(GtkEditable *editable, | |||
gchar *new_text, | gchar *new_text, | |||
gint new_text_length, | gint new_text_length, | |||
gint *position, | gint *position, | |||
gpointer user_data) | gpointer user_data) | |||
{ | { | |||
skipping to change at line 1628 | skipping to change at line 1627 | |||
} | } | |||
void | void | |||
on_paste_activate (GtkMenuItem *menuitem, | on_paste_activate (GtkMenuItem *menuitem, | |||
gpointer user_data) | gpointer user_data) | |||
{ | { | |||
do_paste(); | do_paste(); | |||
} | } | |||
void | void | |||
on_main_window_destroy (GtkObject *object, | on_main_window_destroy (GtkWidget *object, | |||
gpointer user_data) | gpointer user_data) | |||
{ | { | |||
process(QUIT); | process(QUIT); | |||
} | } | |||
/* For emacs: */ | /* For emacs: */ | |||
/* Local Variables: */ | /* Local Variables: */ | |||
/* eval:(setq tab-width 4) */ | /* eval:(setq tab-width 4) */ | |||
/* End: */ | /* End: */ | |||
End of changes. 61 change blocks. | ||||
355 lines changed or deleted | 351 lines changed or added |