Fork of LCD-Window which works with Enhanced TextLCD from Wim

Fork of LcdWindow by Hendrik Lipka

Revision:
13:99b500b05716
Parent:
11:85f30e1f19fc
--- a/terminal.cpp	Tue Jan 12 20:40:39 2016 +0000
+++ b/terminal.cpp	Wed Jan 13 19:38:54 2016 +0000
@@ -24,43 +24,53 @@
 #include "terminal.h"
 #include "string.h"
 
-Terminal::Terminal(Window* window):Window() {
+Terminal::Terminal(Window* window):Window()
+{
     _window=window;
     _columns=window->getColumns();
     _rows=window->getRows();
     _lineBuffer=new char*[_rows];
+    _enabled = true;
     clear();
 }
 
-char* Terminal::createLine() {
+char* Terminal::createLine()
+{
     char* text=new char[_columns+1];
     memset(text,32,_columns);
     text[_columns]=0;
     return text;
 }
 
-void Terminal::character(int column, int row, int c) {
+void Terminal::character(int column, int row, int c)
+{
     if (column>_columns || row > _rows) {
         return;
     }
     _lineBuffer[row][column]=c;
-    _window->character(column,row,c);
+    if (_enabled) {
+        _window->character(column,row,c);
+    }
 
 }
 
-void Terminal::writeText(const unsigned int column, const unsigned int row, const char text[]) {
-    _window->writeText(column,row,text);
+void Terminal::writeText(const unsigned int column, const unsigned int row, const char text[])
+{
+    if (_enabled) {
+        _window->writeText(column,row,text);
+    }
     int min=column+strlen(text);
     if (min>_columns)
         min=_columns;
-    for (int i=column;i<min;i++) {
+    for (int i=column; i<min; i++) {
         _lineBuffer[row][i]=text[i-column]; // copy text into proper line
     }
 }
 
-void Terminal::addText(const char text[]) {
+void Terminal::addText(const char text[])
+{
     delete [] _lineBuffer[0];
-    for (int i=0;i<_rows-1;i++) {
+    for (int i=0; i<_rows-1; i++) {
         _lineBuffer[i]=_lineBuffer[i+1];
     }
     _lineBuffer[_rows-1]=createLine();
@@ -68,22 +78,48 @@
     int min=strlen(text);
     if (min>_columns)
         min=_columns;
-    for (int i=0;i<min;i++) {
+    for (int i=0; i<min; i++) {
         _lineBuffer[_rows-1][i]=text[i]; // copy text into proper line
     }
-    _window->clear();
-    for (int i=0;i<_rows;i++) {
-        _window->writeText(0,i,_lineBuffer[i]);
+    if (_enabled) {
+        _window->clear();
+        for (int i=0; i<_rows; i++) {
+            _window->writeText(0,i,_lineBuffer[i]);
+        }
     }
-    if (strlen(text) > _columns){
+    // text longer than line?
+    if (strlen(text) > _columns) {
         // add the remaining text to the next Line
         this->addText(text + _columns);
     }
 }
 
-void Terminal::clear() {
-    for (int i=0;i<_rows;i++) {
+void Terminal::clear()
+{
+    for (int i=0; i<_rows; i++) {
         _lineBuffer[i]=createLine();
     }
-    _window->clear();
+    if (_enabled) {
+        _window->clear();
+    }
+}
+
+void Terminal::disableDisplay()
+{
+    if (_enabled) {
+        _enabled = false;
+        _window->clear();
+    }
 }
+
+void Terminal::enableDisplay()
+{
+    if (! _enabled) {
+        _enabled = true;
+        _window->clear();
+        //Display the buffer-content
+        for (int i=0; i<_rows; i++) {
+            _window->writeText(0,i,_lineBuffer[i]);
+        }
+    }
+}
\ No newline at end of file