|
42 | 42 | #include "vec.h"
|
43 | 43 | #include "undo.h"
|
44 | 44 |
|
| 45 | +#include "sentence-screen-keyboard.h" |
| 46 | + |
45 | 47 | #define SUBPROOFS_DISABLED 0
|
46 | 48 |
|
47 | 49 | // Main menu array.
|
@@ -149,6 +151,8 @@ aris_proof_init ()
|
149 | 151 | G_CALLBACK (window_focus_in), (gpointer) ap);
|
150 | 152 |
|
151 | 153 | gtk_widget_show_all (SEN_PARENT (ap)->window);
|
| 154 | + |
| 155 | + init_sentence_screen_keyboard(&(ap->sp)); // Initialize the screen keyboard for logic operations |
152 | 156 |
|
153 | 157 | return ap;
|
154 | 158 | }
|
@@ -1590,3 +1594,172 @@ aris_proof_to_latex (aris_proof * ap)
|
1590 | 1594 |
|
1591 | 1595 | return 0;
|
1592 | 1596 | }
|
| 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 | +} |
0 commit comments