====== Einfacher Taschenrechner ======
In diesem Beispiel möchte ich mit euch einen kleinen Taschenrechner erstellen, der zumindest die Grundrechenarten unterstützt. Negative oder gebrochene Zahlen dürft ihr als zusätzliche Übung danach selbst implementieren... ;-)
===== Das Grundgerüst =====
...besteht aus solidem Code:
#include
int main (int argc, char *argv[])
{
GtkWidget *window;
gtk_init (&argc, &argv);
/* Fenster erstellen */
window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
gtk_window_set_title (GTK_WINDOW (window), "Calculator");
g_signal_connect (window, "destroy", G_CALLBACK (gtk_main_quit), NULL);
gtk_widget_show_all(window);
gtk_main();
return 0;
}
Vom Design her wird es keine Besonderheiten geben: Oberflächenerstellung und Callback-Verknüpfung kommt in die ''main''-Funktion, der Rest der Logik wird in den Callbacks ablaufen.
Globale Konstanten und Variablen behalte ich mir vor, allerdings nur für das Nötigste.
===== Das Layout =====
Zum Thema Layout bietet sich bei einem Taschenrechner ein Tabellenformat an. GTK+ liefert hierfür mit GtkTable ein effektives Container-Widget((Ein Widget, das andere Widgets tragen kann)), welches wir nun einsetzen wollen.
Zuerst eine neue Variable mit Namen ''table'':
GtkWidget *window,
*table; /* Neu */
Dann nach der Erstellung des Fenster folgendes einfügen (oder abtippen):
table = gtk_table_new(5, 4, TRUE);
gtk_container_add(GTK_CONTAINER(window), table);
Damit haben wir ein GtkTable mit **5** Zeilen und **4** Spalten, wobei die Eigenschaft, dass die Elemente gleichmäßig angeordnet werden (//homogeneous//) auf **TRUE** steht.
Mit Zeile 2 setzen wir ''table'' auf ''window''.
===== Ein Entry =====
...werden wir zur Ausgabe der Eingaben und der Ergebnisse benutzen.
Dazu erweitern wir die Liste der GtkWidget Deklaration am Anfang um folgende Zeile:
*entry;
Und fügen folgendes nach der GtkTable Erstellung ein:
entry = gtk_entry_new();
gtk_entry_set_alignment(GTK_ENTRY(entry), 1);
gtk_editable_set_editable(GTK_EDITABLE(entry), FALSE);
gtk_table_attach_defaults(GTK_TABLE(table), entry, 0, 4, 0, 1);
Zeile **1** sollte selbsterklärend sein.
In Zeile **2** wird die Textausrichtung auf rechtsbündig gesetzt. Eine ''0'' würde linksbündig bedeuten (default).
In Zeile **3** wird das GtkEntry read-only, Text kann nicht normal über die Tastatur eingegeben werden.
In Zeile **4** wird ''entry'' in ''table'' an folgende Position gesetzt:
* Die linke Seite von ''entry'' grenzt an Spalte **0** (also ganz links)
* Die rechte Seite von ''entry'' grenzt an Spalte **4** (entspricht bei 4 Spalten ganz rechts)
* Die obere Seite von ''entry'' grenzt an Zeile **0** (ganz oben)
* Die untere Seite von ''entry'' grenzt an Zeile **1** (erste Zeile)
FIXME