-/* PSPP - computes sample statistics.
- Copyright (C) 2007 Free Software Foundation, Inc.
+/* PSPPIRE - a graphical user interface for PSPP.
+ Copyright (C) 2007, 2010, 2011, 2015 Free Software Foundation, Inc.
- 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 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 3 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.
+ 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., 51 Franklin Street, Fifth Floor, Boston, MA
- 02110-1301, USA. */
-
-#include <gtk/gtksignal.h>
-#include <gtk/gtktable.h>
-#include <gtk/gtkbutton.h>
-#include <gtk/gtklabel.h>
+ along with this program. If not, see <http://www.gnu.org/licenses/>. */
+
+#include <config.h>
+#include <gtk/gtk.h>
#include <gdk/gdkkeysyms.h>
#include "psppire-keypad.h"
enum {
INSERT_SYNTAX,
+ ERASE,
n_SIGNALS
};
static void psppire_keypad_class_init (PsppireKeypadClass *klass);
static void psppire_keypad_init (PsppireKeypad *kp);
-static guint keypad_signals[n_SIGNALS] = { 0 };
+static guint keypad_signals [n_SIGNALS] = { 0 };
GType
psppire_keypad_get_type (void)
g_cclosure_marshal_VOID__STRING,
G_TYPE_NONE, 1,
G_TYPE_STRING);
+
+ keypad_signals[ERASE] = g_signal_new ("erase",
+ G_TYPE_FROM_CLASS (klass),
+ G_SIGNAL_RUN_FIRST | G_SIGNAL_ACTION,
+ G_STRUCT_OFFSET (PsppireKeypadClass,
+ keypad),
+ NULL,
+ NULL,
+ g_cclosure_marshal_VOID__VOID,
+ G_TYPE_NONE, 0);
}
The order of these must correspond
to the order of the button declarations
*/
-static const char *keypad_insert_text[] = {
+static const char * const keypad_insert_text[] = {
"0", "1", "2", "3", "4", "5", "6", "7", "8", "9",
".", "+", "-", "*", "**", "/", "=", "<>", "<", "<=",
- ">", ">=", "&", "|", "~", "(", ")"
+ ">", ">=", "&", "|", "~", "()", NULL
};
{
const gchar *s = g_hash_table_lookup (kp->frag_table, b);
- g_signal_emit (kp, keypad_signals [INSERT_SYNTAX], 0, s);
+
+ if ( s )
+ g_signal_emit (kp, keypad_signals [INSERT_SYNTAX], 0, s);
+ else
+ g_signal_emit (kp, keypad_signals [ERASE], 0);
}
static const gint cols = 6;
{
g_object_set (G_OBJECT (*button), "focus-on-click", FALSE, NULL);
- gtk_table_attach_defaults (GTK_TABLE (kp->table),
- *button,
- x1, x2,
- y1, y2);
+ gtk_grid_attach (GTK_GRID(kp->table), *button, x1, y1, x2 - x1, y2 - y1);
gtk_widget_set_size_request (*button,
30 * rows / (float) cols,
if (event->type == GDK_ENTER_NOTIFY)
gtk_widget_grab_focus (widget);
- if (event->type == GDK_LEAVE_NOTIFY)
- GTK_WIDGET_UNSET_FLAGS (widget, GTK_HAS_FOCUS);
-
return FALSE;
}
GdkEventKey *event,
gpointer user_data)
{
- if ( ! (GTK_WIDGET_FLAGS (widget) & GTK_HAS_FOCUS) )
+ if ( ! gtk_widget_has_focus (widget))
return FALSE;
switch (event->keyval)
case '<':
g_signal_emit (widget, keypad_signals [INSERT_SYNTAX], 0, "<");
break;
- case GDK_KP_Equal :
+ case GDK_KEY_KP_Equal :
case '=':
g_signal_emit (widget, keypad_signals [INSERT_SYNTAX], 0, "=");
break;
- case GDK_KP_Multiply :
+ case GDK_KEY_KP_Multiply :
case '*':
g_signal_emit (widget, keypad_signals [INSERT_SYNTAX], 0, "*");
break;
- case GDK_KP_Add :
+ case GDK_KEY_KP_Add :
case '+':
g_signal_emit (widget, keypad_signals [INSERT_SYNTAX], 0, "+");
break;
- case GDK_KP_Subtract :
+ case GDK_KEY_KP_Subtract :
case '-':
g_signal_emit (widget, keypad_signals [INSERT_SYNTAX], 0, "-");
break;
- case GDK_KP_Decimal :
+ case GDK_KEY_KP_Decimal :
case '.':
g_signal_emit (widget, keypad_signals [INSERT_SYNTAX], 0, ".");
break;
- case GDK_KP_Divide :
+ case GDK_KEY_KP_Divide :
case '/':
g_signal_emit (widget, keypad_signals [INSERT_SYNTAX], 0, "/");
break;
- case GDK_KP_0 :
+ case GDK_KEY_KP_0 :
case '0':
g_signal_emit (widget, keypad_signals [INSERT_SYNTAX], 0, "0");
break;
- case GDK_KP_1 :
+ case GDK_KEY_KP_1 :
case '1':
g_signal_emit (widget, keypad_signals [INSERT_SYNTAX], 0, "1");
break;
- case GDK_KP_2 :
+ case GDK_KEY_KP_2 :
case '2':
g_signal_emit (widget, keypad_signals [INSERT_SYNTAX], 0, "2");
break;
- case GDK_KP_3 :
+ case GDK_KEY_KP_3 :
case '3':
g_signal_emit (widget, keypad_signals [INSERT_SYNTAX], 0, "3");
break;
- case GDK_KP_4 :
+ case GDK_KEY_KP_4 :
case '4':
g_signal_emit (widget, keypad_signals [INSERT_SYNTAX], 0, "4");
break;
- case GDK_KP_5 :
+ case GDK_KEY_KP_5 :
case '5':
g_signal_emit (widget, keypad_signals [INSERT_SYNTAX], 0, "5");
break;
- case GDK_KP_6 :
+ case GDK_KEY_KP_6 :
case '6':
g_signal_emit (widget, keypad_signals [INSERT_SYNTAX], 0, "6");
break;
- case GDK_KP_7 :
+ case GDK_KEY_KP_7 :
case '7':
g_signal_emit (widget, keypad_signals [INSERT_SYNTAX], 0, "7");
break;
- case GDK_KP_8 :
+ case GDK_KEY_KP_8 :
case '8':
g_signal_emit (widget, keypad_signals [INSERT_SYNTAX], 0, "8");
break;
- case GDK_KP_9 :
+ case GDK_KEY_KP_9 :
case '9':
g_signal_emit (widget, keypad_signals [INSERT_SYNTAX], 0, "9");
break;
const int digit_voffset = 0;
const int digit_hoffset = 3;
- GTK_WIDGET_SET_FLAGS (kp, GTK_CAN_FOCUS);
- GTK_WIDGET_UNSET_FLAGS (kp, GTK_HAS_FOCUS);
+ gtk_widget_set_can_focus (GTK_WIDGET (kp), TRUE);
kp->dispose_has_run = FALSE;
kp->frag_table = g_hash_table_new (g_direct_hash, g_direct_equal);
- kp->table = gtk_table_new (rows, cols, TRUE);
+ kp->table = gtk_grid_new ();
/* Buttons for the digits */
for (i = 0; i < 10; i++)
{
int j = i - 1;
char buf[5];
- snprintf (buf, 5, "%d", i);
+ g_snprintf (buf, 5, "%d", i);
kp->digit[i] = gtk_button_new_with_label (buf);
if ( i == 0 )
g_markup_printf_escaped ("<span style=\"italic\">x<sup>y</sup></span>");
label = gtk_label_new ("**");
+
gtk_label_set_markup (GTK_LABEL (label), markup);
g_free (markup);
kp->star_star = gtk_button_new ();
gtk_container_add (GTK_CONTAINER (kp->star_star), label);
+ gtk_widget_show (label);
+
add_button (kp, &kp->star_star,
0, 1,
4, 5);