legatt 32f4597c4d Base frontend module
- Naming style migrated to camel-case
- P7lib logger sources added
- Vcpkg manifest, CMake presets and build moved to root
- SDL2, Vulkan and RmlUi dependencies added
- Logger LOG macro added
- Logger  configuration
- SDL2 window configuration
- Vulkan configuration
- RmlUi configuration
- SDL event loop
2025-08-08 00:07:32 +03:00

930 lines
28 KiB
C++

////////////////////////////////////////////////////////////////////////////////
// /
// 2012-2020 (c) Baical /
// /
// This library is free software; you can redistribute it and/or /
// modify it under the terms of the GNU Lesser General Public /
// License as published by the Free Software Foundation; either /
// version 3.0 of the License, or (at your option) any later version. /
// /
// This library is distributed in the hope that it will be useful, /
// but WITHOUT ANY WARRANTY; without even the implied warranty of /
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU /
// Lesser General Public License for more details. /
// /
// You should have received a copy of the GNU Lesser General Public /
// License along with this library. /
// /
////////////////////////////////////////////////////////////////////////////////
#ifndef ICONSOLE_H
#define ICONSOLE_H
#define CON_RIGHT_ALT_PRESSED 0x0001 // the right alt key is pressed.
#define CON_LEFT_ALT_PRESSED 0x0002 // the left alt key is pressed.
#define CON_RIGHT_CTRL_PRESSED 0x0004 // the right ctrl key is pressed.
#define CON_LEFT_CTRL_PRESSED 0x0008 // the left ctrl key is pressed.
#define CON_SHIFT_PRESSED 0x0010 // the shift key is pressed.
#define CON_NUMLOCK_ON 0x0020 // the numlock light is on.
#define CON_SCROLLLOCK_ON 0x0040 // the scrolllock light is on.
#define CON_CAPSLOCK_ON 0x0080 // the capslock light is on.
#define CON_ENHANCED_KEY 0x0100 // the key is enhanced.
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
class IConsole
{
public:
enum eColor
{
eBlack = 0,
eBlue,
eGreen,
eCyan,
eRed,
eMagenta,
eBrown,
eLightGray,
eDarkGray,
eLightBlue,
eLightGreen,
eLightCyan,
eLightRed,
eLightMagenta,
eYellow,
eWhite,
eColorsMax
};
enum eEvent
{
eSize = 0,
eMouse,
eKey,
eFocus,
eEventsMax
};
enum eKey
{
eKeyEsc = 27,
eKeyEnter = 13,
eKeySpace = 32,
eKeyExtra = 0x100,
eKeyArrowLeft,
eKeyArrowRight,
eKeyArrowDown,
eKeyArrowUp,
eKeyPageUp,
eKeyPageDown,
eKeyHome,
eKeyEnd,
eKeyF1,
eKeyF2,
eKeyF3,
eKeyF4,
eKeyF5,
eKeyF6,
eKeyF7,
eKeyF8,
eKeyF9,
eKeyF10,
eKeyF11,
eKeyF12,
eKeyDel,
eKeyInsert,
eKeyTab,
eKeyBackSpace,
eKeyMax
};
struct sSize
{
tUINT32 uW;
tUINT32 uH;
};
struct sMouse
{
tUINT32 uX;
tUINT32 uY;
tUINT32 uButton;
};
struct sKey
{
tBOOL bDown;
tUINT16 wKey;
tUINT16 wCount;
tUINT32 uControls;
};
struct sFocus
{
tBOOL bFocus;
};
struct sInput
{
IConsole::eEvent eEvent;
union
{
sSize stSize;
sMouse stMouse;
sKey stKey;
sFocus stFocus;
};
};
virtual tBOOL SetCursor(tUINT32 i_uX, tUINT32 i_uY) = 0;
virtual tUINT32 GetCursorX() = 0;
virtual tUINT32 GetCursorY() = 0;
virtual tUINT32 GetWidth() = 0;
virtual tUINT32 GetHeight() = 0;
virtual tBOOL SetTextAttr(IConsole::eColor i_eFg, IConsole::eColor i_eBg) = 0;
virtual tBOOL GetInput(IConsole::sInput &o_rInput) = 0;
virtual tBOOL Clear() = 0;
virtual tBOOL Clear(tUINT32 i_uX, tUINT32 i_uY, tUINT32 i_uW, tUINT32 i_uH, IConsole::eColor i_eBg) = 0;
virtual size_t WriteTextB(const tXCHAR *i_pText, size_t i_szText) = 0;
virtual size_t WriteTextB(IConsole::eColor i_eFg,
IConsole::eColor i_eBg,
size_t i_szLenMin,
size_t i_szLenMax,
size_t i_szOffset,
tXCHAR *i_pText,
size_t i_szText,
size_t i_szTextMax
) = 0;
virtual size_t WriteTextO(IConsole::eColor i_eFg,
IConsole::eColor i_eBg,
size_t i_szLenMin,
size_t i_szLenMax,
size_t i_szOffset,
const tXCHAR *i_pFormat,
...
)
{
va_list l_pVA;
size_t l_szReturn = 0;
va_start(l_pVA, i_pFormat);
l_szReturn = WriteTextF(i_eFg, i_eBg, i_szLenMin, i_szLenMax, i_szOffset, i_pFormat, l_pVA);
va_end(l_pVA);
return l_szReturn;
}
virtual size_t WriteText(IConsole::eColor i_eFg,
IConsole::eColor i_eBg,
size_t i_szLenMin,
size_t i_szLenMax,
const tXCHAR *i_pFormat,
...
)
{
va_list l_pVA;
size_t l_szReturn = 0;
va_start(l_pVA, i_pFormat);
l_szReturn = WriteTextF(i_eFg, i_eBg, i_szLenMin, i_szLenMax, 0, i_pFormat, l_pVA);
va_end(l_pVA);
return l_szReturn;
}
virtual size_t WriteTextF(IConsole::eColor i_eFg,
IConsole::eColor i_eBg,
size_t i_szLenMin,
size_t i_szLenMax,
size_t i_szOffset,
const tXCHAR *i_pFormat,
va_list i_pVA
) = 0;
virtual tBOOL Present() = 0;
};
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
class CConsoleWnd
{
struct stHelp
{
tXCHAR *pString;
IConsole::eColor eBgColor;
IConsole::eColor eFgColor;
stHelp(const tXCHAR *i_pString, IConsole::eColor i_eBgColor, IConsole::eColor i_eFgColor)
{
pString = PStrDub(i_pString);
eBgColor = i_eBgColor;
eFgColor = i_eFgColor;
}
~stHelp()
{
if (pString)
{
free(pString);
pString = NULL;
}
}
};
public:
struct stColumn
{
tUINT32 uId;
tBOOL bVisible;
tXCHAR *pCaption;
size_t szCaption;
stColumn(tUINT32 i_uId, tBOOL i_bVisible, const tXCHAR *i_pCaption)
: pCaption(NULL)
{
uId = i_uId;
bVisible = i_bVisible;
SetCaption(i_pCaption);
}
~stColumn()
{
if (pCaption)
{
PStrFreeDub(pCaption);
pCaption = NULL;
}
uId = 0;
bVisible = FALSE;
szCaption = 0;
}
void SetCaption(const tXCHAR *i_pCaption)
{
if (pCaption)
{
PStrFreeDub(pCaption);
}
pCaption = PStrDub(i_pCaption);
szCaption = PStrLen(pCaption);
}
};
protected:
tUINT32 m_uX;
tUINT32 m_uY;
tUINT32 m_uW;
tUINT32 m_uH;
size_t m_szLinesPerItem;
size_t m_szItemsPerWnd;
tUINT64 m_qwItemsCount;
IConsole *m_pConsole;
IConsole::eColor m_eWindowBgColor;
IConsole::eColor m_eItemBgColor;
IConsole::eColor m_eItemFgColor;
IConsole::eColor m_eItemSlFgColor;
IConsole::eColor m_eItemSlBgColor;
IConsole::eColor m_eItemClFgColor;
IConsole::eColor m_eItemClBgColor;
tBOOL m_bError;
tXCHAR *m_pCaption;
size_t m_szOffsetX;
size_t m_szOffsetY;
tUINT64 m_qwOffsetWnd;
tBOOL m_bHelp;
CBList<stHelp*> m_cHelp;
CBList<stColumn*>m_cColumns;
tBOOL m_bColumns;
tBOOL m_bUpdateColumns;
tXCHAR *m_pColumnsText;
size_t m_szColumnsTextMax;
size_t m_szColumnsText;
public:
struct sCfg
{
tUINT32 uX;
tUINT32 uY;
tUINT32 uW;
tUINT32 uH;
size_t uLinesPerItem;
size_t szItemsCount;
IConsole *pConsole;
IConsole::eColor eWindowBgColor;
IConsole::eColor eItemBgColor;
IConsole::eColor eItemFgColor;
IConsole::eColor eItemSlFgColor;
IConsole::eColor eItemSlBgColor;
IConsole::eColor eItemClFgColor;
IConsole::eColor eItemClBgColor;
const tXCHAR *pCaption;
};
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
CConsoleWnd()
: m_uX(0)
, m_uY(0)
, m_uW(0)
, m_uH(0)
, m_szLinesPerItem(0)
, m_szItemsPerWnd(0)
, m_qwItemsCount(0ull)
, m_pConsole(NULL)
, m_eWindowBgColor(IConsole::eBlack)
, m_eItemBgColor(IConsole::eBlack)
, m_eItemFgColor(IConsole::eGreen)
, m_eItemSlFgColor(IConsole::eBlue)
, m_eItemSlBgColor(IConsole::eBlack)
, m_eItemClFgColor(IConsole::eWhite)
, m_eItemClBgColor(IConsole::eDarkGray)
, m_bError(FALSE)
, m_pCaption(NULL)
, m_szOffsetX(0)
, m_szOffsetY(0)
, m_qwOffsetWnd(0)
, m_bHelp(FALSE)
, m_bColumns(FALSE)
, m_bUpdateColumns(FALSE)
, m_pColumnsText(NULL)
, m_szColumnsTextMax(0)
, m_szColumnsText(0)
{
CConsoleWnd::PushHelpString(TM(" Navigation keys mapping:"), IConsole::eBlue, IConsole::eWhite);
CConsoleWnd::PushHelpString(TM(" * Arrow Up, Down, Page Up, Page down - move cursor"), IConsole::eBlack, IConsole::eGreen);
CConsoleWnd::PushHelpString(TM(" * Arrow Left, Right - horizontal scroll"), IConsole::eBlack, IConsole::eGreen);
CConsoleWnd::PushHelpString(TM(" * Home - goto top"), IConsole::eBlack, IConsole::eGreen);
CConsoleWnd::PushHelpString(TM(" * End - goto bottom"), IConsole::eBlack, IConsole::eGreen);
CConsoleWnd::PushHelpString(TM(" * Esc - exit to upper level or quit"), IConsole::eBlack, IConsole::eGreen);
}
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
virtual tBOOL Init(const CConsoleWnd::sCfg &i_rConfig)
{
m_pConsole = i_rConfig.pConsole;
m_eWindowBgColor = i_rConfig.eWindowBgColor;
m_eItemBgColor = i_rConfig.eItemBgColor;
m_eItemFgColor = i_rConfig.eItemFgColor;
m_eItemSlFgColor = i_rConfig.eItemSlFgColor;
m_eItemSlBgColor = i_rConfig.eItemSlBgColor;
m_eItemClFgColor = i_rConfig.eItemClFgColor;
m_eItemClBgColor = i_rConfig.eItemClBgColor;
m_szLinesPerItem = i_rConfig.uLinesPerItem;
m_qwItemsCount = i_rConfig.szItemsCount;
SetCaption(i_rConfig.pCaption);
m_pConsole->SetCursor(i_rConfig.uX, i_rConfig.uY);
m_pConsole->Clear(i_rConfig.uX, i_rConfig.uY, i_rConfig.uW, i_rConfig.uH, m_eWindowBgColor);
return Resize(i_rConfig.uX, i_rConfig.uY, i_rConfig.uW, i_rConfig.uH);
}
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
virtual void SetContext(void *i_pContext)
{
UNUSED_ARG(i_pContext);
}
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
virtual ~CConsoleWnd()
{
m_cHelp.Clear(TRUE);
m_cColumns.Clear(TRUE);
if (m_pCaption)
{
PStrFreeDub(m_pCaption);
m_pCaption = NULL;
}
if (m_pColumnsText)
{
free(m_pColumnsText);
m_pColumnsText = NULL;
}
}
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
void SetCaption(const tXCHAR *i_pCaption)
{
if (m_pCaption)
{
PStrFreeDub(m_pCaption);
m_pCaption = NULL;
}
m_pCaption = i_pCaption ? PStrDub(i_pCaption) : PStrDub(TM("?"));
}
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
virtual void PushHelpString(const tXCHAR *i_pString, IConsole::eColor i_eBgColor, IConsole::eColor i_eFgColor)
{
if (i_pString)
{
m_cHelp.Add_After(m_cHelp.Get_Last(), new stHelp(i_pString, i_eBgColor, i_eFgColor));
}
}
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
virtual void PushColumn(tUINT32 i_uId, tBOOL i_bVisible, const tXCHAR *i_pCaption)
{
if (i_pCaption)
{
m_cColumns.Add_After(m_cColumns.Get_Last(), new stColumn(i_uId, i_bVisible, i_pCaption));
m_bUpdateColumns = TRUE;
}
}
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
virtual void EnableColumns(tBOOL i_bEnable)
{
m_bUpdateColumns = TRUE;
m_bColumns = i_bEnable;
UpdateItemsPerWindow();
}
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
virtual CConsoleWnd::stColumn *GetColumn(tUINT32 i_uIndex)
{
return m_cColumns[i_uIndex];
}
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
virtual void EnableColumn(tUINT32 i_uIndex, tBOOL i_bEnable)
{
stColumn *l_pCol = m_cColumns[i_uIndex];
if (!l_pCol)
{
return;
}
l_pCol->bVisible = i_bEnable;
m_bUpdateColumns = TRUE;
if (m_bColumns)
{
Redraw();
}
}
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
virtual void SetColumnCaption(tUINT32 i_uIndex, const tXCHAR *i_pCation)
{
stColumn *l_pCol = m_cColumns[i_uIndex];
if (!l_pCol)
{
return;
}
l_pCol->SetCaption(i_pCation);
m_bUpdateColumns = TRUE;
if (m_bColumns)
{
Redraw();
}
}
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
virtual void SetItemsCount(tUINT64 i_qwItems)
{
m_qwItemsCount = i_qwItems;
UpdateItemsPerWindow();
}
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
virtual void Redraw()
{
if (m_bHelp)
{
return;
}
tUINT32 l_uiOffset = 1;
if (m_bColumns)
{
l_uiOffset = 2;
}
UpdateHeader();
m_pConsole->SetCursor(m_uX, m_uY + l_uiOffset);
size_t l_szCount = Print() + l_uiOffset;
if (l_szCount < (size_t)m_uH)
{
m_pConsole->Clear(m_uX, m_uY + (tUINT32)l_szCount, m_uW, m_uH - (tUINT32)l_szCount, m_eWindowBgColor);
}
}
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
virtual tBOOL Resize(tUINT32 i_uX, tUINT32 i_uY, tUINT32 i_uW, tUINT32 i_uH)
{
m_uX = i_uX;
m_uY = i_uY;
m_uW = i_uW;
m_uH = i_uH;
UpdateItemsPerWindow();
return TRUE;
}
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
virtual tBOOL ProcessKey(tUINT16 i_wChar)
{
if (m_bError)
{
return FALSE;
}
tBOOL l_bReturn = FALSE;
size_t l_szCount = (size_t)m_uH;
tUINT32 l_uiOffset = 1;
if (m_bColumns)
{
l_uiOffset = 2;
}
if (m_bHelp)
{
if ((tUINT16)IConsole::eKeyEsc == i_wChar)
{
m_bHelp = FALSE;
l_bReturn = TRUE;
}
}
else if ( ((tUINT16)IConsole::eKeyF1 == i_wChar)
|| ((tUINT16)IConsole::eKeyF2 == i_wChar)
)
{
m_bHelp = TRUE;
l_szCount = m_cHelp.Count() - l_uiOffset;
m_pConsole->SetCursor(m_uX, m_uY);
pAList_Cell l_pEl = NULL;
while (NULL != (l_pEl = m_cHelp.Get_Next(l_pEl)))
{
stHelp *l_pHelp = m_cHelp.Get_Data(l_pEl);
if (l_pHelp)
{
m_pConsole->WriteText(l_pHelp->eFgColor, l_pHelp->eBgColor, m_uW, m_uW, l_pHelp->pString);
}
else
{
l_szCount --;
}
}
}
else if ((tUINT16)IConsole::eKeyArrowLeft == i_wChar)
{
if (m_szOffsetX)
{
m_szOffsetX--;
l_bReturn = TRUE;
m_bUpdateColumns = TRUE;
}
}
else if ((tUINT16)IConsole::eKeyArrowRight == i_wChar)
{
m_szOffsetX++;
m_bUpdateColumns = TRUE;
l_bReturn = TRUE;
}
else if ((tUINT16)IConsole::eKeyArrowUp == i_wChar)
{
if (m_szOffsetY)
{
m_szOffsetY--;
l_bReturn = TRUE;
}
else if (m_qwOffsetWnd)
{
m_qwOffsetWnd--;
l_bReturn = TRUE;
}
}
else if ((tUINT16)IConsole::eKeyArrowDown == i_wChar)
{
if ((m_szOffsetY + 1) < m_szItemsPerWnd)
{
m_szOffsetY++;
l_bReturn = TRUE;
}
else if ((m_qwOffsetWnd + (tUINT64)m_szItemsPerWnd + 1ull) <= m_qwItemsCount)
{
m_qwOffsetWnd++;
l_bReturn = TRUE;
}
}
else if ((tUINT16)IConsole::eKeyPageUp == i_wChar)
{
if (m_qwOffsetWnd > (tUINT64)m_szItemsPerWnd)
{
m_qwOffsetWnd -= (tUINT64)m_szItemsPerWnd;
l_bReturn = TRUE;
}
else if (m_qwOffsetWnd)
{
m_qwOffsetWnd = 0;
m_szOffsetY = 0;
l_bReturn = TRUE;
}
else if (m_szOffsetY)
{
m_szOffsetY = 0;
l_bReturn = TRUE;
}
}
else if ((tUINT16)IConsole::eKeyPageDown == i_wChar)
{
if ((m_qwOffsetWnd + 2ull*(tUINT64)m_szItemsPerWnd) <= m_qwItemsCount)
{
m_qwOffsetWnd += (tUINT64)m_szItemsPerWnd;
l_bReturn = TRUE;
}
else if ((tUINT64)m_szItemsPerWnd <= m_qwItemsCount)
{
m_qwOffsetWnd = m_qwItemsCount - (tUINT64)m_szItemsPerWnd;
m_szOffsetY = m_szItemsPerWnd - 1;
l_bReturn = TRUE;
}
else if (m_qwItemsCount)
{
m_szOffsetY = (size_t)m_qwItemsCount - 1;
l_bReturn = TRUE;
}
}
else if ((tUINT16)IConsole::eKeyHome == i_wChar)
{
m_qwOffsetWnd = 0;
m_szOffsetY = 0;
l_bReturn = TRUE;
}
else if ((tUINT16)IConsole::eKeyEnd == i_wChar)
{
if ((tUINT64)m_szItemsPerWnd <= m_qwItemsCount)
{
m_qwOffsetWnd = m_qwItemsCount - (tUINT64)m_szItemsPerWnd;
m_szOffsetY = m_szItemsPerWnd - 1;
l_bReturn = TRUE;
}
else if (m_qwItemsCount)
{
m_szOffsetY = (size_t)m_qwItemsCount - 1;
l_bReturn = TRUE;
}
}
if (l_bReturn)
{
UpdateHeader();
m_pConsole->SetCursor(m_uX, m_uY + l_uiOffset);
l_szCount = Print();
}
l_szCount += l_uiOffset;
if (l_szCount < (size_t)m_uH)
{
m_pConsole->Clear(m_uX, m_uY + (tUINT32)l_szCount, m_uW, m_uH - (tUINT32)l_szCount, m_eWindowBgColor);
}
return l_bReturn;
}
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
virtual size_t Print() = 0;
protected:
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
void UpdateItemsPerWindow()
{
tUINT32 l_uiH = m_uH - 1;
if (!m_szLinesPerItem)
{
return;
}
if ( (m_bColumns)
&& (l_uiH)
)
{
l_uiH --;
}
m_szItemsPerWnd = l_uiH / m_szLinesPerItem;
if (m_szItemsPerWnd > m_qwItemsCount)
{
m_szItemsPerWnd = (size_t)m_qwItemsCount;
}
}
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
virtual void UpdateHeader()
{
tUINT32 l_uPos = 100;
tUINT64 l_qwOffsY = (tUINT64)m_szOffsetY;
if ( (l_qwOffsY)
|| (1ull == m_qwItemsCount)
)
{
l_qwOffsY++;
}
if (m_qwItemsCount)
{
l_uPos = (tUINT32)((100ull * (m_qwOffsetWnd + l_qwOffsY)) / m_qwItemsCount);
}
m_pConsole->SetCursor(m_uX, m_uY);
m_pConsole->WriteText(IConsole::eBlack,
IConsole::eDarkGray,
m_uW,
m_uW,
TM("{%s} % 3u%% [Help = F1/F2]"),
m_pCaption,
l_uPos
);
if (m_bColumns)
{
if (m_bUpdateColumns)
{
pAList_Cell l_pEl = NULL;
size_t l_szLen = 0;
while ((l_pEl = m_cColumns.Get_Next(l_pEl))) { l_szLen += m_cColumns.Get_Data(l_pEl)->szCaption;}
if (l_szLen >= m_szColumnsTextMax)
{
if (m_pColumnsText) free(m_pColumnsText);
m_szColumnsTextMax = l_szLen + 16;
m_pColumnsText = (tXCHAR*)malloc(m_szColumnsTextMax * sizeof(tXCHAR));
}
m_szColumnsText = 0;
l_pEl = NULL;
while ((l_pEl = m_cColumns.Get_Next(l_pEl)))
{
stColumn *l_pCol = m_cColumns.Get_Data(l_pEl);
if ( (l_pCol)
&& (l_pCol->bVisible)
)
{
PStrCpy(m_pColumnsText + m_szColumnsText, m_szColumnsTextMax - m_szColumnsText, l_pCol->pCaption);
m_szColumnsText += l_pCol->szCaption;
}
}
m_bUpdateColumns = FALSE;
if (!m_szColumnsText)
{
m_pColumnsText[0] = TM(' ');
m_pColumnsText[1] = 0;
m_szColumnsText = 1;
}
}
m_pConsole->WriteTextB(m_eItemClFgColor,
m_eItemClBgColor,
m_uW,
m_uW,
m_szOffsetX,
m_pColumnsText,
m_szColumnsText,
m_szColumnsTextMax
);
}
}
};
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
class CConsoleInput
{
protected:
tXCHAR *m_pText;
size_t m_szText;
size_t m_szCursor;
tXCHAR *m_pCaption;
tUINT32 m_uX;
tUINT32 m_uY;
tUINT32 m_uW;
tUINT32 m_uH;
IConsole *m_pConsole;
IConsole::eColor m_eWndFgColor;
IConsole::eColor m_eWndBgColor;
IConsole::eColor m_eInpFgColor;
IConsole::eColor m_eInpBgColor;
IConsole::eColor m_eCurFgColor;
IConsole::eColor m_eCurBgColor;
public:
struct sCfg
{
tUINT32 uX;
tUINT32 uY;
tUINT32 uW;
tUINT32 uH;
IConsole *pConsole;
IConsole::eColor eWndFgColor;
IConsole::eColor eWndBgColor;
IConsole::eColor eInpFgColor;
IConsole::eColor eInpBgColor;
IConsole::eColor eCurFgColor;
IConsole::eColor eCurBgColor;
const tXCHAR *pCaption;
sCfg(tUINT32 i_uX,
tUINT32 i_uY,
tUINT32 i_uW,
tUINT32 i_uH,
IConsole *i_pConsole,
const tXCHAR *i_pCaption
)
: uX(i_uX)
, uY(i_uY)
, uW(i_uW)
, uH(i_uH)
, pConsole(i_pConsole)
, eWndFgColor(IConsole::eWhite)
, eWndBgColor(IConsole::eDarkGray)
, eInpFgColor(IConsole::eGreen)
, eInpBgColor(IConsole::eLightGray)
, eCurFgColor(IConsole::eWhite)
, eCurBgColor(IConsole::eBlue)
, pCaption(i_pCaption)
{
}
};
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
CConsoleInput(CConsoleInput::sCfg &i_rConfig)
{
UNUSED_ARG(i_rConfig);
}
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
virtual ~CConsoleInput()
{
}
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
virtual void Redraw()
{
}
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
void SetCaption(const tXCHAR *i_pCaption)
{
if (m_pCaption)
{
PStrFreeDub(m_pCaption);
m_pCaption = NULL;
}
m_pCaption = i_pCaption ? PStrDub(i_pCaption) : PStrDub(TM("?"));
}
virtual tBOOL ProcessKey(tUINT16 i_wChar)
{
UNUSED_ARG(i_wChar);
return FALSE;
}
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
virtual tBOOL Apply(const tXCHAR *i_pText) = 0;
};
#endif //ICONSOLE_H