# PIP: PIConsole Class Reference

PIConsole Class Reference

Console output class. More...

Inheritance diagram for PIConsole:
[legend]

## Public Types

enum

Format {
Normal = 0x01, Bold = 0x02 , Underline = 0x10, Blink = 0x20,
Inverse = 0x40, Black = 0x100, Red = 0x200, Green = 0x400,
Yellow = 0x800, Blue = 0x1000, Magenta = 0x2000, Cyan = 0x4000,
White = 0x8000, BackBlack = 0x10000, BackRed = 0x20000, BackGreen = 0x40000,
BackYellow = 0x80000, BackBlue = 0x100000, BackMagenta = 0x200000, BackCyan = 0x400000,
BackWhite = 0x800000, Dec = 0x1000000, Hex = 0x2000000, Oct = 0x4000000,
Bin = 0x8000000, Scientific = 0x10000000, SystemTimeSplit = 0x20000000, SystemTimeSeconds = 0x40000000
}

| Variables output format. More...
enum | Alignment { Nothing, Left, Right }
| Column labels alignment. More...
Public Types inherited from PIThread
enum | Priority { piLowerst, piLow, piNormal, piHigh, piHighest }
| Priority of thread. More...

## Public Member Functions

| PIConsole (bool startNow=true, PIKbdListener::KBFunc slot=0)
| Constructs PIConsole with key handler "slot" and if "startNow" start it.
void | addString (const PIString &name, int column=1, FormatFlags format=PIConsole::Normal)
| Add to current tab to column "column" string "name" with format "format".
void | addVariable (const PIString &name, const PIString *ptr, int column=1, FormatFlags format=PIConsole::Normal)
| Add to current tab to column "column" variable with label "name", pointer "ptr" and format "format".
void | addVariable (const PIString &name, const char *ptr, int column=1, FormatFlags format=PIConsole::Normal)
| Add to current tab to column "column" variable with label "name", pointer "ptr" and format "format".
void | addVariable (const PIString &name, const bool *ptr, int column=1, FormatFlags format=PIConsole::Normal)
| Add to current tab to column "column" variable with label "name", pointer "ptr" and format "format".
void | addVariable (const PIString &name, const short *ptr, int column=1, FormatFlags format=PIConsole::Normal)
| Add to current tab to column "column" variable with label "name", pointer "ptr" and format "format".
void | addVariable (const PIString &name, const int *ptr, int column=1, FormatFlags format=PIConsole::Normal)
| Add to current tab to column "column" variable with label "name", pointer "ptr" and format "format".
void | addVariable (const PIString &name, const long *ptr, int column=1, FormatFlags format=PIConsole::Normal)
| Add to current tab to column "column" variable with label "name", pointer "ptr" and format "format".
void | addVariable (const PIString &name, const llong *ptr, int column=1, FormatFlags format=PIConsole::Normal)
| Add to current tab to column "column" variable with label "name", pointer "ptr" and format "format".
void | addVariable (const PIString &name, const uchar *ptr, int column=1, FormatFlags format=PIConsole::Normal)
| Add to current tab to column "column" variable with label "name", pointer "ptr" and format "format".
void | addVariable (const PIString &name, const ushort *ptr, int column=1, FormatFlags format=PIConsole::Normal)
| Add to current tab to column "column" variable with label "name", pointer "ptr" and format "format".
void | addVariable (const PIString &name, const uint *ptr, int column=1, FormatFlags format=PIConsole::Normal)
| Add to current tab to column "column" variable with label "name", pointer "ptr" and format "format".
void | addVariable (const PIString &name, const ulong *ptr, int column=1, FormatFlags format=PIConsole::Normal)
| Add to current tab to column "column" variable with label "name", pointer "ptr" and format "format".
void | addVariable (const PIString &name, const ullong *ptr, int column=1, FormatFlags format=PIConsole::Normal)
| Add to current tab to column "column" variable with label "name", pointer "ptr" and format "format".
void | addVariable (const PIString &name, const float *ptr, int column=1, FormatFlags format=PIConsole::Normal)
| Add to current tab to column "column" variable with label "name", pointer "ptr" and format "format".
void | addVariable (const PIString &name, const double *ptr, int column=1, FormatFlags format=PIConsole::Normal)
| Add to current tab to column "column" variable with label "name", pointer "ptr" and format "format".
void | addVariable (const PIString &name, const PISystemTime *ptr, int column=1, FormatFlags format=PIConsole::Normal)
| Add to current tab to column "column" variable with label "name", pointer "ptr" and format "format".
void | addVariable (const PIString &name, const PIProtocol *ptr, int column=1, FormatFlags format=PIConsole::Normal)
| Add to current tab to column "column" variable with label "name", pointer "ptr" and format "format". More...
void | addVariable (const PIString &name, const PIDiagnostics *ptr, int column=1, FormatFlags format=PIConsole::Normal)
| Add to current tab to column "column" variable with label "name", pointer "ptr" and format "format". More...
void | addBitVariable (const PIString &name, const void *ptr, int fromBit, int bitsCount, int column=1, FormatFlags format=PIConsole::Normal)
| Add to current tab to column "column" bits field with label "name", pointer "ptr" and format "format".
void | addEmptyLine (int column=1, uint count=1)
| Add to current tab to column "column" "count" empty lines.
uint | tabsCount () const
| Returns tabs count.
PIString | currentTab () const
| Returns current tab name.
int | currentTabIndex () const
| Returns current tab index.
int | addTab (const PIString &name, char bind_key=0)
| Add new tab with name "name", bind key "bind_key" and returns this tab index.
void | removeTab (uint index)
| Remove tab with index "index".
void | removeTab (const PIString &name)
| Remove tab with name "name".
void | clearTab (uint index)
| Clear content of tab with index "index".
void | clearTab (const PIString &name)
| Clear content of tab with name "name".
bool | setTab (uint index)
| Set current tab to tab with index "index", returns if tab exists.
bool | setTab (const PIString &name)
| Set current tab to tab with name "name", returns if tab exists.
bool | setTabBindKey (uint index, char bind_key)
| Set tab with index "index" bind key to "bind_key", returns if tab exists.
bool | setTabBindKey (const PIString &name, char bind_key)
| Set tab with name "name" bind key to "bind_key", returns if tab exists.
void | clearTabs (bool clearScreen=true)
| Remove all tabs and if "clearScreen" clear the screen.
void | addCustomStatus (const PIString &str)
| Set custom status text of current tab to "str".
void | clearCustomStatus ()
| Clear custom status text of current tab.
Alignment | defaultAlignment () const
| Returns default alignment.
void | setDefaultAlignment (Alignment align)
| Set default alignment to "align".
void | setColumnAlignment (int col, Alignment align)
| Set column "col" alignment to "align".
void | setColumnAlignmentToAll (Alignment align)
| Set all columns of all tabs alignment to "align".
void | enableExitCapture (char key= 'Q')
| Directly call function from PIKbdListener.
void | disableExitCapture ()
| Directly call function from PIKbdListener.
bool | exitCaptured () const
| Directly call function from PIKbdListener.
char | exitKey () const
| Directly call function from PIKbdListener.
Public Member Functions inherited from PIThread
| PIThread (void *data, ThreadFunc func, bool startNow=false, int loop_delay=-1)
| Contructs thread with custom data "data", external function "func" and main loop delay "loop_delay".
| PIThread (bool startNow=false, int loop_delay=-1)
| Contructs thread with main loop delay "loop_delay".
void | setData (void *d)
| Set common data passed to external function.
void | setSlot (ThreadFunc func)
| Set external function that will be executed after every run()
void | setPriority (PIThread::Priority prior)
| Set priority of thread.
void * | data () const
| Returns common data passed to external function.
PIThread::Priority | priority () const
| Return priority of thread.
bool | isRunning () const
| Return `true` if thread is running.
void | needLockRun (bool need)
| Set necessity of lock every run with internal mutex.
PIMutex & | mutex ()
| Return internal mutex.
bool | start (int timer_delay)
| Start thread. More...
bool | start (ThreadFunc func, int timer_delay)
| Start thread. More...
bool | startOnce ()
| Start thread without internal loop. More...
bool | startOnce (ThreadFunc func)
| Start thread without internal loop. More...
void | stop (bool wait)
| Stop thread. More...
void | terminate ()
| Strongly stop thread. More...
bool | waitForStart (int timeout_msecs)
| Wait for thread start. More...
bool | waitForFinish (int timeout_msecs)
| Wait for thread finish. More...
void | lock ()
| Lock internal mutex.
void | unlock ()
| Unlock internal mutex.
void | started ()
| Raise on thread start.
void | stopped ()
| Raise on thread stop.
Public Member Functions inherited from PIObject
| PIObject (const PIString &name=PIString())
| Contructs PIObject with name "name".
PIString | name () const
| Returns object name.
virtual const char * | className () const
| Returns object class name.
virtual const char * | superClassName () const
| Returns object superclass name.
bool | debug () const
| Return if debug of this object is active.
void | setName (const PIString &name)
| Set object name.
void | setDebug (bool debug)
| Set object debug active.
const PIMap< PIString, PIVariant > & | properties () const
| Returns properties of the object.
int | propertiesCount () const
| Returns properties count of the object.
PIVariant | property (const PIString &name) const
| Returns property with name "name".
void | setProperty (const PIString &name, const PIVariant &value)
| Set property with name "name" to "value". If there is no such property in object it will be added.
bool | isPropertyExists (const PIString &name) const
| Returns if property with name "name" exists.

