Fork of LCD-Window which works with Enhanced TextLCD from Wim
Fork of LcdWindow by
Diff: terminal.cpp
- 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
