- renamed RendererLine to ColoredLine and split it into its own files

Mon, 15 Dec 2014 21:59:24 +0200

author
Teemu Piippo <crimsondusk64@gmail.com>
date
Mon, 15 Dec 2014 21:59:24 +0200
changeset 46
19be47c9bab7
parent 45
87b180260a5d
child 47
35b968619b0c

- renamed RendererLine to ColoredLine and split it into its own files

CMakeLists.txt file | annotate | diff | comparison | revisions
sources/coloredline.cpp file | annotate | diff | comparison | revisions
sources/coloredline.h file | annotate | diff | comparison | revisions
sources/interface.cpp file | annotate | diff | comparison | revisions
--- a/CMakeLists.txt	Mon Dec 15 21:46:05 2014 +0200
+++ b/CMakeLists.txt	Mon Dec 15 21:59:24 2014 +0200
@@ -2,6 +2,7 @@
 project (zfc9000)
 
 set (SOURCE_FILES
+	sources/coloredline.cpp
 	sources/format.cpp
 	sources/interface.cpp
 	sources/main.cpp
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sources/coloredline.cpp	Mon Dec 15 21:59:24 2014 +0200
@@ -0,0 +1,151 @@
+/*
+	Copyright 2014 Teemu Piippo
+	All rights reserved.
+
+	Redistribution and use in source and binary forms, with or without
+	modification, are permitted provided that the following conditions
+	are met:
+
+	1. Redistributions of source code must retain the above copyright
+	   notice, this list of conditions and the following disclaimer.
+	2. Redistributions in binary form must reproduce the above copyright
+	   notice, this list of conditions and the following disclaimer in the
+	   documentation and/or other materials provided with the distribution.
+	3. Neither the name of the copyright holder nor the names of its
+	   contributors may be used to endorse or promote products derived from
+	   this software without specific prior written permission.
+
+	THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+	"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
+	TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
+	PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER
+	OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+	EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+	PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+	PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+	LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+	NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+	SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*/
+
+#include "coloredline.h"
+
+static const struct { Color color; bool bold; } g_colorCodes['v' - 'a' + 1] =
+{
+	{ RED,     true  }, // a - brick
+	{ YELLOW,  true  }, // b - tan
+	{ WHITE,   false }, // c - gray
+	{ GREEN,   true  }, // d - light green
+	{ YELLOW,  false }, // e - brown
+	{ YELLOW,  true  }, // f - gold yellow
+	{ RED,     true  }, // g - bright red
+	{ BLUE,    false }, // h - dark blue
+	{ YELLOW,  false }, // i - orange
+	{ WHITE,   true  }, // j - white
+	{ YELLOW,  true  }, // k - fire yellow
+	{ DEFAULT, false }, // l - untranslated
+	{ BLACK,   false }, // m - black
+	{ BLUE,    true  }, // n - light blue
+	{ YELLOW,  true  }, // o - cream
+	{ GREEN,   true  }, // p - olive green
+	{ GREEN,   false }, // q - dark green
+	{ RED,     false }, // r - dark red
+	{ YELLOW,  false }, // s - dark brown
+	{ MAGENTA, false }, // t - purple
+	{ BLACK,   true  }, // u - dark gray
+	{ CYAN,    true  }, // v - cyan
+};
+
+// -------------------------------------------------------------------------------------------------
+//
+METHOD
+ColoredLine::finalize() -> void
+{
+	if (m_activeColor != DEFAULT)
+		this->set_color (m_activeColor, false);
+
+	if (m_boldActive)
+		m_data << RLINE_OFF_BOLD;
+
+	m_final = true;
+}
+
+// -------------------------------------------------------------------------------------------------
+//
+METHOD
+ColoredLine::add_char (char ch) -> void
+{
+	if (m_final)
+		return; // Don't touch finalized lines.
+
+	if (ch == '\x1C' and m_colorCodeStage == 0)
+	{
+		m_colorCodeStage = 1;
+		return;
+	}
+
+	if (m_colorCodeStage == 1)
+	{
+		if (m_activeColor != DEFAULT)
+			this->set_color (m_activeColor, false);
+
+		if (m_boldActive)
+			m_data << RLINE_OFF_BOLD;
+
+		if (ch >= 'a' and ch <= 'v' and ch != 'l')
+		{
+			auto colorInfo = g_colorCodes[ch - 'a'];
+			m_activeColor = colorInfo.color;
+			m_boldActive = colorInfo.bold;
+			assert (m_activeColor < 8);
+			this->set_color (m_activeColor, true);
+
+			if (m_boldActive)
+				m_data << RLINE_ON_BOLD;
+		}
+
+		m_colorCodeStage = 0;
+		return;
+	}
+
+	if (isprint (ch))
+	{
+		m_string += ch;
+		m_data << int (ch);
+		++m_length;
+	}
+}
+
+// -------------------------------------------------------------------------------------------------
+//
+METHOD
+ColoredLine::set_color (Color a, bool on) -> void
+{
+	switch (a)
+	{
+	case BLACK:   m_data << (on ? RLINE_ON_BLACK   : RLINE_OFF_BLACK); break;
+	case RED:     m_data << (on ? RLINE_ON_RED     : RLINE_OFF_RED); break;
+	case GREEN:   m_data << (on ? RLINE_ON_GREEN   : RLINE_OFF_GREEN); break;
+	case YELLOW:  m_data << (on ? RLINE_ON_YELLOW  : RLINE_OFF_YELLOW); break;
+	case BLUE:    m_data << (on ? RLINE_ON_BLUE    : RLINE_OFF_BLUE); break;
+	case MAGENTA: m_data << (on ? RLINE_ON_MAGENTA : RLINE_OFF_MAGENTA); break;
+	case CYAN:    m_data << (on ? RLINE_ON_CYAN    : RLINE_OFF_CYAN); break;
+	case WHITE:   m_data << (on ? RLINE_ON_WHITE   : RLINE_OFF_WHITE); break;
+	case NUM_COLORS:
+	case DEFAULT: assert (false); break;
+	}
+}
+
+// -------------------------------------------------------------------------------------------------
+// How many rows does this line take up?
+//
+METHOD
+ColoredLine::rows (int cols) const -> int
+{
+	int rows = length() / cols;
+
+	if (length() % cols != 0)
+		rows++;
+
+	return max (rows, 1);
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sources/coloredline.h	Mon Dec 15 21:59:24 2014 +0200
@@ -0,0 +1,77 @@
+/*
+	Copyright 2014 Teemu Piippo
+	All rights reserved.
+
+	Redistribution and use in source and binary forms, with or without
+	modification, are permitted provided that the following conditions
+	are met:
+
+	1. Redistributions of source code must retain the above copyright
+	   notice, this list of conditions and the following disclaimer.
+	2. Redistributions in binary form must reproduce the above copyright
+	   notice, this list of conditions and the following disclaimer in the
+	   documentation and/or other materials provided with the distribution.
+	3. Neither the name of the copyright holder nor the names of its
+	   contributors may be used to endorse or promote products derived from
+	   this software without specific prior written permission.
+
+	THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+	"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
+	TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
+	PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER
+	OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+	EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+	PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+	PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+	LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+	NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+	SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*/
+
+#pragma once
+#include "main.h"
+
+enum
+{
+	RLINE_ON_BLACK = 256,
+	RLINE_ON_RED,
+	RLINE_ON_GREEN,
+	RLINE_ON_YELLOW,
+	RLINE_ON_BLUE,
+	RLINE_ON_MAGENTA,
+	RLINE_ON_CYAN,
+	RLINE_ON_WHITE,
+	RLINE_ON_BOLD,
+	RLINE_OFF_BLACK,
+	RLINE_OFF_RED,
+	RLINE_OFF_GREEN,
+	RLINE_OFF_YELLOW,
+	RLINE_OFF_BLUE,
+	RLINE_OFF_MAGENTA,
+	RLINE_OFF_CYAN,
+	RLINE_OFF_WHITE,
+	RLINE_OFF_BOLD,
+};
+
+class ColoredLine
+{
+public:
+	ColoredLine() {}
+
+	METHOD data() const -> const Vector<int>& { return m_data; }
+	METHOD length() const -> int { return m_length; }
+	METHOD add_char (char ch) -> void;
+	METHOD finalize() -> void;
+	METHOD rows (int cols) const -> int;
+
+private:
+	METHOD set_color (Color a, bool on) -> void;
+
+	Vector<int> m_data;
+	int m_length = 0;
+	bool m_final = false;
+	Color m_activeColor = DEFAULT;
+	bool m_boldActive = false;
+	int m_colorCodeStage = 0;
+	String m_string;
+};
--- a/sources/interface.cpp	Mon Dec 15 21:46:05 2014 +0200
+++ b/sources/interface.cpp	Mon Dec 15 21:59:24 2014 +0200
@@ -32,51 +32,7 @@
 #include "interface.h"
 #include "network/rconsession.h"
 #include "network/ipaddress.h"
-
-enum
-{
-	RLINE_ON_BLACK = 256,
-	RLINE_ON_RED,
-	RLINE_ON_GREEN,
-	RLINE_ON_YELLOW,
-	RLINE_ON_BLUE,
-	RLINE_ON_MAGENTA,
-	RLINE_ON_CYAN,
-	RLINE_ON_WHITE,
-	RLINE_ON_BOLD,
-	RLINE_OFF_BLACK,
-	RLINE_OFF_RED,
-	RLINE_OFF_GREEN,
-	RLINE_OFF_YELLOW,
-	RLINE_OFF_BLUE,
-	RLINE_OFF_MAGENTA,
-	RLINE_OFF_CYAN,
-	RLINE_OFF_WHITE,
-	RLINE_OFF_BOLD,
-};
-
-class RendererLine
-{
-public:
-	RendererLine() {}
-
-	METHOD data() const -> const Vector<int>& { return m_data; }
-	METHOD length() const -> int { return m_length; }
-	METHOD add_char (char ch) -> void;
-	METHOD finalize() -> void;
-	METHOD rows (int cols) const -> int;
-
-private:
-	METHOD set_color (Color a, bool on) -> void;
-
-	Vector<int> m_data;
-	int m_length = 0;
-	bool m_final = false;
-	Color m_activeColor = DEFAULT;
-	bool m_boldActive = false;
-	int m_colorCodeStage = 0;
-	String m_string;
-};
+#include "coloredline.h"
 
 static const int g_pageSize = 10;
 
@@ -97,7 +53,7 @@
 static bool g_needInputRender = false;
 static bool g_needOutputRender = false;
 static struct { char ch; int x; } g_cursorChar;
-static Vector<RendererLine> g_output;;
+static Vector<ColoredLine> g_output;;
 static int g_outputScroll = 0;
 static String g_title;
 static InputState g_inputState = INPUTSTATE_NORMAL;
@@ -105,32 +61,6 @@
 static IPAddress g_address;
 static String g_statusBarText;
 
-static const struct { Color color; bool bold; } g_colorCodes['v' - 'a' + 1] =
-{
-	{ RED,     true  }, // a - brick
-	{ YELLOW,  true  }, // b - tan
-	{ WHITE,   false }, // c - gray
-	{ GREEN,   true  }, // d - light green
-	{ YELLOW,  false }, // e - brown
-	{ YELLOW,  true  }, // f - gold yellow
-	{ RED,     true  }, // g - bright red
-	{ BLUE,    false }, // h - dark blue
-	{ YELLOW,  false }, // i - orange
-	{ WHITE,   true  }, // j - white
-	{ YELLOW,  true  }, // k - fire yellow
-	{ DEFAULT, false }, // l - untranslated
-	{ BLACK,   false }, // m - black
-	{ BLUE,    true  }, // n - light blue
-	{ YELLOW,  true  }, // o - cream
-	{ GREEN,   true  }, // p - olive green
-	{ GREEN,   false }, // q - dark green
-	{ RED,     false }, // r - dark red
-	{ YELLOW,  false }, // s - dark brown
-	{ MAGENTA, false }, // t - purple
-	{ BLACK,   true  }, // u - dark gray
-	{ CYAN,    true  }, // v - cyan
-};
-
 // -------------------------------------------------------------------------------------------------
 //
 static FUNCTION
@@ -255,7 +185,7 @@
 	g_input.clear();
 	g_input << "";
 	g_output.clear();
-	g_output << RendererLine();
+	g_output << ColoredLine();
 	g_title = format (APPNAME " %1 (%2)", full_version_string(), changeset_date_string());
 
 	for (int i = 0; i < NUM_COLORS; ++i)
@@ -908,7 +838,7 @@
 		if (ch == '\n')
 		{
 			g_output[g_output.size() - 1].finalize();
-			g_output << RendererLine();
+			g_output << ColoredLine();
 			continue;
 		}
 
@@ -940,97 +870,3 @@
 	session->set_password (password);
 	session->connect (g_address);
 }
-
-// -------------------------------------------------------------------------------------------------
-//
-METHOD
-RendererLine::finalize() -> void
-{
-	if (m_activeColor != DEFAULT)
-		this->set_color (m_activeColor, false);
-
-	if (m_boldActive)
-		m_data << RLINE_OFF_BOLD;
-
-	m_final = true;
-}
-
-// -------------------------------------------------------------------------------------------------
-//
-METHOD
-RendererLine::add_char (char ch) -> void
-{
-	if (m_final)
-		return; // Don't touch finalized lines.
-
-	if (ch == '\x1C' and m_colorCodeStage == 0)
-	{
-		m_colorCodeStage = 1;
-		return;
-	}
-
-	if (m_colorCodeStage == 1)
-	{
-		if (m_activeColor != DEFAULT)
-			this->set_color (m_activeColor, false);
-
-		if (m_boldActive)
-			m_data << RLINE_OFF_BOLD;
-
-		if (ch >= 'a' and ch <= 'v' and ch != 'l')
-		{
-			auto colorInfo = g_colorCodes[ch - 'a'];
-			m_activeColor = colorInfo.color;
-			m_boldActive = colorInfo.bold;
-			assert (m_activeColor < 8);
-			this->set_color (m_activeColor, true);
-
-			if (m_boldActive)
-				m_data << RLINE_ON_BOLD;
-		}
-
-		m_colorCodeStage = 0;
-		return;
-	}
-
-	if (isprint (ch))
-	{
-		m_string += ch;
-		m_data << int (ch);
-		++m_length;
-	}
-}
-
-// -------------------------------------------------------------------------------------------------
-//
-METHOD
-RendererLine::set_color (Color a, bool on) -> void
-{
-	switch (a)
-	{
-	case BLACK:   m_data << (on ? RLINE_ON_BLACK   : RLINE_OFF_BLACK); break;
-	case RED:     m_data << (on ? RLINE_ON_RED     : RLINE_OFF_RED); break;
-	case GREEN:   m_data << (on ? RLINE_ON_GREEN   : RLINE_OFF_GREEN); break;
-	case YELLOW:  m_data << (on ? RLINE_ON_YELLOW  : RLINE_OFF_YELLOW); break;
-	case BLUE:    m_data << (on ? RLINE_ON_BLUE    : RLINE_OFF_BLUE); break;
-	case MAGENTA: m_data << (on ? RLINE_ON_MAGENTA : RLINE_OFF_MAGENTA); break;
-	case CYAN:    m_data << (on ? RLINE_ON_CYAN    : RLINE_OFF_CYAN); break;
-	case WHITE:   m_data << (on ? RLINE_ON_WHITE   : RLINE_OFF_WHITE); break;
-	case NUM_COLORS:
-	case DEFAULT: assert (false); break;
-	}
-}
-
-// -------------------------------------------------------------------------------------------------
-// How many rows does this line take up?
-//
-METHOD
-RendererLine::rows (int cols) const -> int
-{
-	int rows = length() / cols;
-
-	if (length() % cols != 0)
-		rows++;
-
-	return max (rows, 1);
-}

mercurial