## Handlers

void | clearVariables (bool clearScreen)
| Remove all columns at current tab and if "clearScreen" clear the screen.
void | waitForFinish ()
| block until finished (exit key will be pressed)
void | start (bool wait)
| Start console output and if "wait" block until finished (exit key will be pressed)
void | stop (bool clear)
| Stop console output and if "clear" clear the screen.

## Events

void | keyPressed (PIKbdListener::KeyEvent key, void *data)
| Raise on key "key" pressed, "data" is pointer to PIConsole object.

## Additional Inherited Members

Static Public Member Functions inherited from PIObject
static void | piDisconnect (PIObject *src, const PIString &sig)
| Disconnect object "src" from all connections with event name "sig".
static void | piDisconnect (PIObject *src)
| Disconnect object "src" from all connections, i.e. all connections where object "src" is emitter.
static PIObject * | findByName (const PIString &name)
| Returns PIObject* with name "name" or 0, if there is no object found.
Protected Member Functions inherited from PIThread
virtual void | end ()
| Function executed once at the end of thread.
Protected Member Functions inherited from PIObject
PIObject * | emitter () const
| Returns PIObject* which has raised an event. This value is correct only in definition of some event handler.
virtual void | propertyChanged (const PIString &name)
| Virtual function executes after property with name "name" has been changed.
void | deleted ()
| Raise before object delete. More...
Related Functions inherited from PIObject
#define | piCoutObj
| Macro used for conditional (piDebug and PIObject::debug()) output to PICout for subclasses of PIObject.
#define | PIOBJECT(name)
| you should use this macro after class declaration to use EVENT and EVENT_HANDLER and correct piCoutObj output
#define | PIOBJECT_SUBCLASS(name, parent)
| you should use this macro after class declaration to use EVENT and EVENT_HANDLER of parent class
#define | EVENT_HANDLER0(ret, name) ret name()
| declare event handler "event" with name "name" and return type "ret", ret name()
#define | EVENT_HANDLER1(ret, name, type0, var0) ret name(type0 var0)
| declare event handler "event" with name "name" and return type "ret", ret name(type0 var0)
#define | EVENT_HANDLER2(ret, name, type0, var0, type1, var1) ret name(type0 var0, type1 var1)
| declare event handler "event" with name "name" and return type "ret", ret name(type0 var0, type1 var1)
#define | EVENT_HANDLER3(ret, name, type0, var0, type1, var1, type2, var2) ret name(type0 var0, type1 var1, type2 var2)
| declare event handler "event" with name "name" and return type "ret", ret name(type0 var0, type1 var1, type2 var2)
#define | EVENT_HANDLER4(ret, name, type0, var0, type1, var1, type2, var2, type3, var3) ret name(type0 var0, type1 var1, type2 var2, type3 var3)
| declare event handler "event" with name "name" and return type "ret", ret name(type0 var0, type1 var1, type2 var2, type3 var3)
#define | EVENT_HANDLER EVENT_HANDLER0
| EVENT_HANDLER is synonym of EVENT_HANDLER0.
#define | EVENT_VHANDLER0(ret, name) virtual ret name()
| declare virtual event handler "event" with name "name" and return type "ret", virtual ret name()
#define | EVENT_VHANDLER1(ret, name, type0, var0) virtual ret name(type0 var0)
| declare virtual event handler "event" with name "name" and return type "ret", virtual ret name(type0 var0)
#define | EVENT_VHANDLER2(ret, name, type0, var0, type1, var1) virtual ret name(type0 var0, type1 var1)
| declare virtual event handler "event" with name "name" and return type "ret", virtual ret name(type0 var0, type1 var1)
#define | EVENT_VHANDLER3(ret, name, type0, var0, type1, var1, type2, var2) virtual ret name(type0 var0, type1 var1, type2 var2)
| declare virtual event handler "event" with name "name" and return type "ret", virtual ret name(type0 var0, type1 var1, type2 var2)
#define | EVENT_VHANDLER4(ret, name, type0, var0, type1, var1, type2, var2, type3, var3) virtual ret name(type0 var0, type1 var1, type2 var2, type3 var3)
| declare virtual event handler "event" with name "name" and return type "ret", virtual ret name(type0 var0, type1 var1, type2 var2, type3 var3)
#define | EVENT_VHANDLER EVENT_VHANDLER0
| EVENT_VHANDLER is synonym of EVENT_VHANDLER0.
#define | EVENT0(name) void name();
| declare event "event" with name "name", void name();
#define | EVENT1(name, type0, var0) void name(type0 var0);
| declare event "event" with name "name", void name(type0 var0);
#define | EVENT2(name, type0, var0, type1, var1) void name(type0 var0, type1 var1);
| declare event "event" with name "name", void name(type0 var0, type1 var1);
#define | EVENT3(name, type0, var0, type1, var1, type2, var2) void name(type0 var0, type1 var1, type2 var2);
| declare event "event" with name "name", void name(type0 var0, type1 var1, type2 var2);
#define | EVENT4(name, type0, var0, type1, var1, type2, var2, type3, var3) void name(type0 var0, type1 var1, type2 var2, type3 var3);
| declare event "event" with name "name", void name(type0 var0, type1 var1, type2 var2, type3 var3);
#define | EVENT EVENT0
| EVENT is synonym of EVENT0.
#define | CONNECTU(src, event, dest, handler)
| connect event "event" from object "src" to event handler "handler". "Event" and "handler" must has equal argument lists.
#define | CONNECT0(ret, src, event, dest, handler)
| connect event "event" from object "src" to event handler "handler" with return type "ret" from object "dest" with check of event and handler exists
#define | CONNECT1(ret, type0, src, event, dest, handler)
| connect event "event" from object "src" to event handler "handler" with return type "ret" from object "dest" with check of event and handler exists
#define | CONNECT2(ret, type0, type1, src, event, dest, handler)
| connect event "event" from object "src" to event handler "handler" with return type "ret" from object "dest" with check of event and handler exists
#define | CONNECT3(ret, type0, type1, type2, src, event, dest, handler)
| connect event "event" from object "src" to event handler "handler" with return type "ret" from object "dest" with check of event and handler exists
#define | CONNECT4(ret, type0, type1, type2, type3, src, event, dest, handler)
| connect event "event" from object "src" to event handler "handler" with return type "ret" from object "dest" with check of event and handler exists
#define | CONNECT CONNECT0
| CONNECT is synonym of CONNECT0.
#define | WEAK_CONNECT0(ret, src, event, dest, handler)
| connect event "event" from object "src" to event handler "handler" with return type "ret" from object "dest" without check of event exists
#define | WEAK_CONNECT1(ret, type0, src, event, dest, handler)
| connect event "event" from object "src" to event handler "handler" with return type "ret" from object "dest" without check of event exists
#define | WEAK_CONNECT2(ret, type0, type1, src, event, dest, handler)
| connect event "event" from object "src" to event handler "handler" with return type "ret" from object "dest" without check of event exists
#define | WEAK_CONNECT3(ret, type0, type1, type2, src, event, dest, handler)
| connect event "event" from object "src" to event handler "handler" with return type "ret" from object "dest" without check of event exists
#define | WEAK_CONNECT4(ret, type0, type1, type2, type3, src, event, dest, handler)
| connect event "event" from object "src" to event handler "handler" with return type "ret" from object "dest" without check of event exists
#define | WEAK_CONNECT WEAK_CONNECT0
| WEAK_CONNECT is synonym of WEAK_CONNECT0.
#define | DISCONNECT0(ret, src, event, dest, handler)
| piDisconnect event "event" from object "src" from event handler "handler" with return type "ret" from object "dest"
#define | DISCONNECT1(ret, type0, src, event, dest, handler)
| piDisconnect event "event" from object "src" from event handler "handler" with return type "ret" from object "dest"
#define | DISCONNECT2(ret, type0, type1, src, event, dest, handler)
| piDisconnect event "event" from object "src" from event handler "handler" with return type "ret" from object "dest"
#define | DISCONNECT3(ret, type0, type1, type2, src, event, dest, handler)
| piDisconnect event "event" from object "src" from event handler "handler" with return type "ret" from object "dest"
#define | DISCONNECT4(ret, type0, type1, type2, type3, src, event, dest, handler)
| piDisconnect event "event" from object "src" from event handler "handler" with return type "ret" from object "dest"
#define | DISCONNECT DISCONNECT0
| DISCONNECT is synonym of DISCONNECT0.
#define | HANDLER(handler)
| Returns pointer to events handler "handler".

