====== 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