====== Fenster aktualisieren ====== NCurses arbeitet mit Fenstern, die Zeichen und Attribute (Farben/Schriftstil) in eigenen Datenstrukturen speichern. Wenn man diese Datenstrukturen verändert, z.B. mit [[gui:ncurses:lib:mvaddstr()]], so passiert auf dem Bildschirm noch nichts. Die Datenstrukturen, die NCurses anlegt, sind eine Art Zwischenpuffer, in dem alle Änderungen eingepflegt werden, bis der Benutzer sagt, dass er alles so geändert hat, wie er sich das vorstellt und die Daten jetzt an das Terminal gesendet werden können. ===== Fensterinhalt aktualisieren ===== Hierfür gibt es die Funktionen [[gui:ncurses:lib:refresh()]] und natürlich die dazugehörige Window-Variante [[gui:ncurses:lib:wrefresh()]]. Die Refresh-Funktionen rufen die beiden Funktionen [[gui:ncurses:lib:wnoutrefresh()]] und [[gui:ncurses:lib:doupdate()]]. wnoutrefresh kopiert dabei alle veränderten Zeichen in einen virtuellen Screen. Diese veränderten Zeichen werden anschließend mit doupdate() an das Terminal gesendet. Wenn mehrere Fenster aktualisiert werden sollen, so ist es besser erst alle Änderungen der zu aktuallisierenden Fenster mit [[gui:ncurses:lib:wnoutrefresh()]] in den virtuellen Screen zu kopieren um dann alle Änderungen mit einem einzigen [[gui:ncurses:lib:doupdate()]] an das Terminal zu schicken. ===== Touch ===== Auch wenn ein Fenster aktualisiert werden soll, so lohnt sich das erst, wenn auch wirklich eine Veränderung stattgefunden hat. Hierfür wird sich gemerkt, ob das Fenster "berührt" wurde, also ob es überhaupt eine Veränderung in der Datenstruktur gegeben hat, die man einem Terminal mitteilen müsste. Diese Information wird zeilenweise gespeichert und kann mit der Funktion [[gui:ncurses:lib:touchline()]], bzw. [[gui:ncurses:lib:wtouchln()]] gesetzt werden und mit [[gui:ncurses:lib:is_linetouched()]] abgefragt werden. Man kann auch gleich ein ganzes Fenster für verändert erklären: [[gui:ncurses:lib:touchwin()]]. Dies ignoriert jegliche Versuche, die Übertragung zu optimierung, kann aber erforderlich werden, wenn man ein Fenster in den Vordergrund holen möchte und damit ein anderes Fenster überzeichnen möchte. Hat man eine Änderung gemacht und diese auch vor dem Senden wieder zurückgesetzt, so ist es möglich das Touchflag zurückzunehmen, allerdings nur für das komplette Fenster: [[gui:ncurses:lib:untouchwin()]]. Hier ist entsprechend Vorsicht geboten.