## Detailed Description

Console output class.

# Synopsis

This class provides output to console with automatic alignment and update. It supports tabs, keyboard listening, formats and colors.

# Layout

PIConsole works with variable pointers. You should add your variables with functions addVariable() which receives label name, pointer to variable and optional column and format. Columns count is dynamically increased if new column used. E.g. if you add variable to empty tab to column 3, columns count will be increased to 3, but two firsts columns will be empty. Each column filled from top to bottom, but you can add just string with function addString() or add empty line with function addEmptyLine(). Layout scheme:

# Keyboard usage

PIConsole should to be single in application. PIConsole aggregate PIKbdListener which grab keyboard and automatic switch tabs by theirs bind keys. If there is no tab binded to pressed key external function "slot" will be called

## Member Enumeration Documentation

enum PIConsole::Format

Variables output format.

Enumerator
Normal | Default console format
Bold | Bold text
Underline | Underlined text
Blink | Blinked text
Inverse | Swap text and background colors
Black | Black text
Red | Red text
Green | Green text
Yellow | Yellow text
Blue | Blue text
Magenta | Magenta text
Cyan | Cyan text
White | White text
BackBlack | Black background
BackRed | Red background
BackGreen | Green background
BackYellow | Yellow background
BackBlue | Blue background
BackMagenta | Magenta background
BackCyan | Cyan background
BackWhite | White background
Dec | Decimal base for integers
Hex | Hexadecimal base for integers
Oct | Octal base for integers
Bin | Binary base for integers
Scientific | Scientific representation of floats
SystemTimeSplit | PISystemTime split representation (* s, * ns)
SystemTimeSeconds | PISystemTime seconds representation (*.* s)

