"Fossies" - the Fresh Open Source Software Archive  

Source code changes of the file "src/callbacks.c" between
gdcalc-2.20.tar.gz and gdcalc-3.0.tar.gz

About: gdcalc is a financial, statistics, scientific and programmers calculator (using GTK+).

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

Home  |  About  |  Features  |  All  |  Newest  |  Dox  |  Diffs  |  RSS Feeds  |  Screenshots  |  Comments  |  Imprint  |  Privacy  |  HTTP(S)