38 Text::
Text(const
unsigned int UI_MaxLines, const
unsigned int UI_MaxLineLength)
40 m_tkLines(UI_MaxLines), m_bNewLineRequired(true), m_uiMaxLineLength(UI_MaxLineLength)
60 for (
const char* pc_Out = STR_Out; (pc_Out != NULL) && (*pc_Out !=
'\0'); pc_Out ++)
62 if (m_bNewLineRequired)
64 m_tkLines.AddTail(tk::String(m_uiMaxLineLength));
65 m_bNewLineRequired =
false;
70 m_bNewLineRequired =
true;
75 if (! m_tkLines.IsEmpty())
77 m_tkLines.GetTail().Append(*pc_Out);
108 it.m_tkTopLine = m_tkLines.GetIterator();
110 it.m_bBottomIsUpToDate =
false;
116 for (
unsigned int ui = 0; ui < it.m_uiPageHeight; ui ++)
130 if (m_tkLines.IsValid(it.m_tkTopLine))
133 if (it.m_uiTopChar >= it.m_cliScreenInfo.
GetSafeWidth())
136 it.m_bBottomIsUpToDate =
false;
141 if (m_tkLines.MovePrevious(it.m_tkTopLine))
152 it.m_uiTopChar = m_tkLines.GetAt(it.m_tkTopLine).GetLength();
153 if (m_tkLines.GetAt(it.m_tkTopLine).GetLength() % it.m_cliScreenInfo.
GetSafeWidth() == 0)
159 it.m_uiTopChar -= m_tkLines.GetAt(it.m_tkTopLine).GetLength() % it.m_cliScreenInfo.
GetSafeWidth();
162 it.m_bBottomIsUpToDate =
false;
180 if (! it.m_bBottomIsUpToDate)
186 if (it.m_bBottomIsUpToDate && m_tkLines.IsValid(it.m_tkBottomLine))
188 CLI_ASSERT(m_tkLines.IsValid(it.m_tkTopLine));
189 if (m_tkLines.IsValid(it.m_tkTopLine))
193 if (it.m_uiTopChar >= m_tkLines.GetAt(it.m_tkTopLine).GetLength())
195 m_tkLines.MoveNext(it.m_tkTopLine);
199 if (PCLI_Out != NULL)
201 PrintBottomLine(it, *PCLI_Out);
206 if (it.m_uiBottomChar >= m_tkLines.GetAt(it.m_tkBottomLine).GetLength())
208 m_tkLines.MoveNext(it.m_tkBottomLine);
209 it.m_uiBottomChar = 0;
223 for (
unsigned int ui = 0; ui < it.m_uiPageHeight; ui ++)
244 it.m_tkBottomLine = it.m_tkTopLine;
245 it.m_uiBottomChar = it.m_uiTopChar;
246 it.m_bBottomIsUpToDate =
true;
249 unsigned int ui_LineCount = 0;
251 m_tkLines.IsValid(it.m_tkBottomLine)
252 && (ui_LineCount < it.m_uiPageHeight);
255 PrintBottomLine(it, CLI_Out);
258 if (B_FillPageWithBlankLines)
260 for (; ui_LineCount < it.m_uiPageHeight; ui_LineCount ++)
269 for (
unsigned int ui_CharCount = 0;
270 m_tkLines.IsValid(it.m_tkBottomLine);
273 const tk::String tk_Line = m_tkLines.GetAt(it.m_tkBottomLine);
275 if (it.m_uiBottomChar >= tk_Line.GetLength())
282 || (it.m_uiBottomChar == 0)
284 || (it.m_uiBottomChar % it.m_cliScreenInfo.
GetSafeWidth() != 0))
288 m_tkLines.MoveNext(it.m_tkBottomLine);
289 it.m_uiBottomChar = 0;
292 else if (ui_CharCount >= it.m_cliScreenInfo.
GetSafeWidth())
304 CLI_Out << tk_Line.GetChar(it.m_uiBottomChar);
305 it.m_uiBottomChar ++;
311 static const tk::Queue<tk::String>::Iterator InitIterator(
void)
313 tk::Queue<tk::String> it(0);
314 return it.GetIterator();
318 : m_cliScreenInfo(CLI_ScreenInfo), m_uiPageHeight(UI_PageHeight),
319 m_tkTopLine(InitIterator()), m_uiTopChar(0),
320 m_tkBottomLine(InitIterator()), m_uiBottomChar(0), m_bBottomIsUpToDate(false)
325 : m_cliScreenInfo(it.m_cliScreenInfo), m_uiPageHeight(it.m_uiPageHeight),
326 m_tkTopLine(it.m_tkTopLine), m_uiTopChar(it.m_uiTopChar),
327 m_tkBottomLine(it.m_tkBottomLine), m_uiBottomChar(it.m_uiBottomChar), m_bBottomIsUpToDate(it.m_bBottomIsUpToDate)
static OutputDevice & GetNullDevice(void)
Null device singleton.
Main namespace of the CLI library.
#define CLI_ASSERT(a)
CLI assertion macro.
const bool GetbWrapLines(void) const
Line wrapping characteristic accessor.
void Begin(TextIterator &it) const
Retrieves a text head iterator.
virtual const bool WouldOutput(const OutputDevice &CLI_Device) const
Stack overflow protection.
virtual const bool WouldOutput(const OutputDevice &CLI_Device) const
Stack overflow protection.
#define CLI_NS_END(__ns)
End a namespace definition.
virtual const bool CloseDevice(void)
Device closure handler.
virtual void Beep(void) const
Beep handler.
virtual void CleanScreen(void) const
Clean screen.
const bool PageUp(TextIterator &it) const
Moves iterator one page up.
virtual void PutString(const char *const STR_Out) const
Output handler.
CLI library default pre-compiled header.
virtual const bool OpenDevice(void)
Device opening handler.
void End(TextIterator &it, const OutputDevice *const PCLI_Out) const
Retrieves a text end iterator.
#define CLI_NS_BEGIN(__ns)
Begin a namespace definition.
const bool LineDown(TextIterator &it, const OutputDevice *const PCLI_Out) const
Moves iterator one line down.
const bool LineUp(TextIterator &it) const
Moves iterator one line up.
const unsigned int GetSafeWidth(void) const
Safe screen width accessor.
const bool PageDown(TextIterator &it, const OutputDevice *const PCLI_Out) const
Moves iterator one page down.
virtual ~Text(void)
Destructor.
const IOEndl endl
The common IOEndl object.
Simple line user interface object.
void PrintPage(TextIterator &it, const OutputDevice &CLI_Out, const bool B_FillPageWithBlankLines) const
Print out a page of text.