enum PIConsole::Alignment

Column labels alignment.

Enumerator
Nothing | No alignment
Left | Labels align left and variables align left
Right | Labels align right and variables align left

## Member Function Documentation

void PIConsole::addVariable | ( | const PIString & | name,
|  | const PIProtocol * | ptr,
|  | int | col = `1`,
|  | FormatFlags | format = `PIConsole::Normal`
| ) |  |

Add to current tab to column "column" variable with label "name", pointer "ptr" and format "format".

This function add to column "column" next lines:

- "protocol <name>"
- "Rec - receiverDeviceName": PIProtocol::receiverDeviceState
- "Send - senderDeviceName": PIProtocol::senderDeviceState
- "Received count": PIProtocol::receiveCount
- "Invalid count": PIProtocol::wrongCount
- "Missed count": PIProtocol::missedCount
- "Sended count": PIProtocol::sendCount
- "Immediate Frequency, Hz": PIProtocol::immediateFrequency
- "Integral Frequency, Hz": PIProtocol::integralFrequency
- "Receive speed": PIProtocol::receiveSpeed
- "Send speed": PIProtocol::sendSpeed
- "Receiver history size": PIProtocol::receiverHistorySize
- "Sender history size": PIProtocol::senderHistorySize
- "Disconnect Timeout, s": PIProtocol::disconnectTimeout
- "Quality": PIProtocol::quality

void PIConsole::addVariable | ( | const PIString & | name,
|  | const PIDiagnostics * | ptr,
|  | int | col = `1`,
|  | FormatFlags | format = `PIConsole::Normal`
| ) |  |

Add to current tab to column "column" variable with label "name", pointer "ptr" and format "format".

This function add to column "column" next lines:

- "<name> diagnostics"
- "Received count": PIDiagnostics::receiveCount
- "Invalid count": PIDiagnostics::wrongCount
- "Sended count": PIDiagnostics::sendCount
- "Immediate Frequency, Hz": PIDiagnostics::immediateFrequency
- "Integral Frequency, Hz": PIDiagnostics::integralFrequency
- "Receive speed": PIDiagnostics::receiveSpeed
- "Send speed": PIDiagnostics::sendSpeed
- "Quality": PIDiagnostics::quality