Skip to content

Commit 83d4b02

Browse files
authored
Merge pull request #1 from halexus/master
Add virtual keyboard window with logic operations
2 parents f8cc695 + 2571167 commit 83d4b02

File tree

2 files changed

+216
-0
lines changed

2 files changed

+216
-0
lines changed

src/aris-proof.c

+173
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,8 @@
4242
#include "vec.h"
4343
#include "undo.h"
4444

45+
#include "sentence-screen-keyboard.h"
46+
4547
#define SUBPROOFS_DISABLED 0
4648

4749
// Main menu array.
@@ -149,6 +151,8 @@ aris_proof_init ()
149151
G_CALLBACK (window_focus_in), (gpointer) ap);
150152

151153
gtk_widget_show_all (SEN_PARENT (ap)->window);
154+
155+
init_sentence_screen_keyboard(&(ap->sp)); // Initialize the screen keyboard for logic operations
152156

153157
return ap;
154158
}
@@ -1590,3 +1594,172 @@ aris_proof_to_latex (aris_proof * ap)
15901594

15911595
return 0;
15921596
}
1597+
1598+
1599+
void callback_and_screen_keyboard(GtkWidget *widget, GdkEvent *def_event, gpointer *data)
1600+
{
1601+
callback_sentence_screen_keyboard(widget, def_event, data, AND_TYPE);
1602+
}
1603+
1604+
void callback_or_screen_keyboard(GtkWidget *widget, GdkEvent *def_event, gpointer *data)
1605+
{
1606+
callback_sentence_screen_keyboard(widget, def_event, data, OR_TYPE);
1607+
}
1608+
1609+
void callback_not_screen_keyboard(GtkWidget *widget, GdkEvent *def_event, gpointer *data)
1610+
{
1611+
callback_sentence_screen_keyboard(widget, def_event, data, NOT_TYPE);
1612+
}
1613+
1614+
void callback_con_screen_keyboard(GtkWidget *widget, GdkEvent *def_event, gpointer *data)
1615+
{
1616+
callback_sentence_screen_keyboard(widget, def_event, data, CON_TYPE);
1617+
}
1618+
1619+
void callback_bic_screen_keyboard(GtkWidget *widget, GdkEvent *def_event, gpointer *data)
1620+
{
1621+
callback_sentence_screen_keyboard(widget, def_event, data, BIC_TYPE);
1622+
}
1623+
1624+
void callback_unv_screen_keyboard(GtkWidget *widget, GdkEvent *def_event, gpointer *data)
1625+
{
1626+
callback_sentence_screen_keyboard(widget, def_event, data, UNV_TYPE);
1627+
}
1628+
1629+
void callback_exl_screen_keyboard(GtkWidget *widget, GdkEvent *def_event, gpointer *data)
1630+
{
1631+
callback_sentence_screen_keyboard(widget, def_event, data, EXL_TYPE);
1632+
}
1633+
1634+
void callback_tau_screen_keyboard(GtkWidget *widget, GdkEvent *def_event, gpointer *data)
1635+
{
1636+
callback_sentence_screen_keyboard(widget, def_event, data, TAU_TYPE);
1637+
}
1638+
1639+
void callback_ctr_screen_keyboard(GtkWidget *widget, GdkEvent *def_event, gpointer *data)
1640+
{
1641+
callback_sentence_screen_keyboard(widget, def_event, data, CTR_TYPE);
1642+
}
1643+
1644+
void callback_elm_screen_keyboard(GtkWidget *widget, GdkEvent *def_event, gpointer *data)
1645+
{
1646+
callback_sentence_screen_keyboard(widget, def_event, data, ELM_TYPE);
1647+
}
1648+
1649+
void callback_nil_screen_keyboard(GtkWidget *widget, GdkEvent *def_event, gpointer *data)
1650+
{
1651+
callback_sentence_screen_keyboard(widget, def_event, data, NIL_TYPE);
1652+
}
1653+
1654+
void callback_sentence_screen_keyboard(GtkWidget *widget, GdkEvent *def_event, gpointer *data, int type)
1655+
{
1656+
sen_parent *sp = (sen_parent *)data;
1657+
GdkEvent *event = gdk_event_new(GDK_KEY_PRESS);
1658+
1659+
event->key.window = gtk_widget_get_window(sp->window);
1660+
event->key.send_event = FALSE;
1661+
event->key.time = 0;
1662+
event->key.state = GDK_CONTROL_MASK;
1663+
switch (type)
1664+
{
1665+
case AND_TYPE:
1666+
event->key.keyval = GDK_KEY_7;
1667+
event->key.string = g_strdup("7");
1668+
break;
1669+
case OR_TYPE:
1670+
event->key.keyval = GDK_KEY_backslash;
1671+
event->key.string = g_strdup("\\");
1672+
break;
1673+
case NOT_TYPE:
1674+
event->key.keyval = GDK_KEY_grave;
1675+
event->key.string = g_strdup("^");
1676+
break;
1677+
case CON_TYPE:
1678+
event->key.keyval = GDK_KEY_4;
1679+
event->key.string = g_strdup("4");
1680+
break;
1681+
case BIC_TYPE:
1682+
event->key.keyval = GDK_KEY_5;
1683+
event->key.string = g_strdup("5");
1684+
break;
1685+
case UNV_TYPE:
1686+
event->key.keyval = GDK_KEY_2;
1687+
event->key.string = g_strdup("2");
1688+
break;
1689+
case EXL_TYPE:
1690+
event->key.keyval = GDK_KEY_3;
1691+
event->key.string = g_strdup("3");
1692+
break;
1693+
case TAU_TYPE:
1694+
event->key.keyval = GDK_KEY_1;
1695+
event->key.string = g_strdup("1");
1696+
break;
1697+
case CTR_TYPE:
1698+
event->key.keyval = GDK_KEY_6;
1699+
event->key.string = g_strdup("6");
1700+
break;
1701+
case ELM_TYPE:
1702+
event->key.keyval = GDK_KEY_semicolon;
1703+
event->key.string = g_strdup(";");
1704+
break;
1705+
case NIL_TYPE:
1706+
event->key.keyval = GDK_KEY_period;
1707+
event->key.string = g_strdup(".");
1708+
break;
1709+
default:; // should not happen
1710+
}
1711+
1712+
event->key.length = strlen(event->key.string);
1713+
gtk_main_do_event(event);
1714+
gdk_event_free(event);
1715+
gtk_window_present(GTK_WINDOW(sp->window)); // Set sentence window focus
1716+
}
1717+
1718+
GtkWidget *init_button(sen_parent *sp, GtkWidget *grid, char *type, int r, int c)
1719+
{
1720+
GdkPixbuf *symbol_pixbuf = gdk_pixbuf_scale_simple(sen_parent_get_conn_by_type(sp, type), 12, 12, GDK_INTERP_BILINEAR);
1721+
GtkWidget *image = gtk_image_new_from_pixbuf(symbol_pixbuf);
1722+
1723+
GtkWidget *button = gtk_button_new();
1724+
gtk_button_set_image(GTK_BUTTON(button), image);
1725+
gtk_grid_attach(GTK_GRID(grid), button, c, r, 1, 1);
1726+
return button;
1727+
}
1728+
1729+
void init_sentence_screen_keyboard(sen_parent *sp)
1730+
{
1731+
GtkWidget *window_sentence_screen_keyboard = gtk_window_new(GTK_WINDOW_TOPLEVEL);
1732+
gtk_window_set_title(GTK_WINDOW(window_sentence_screen_keyboard), "Keyboard");
1733+
gtk_window_set_default_size(GTK_WINDOW(window_sentence_screen_keyboard), 150, 190);
1734+
gtk_window_set_resizable(GTK_WINDOW(window_sentence_screen_keyboard), FALSE);
1735+
1736+
GtkWidget *grid1 = gtk_grid_new(); // Make a grid for the buttons
1737+
gtk_grid_set_column_spacing((GtkGrid *)grid1, 5);
1738+
gtk_grid_set_row_spacing((GtkGrid *)grid1, 5);
1739+
1740+
GtkWidget *button_and = init_button(sp, grid1, AND, 1, 1);
1741+
g_signal_connect(G_OBJECT(button_and), "button-press-event", G_CALLBACK(callback_and_screen_keyboard), (gpointer)sp);
1742+
GtkWidget *button_or = init_button(sp, grid1, OR, 1, 2);
1743+
g_signal_connect(G_OBJECT(button_or), "button-press-event", G_CALLBACK(callback_or_screen_keyboard), (gpointer)sp);
1744+
GtkWidget *button_not = init_button(sp, grid1, NOT, 1, 3);
1745+
g_signal_connect(G_OBJECT(button_not), "button-press-event", G_CALLBACK(callback_not_screen_keyboard), (gpointer)sp);
1746+
GtkWidget *button_con = init_button(sp, grid1, CON, 2, 1);
1747+
g_signal_connect(G_OBJECT(button_con), "button-press-event", G_CALLBACK(callback_con_screen_keyboard), (gpointer)sp);
1748+
GtkWidget *button_bic = init_button(sp, grid1, BIC, 2, 2);
1749+
g_signal_connect(G_OBJECT(button_bic), "button-press-event", G_CALLBACK(callback_bic_screen_keyboard), (gpointer)sp);
1750+
GtkWidget *button_unv = init_button(sp, grid1, UNV, 3, 1);
1751+
g_signal_connect(G_OBJECT(button_unv), "button-press-event", G_CALLBACK(callback_unv_screen_keyboard), (gpointer)sp);
1752+
GtkWidget *button_exl = init_button(sp, grid1, EXL, 3, 2);
1753+
g_signal_connect(G_OBJECT(button_exl), "button-press-event", G_CALLBACK(callback_exl_screen_keyboard), (gpointer)sp);
1754+
GtkWidget *button_tau = init_button(sp, grid1, TAU, 4, 1);
1755+
g_signal_connect(G_OBJECT(button_tau), "button-press-event", G_CALLBACK(callback_tau_screen_keyboard), (gpointer)sp);
1756+
GtkWidget *button_ctr = init_button(sp, grid1, CTR, 4, 2);
1757+
g_signal_connect(G_OBJECT(button_ctr), "button-press-event", G_CALLBACK(callback_ctr_screen_keyboard), (gpointer)sp);
1758+
GtkWidget *button_elm = init_button(sp, grid1, ELM, 5, 1);
1759+
g_signal_connect(G_OBJECT(button_elm), "button-press-event", G_CALLBACK(callback_elm_screen_keyboard), (gpointer)sp);
1760+
GtkWidget *button_nil = init_button(sp, grid1, NIL, 5, 2);
1761+
g_signal_connect(G_OBJECT(button_nil), "button-press-event", G_CALLBACK(callback_nil_screen_keyboard), (gpointer)sp);
1762+
1763+
gtk_container_add(GTK_CONTAINER(window_sentence_screen_keyboard), grid1);
1764+
gtk_widget_show_all(window_sentence_screen_keyboard);
1765+
}

src/sentence-screen-keyboard.h

+43
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
/* The sentence screen keyboard.
2+
3+
Copyright (C) 2012, 2013, 2014 Ian Dunn.
4+
5+
This program is free software: you can redistribute it and/or modify
6+
it under the terms of the GNU General Public License as published by
7+
the Free Software Foundation, either version 3 of the License, or
8+
(at your option) any later version.
9+
10+
This program is distributed in the hope that it will be useful,
11+
but WITHOUT ANY WARRANTY; without even the implied warranty of
12+
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13+
GNU General Public License for more details.
14+
15+
You should have received a copy of the GNU General Public License
16+
along with this program. If not, see <http://www.gnu.org/licenses/>.
17+
*/
18+
19+
#ifndef ARIS_SENTENCE_SCREEN_KEYBOARD_H
20+
#define ARIS_SENTENCE_SCREEN_KEYBOARD_H
21+
22+
#include <gtk/gtk.h>
23+
24+
#define AND_TYPE 1
25+
#define OR_TYPE 2
26+
#define NOT_TYPE 3
27+
#define CON_TYPE 4
28+
#define BIC_TYPE 5
29+
#define UNV_TYPE 6
30+
#define EXL_TYPE 7
31+
#define TAU_TYPE 8
32+
#define CTR_TYPE 9
33+
#define ELM_TYPE 10
34+
#define NIL_TYPE 11
35+
36+
37+
38+
39+
40+
void init_sentence_screen_keyboard(sen_parent *sp);
41+
void callback_sentence_screen_keyboard(GtkWidget *widget, GdkEvent * event, gpointer *data, int type);
42+
43+
#endif /* ARIS_SENTENCE_SCREEN_KEYBOARD_H */

0 commit comments

Comments
 (0)