r5sdk/r5dev/gameui/IConsole.h
Kawe Mazidjatari da299a002c Reimplement text filter
Could be better at some point, currently removes anything not matching criteria resulting in gaps.
But on the other side it might be good as the location of all occurrences are known (should make it easier to see when it is logged during the process).

Revisit in the future.
2022-06-20 20:21:52 +02:00

112 lines
3.8 KiB
C++

#pragma once
#ifndef DEDICATED
#include "common/sdkdefs.h"
#include "windows/resource.h"
#include "thirdparty/imgui/include/imgui_logger.h"
struct CSuggest
{
CSuggest(const string& svName, int nFlags)
{
m_svName = svName;
m_nFlags = nFlags;
}
bool operator==(const string& a) const
{
return m_svName.compare(a) == 0;
}
bool operator<(const CSuggest& a) const
{
return m_svName < a.m_svName;
}
string m_svName;
int m_nFlags;
};
class CConsole
{
private:
///////////////////////////////////////////////////////////////////////////
char m_szInputBuf[512] = { '\0' };
char m_szSummary[256] = { '\0' };
const char* m_pszConsoleTitle = nullptr;
vector<string> m_vsvCommands;
vector<string> m_vsvHistory;
int m_nHistoryPos = -1;
int m_nScrollBack = 0;
float m_flFadeAlpha = 0.f;
bool m_bInitialized = false;
bool m_bDefaultTheme = false;
bool m_bReclaimFocus = false;
bool m_bAutoScroll = true;
bool m_bScrollToBottom = false;
bool m_bCopyToClipBoard = false;
bool m_bSuggestActive = false;
bool m_bSuggestMoved = false;
bool m_bSuggestUpdate = false;
int m_nSuggestPos = -1;
vector<CSuggest> m_vsvSuggest;
vector<MODULERESOURCE> m_vFlagIcons;
ImVec2 m_ivSuggestWindowPos;
ImVec2 m_ivSuggestWindowSize;
CTextLogger m_Logger;
ImGuiInputTextFlags m_nInputFlags =
ImGuiInputTextFlags_AutoCaretEnd |
ImGuiInputTextFlags_CallbackCompletion |
ImGuiInputTextFlags_CallbackHistory |
ImGuiInputTextFlags_CallbackAlways |
ImGuiInputTextFlags_CallbackEdit |
ImGuiInputTextFlags_EnterReturnsTrue;
ImGuiWindowFlags m_nSuggestFlags =
ImGuiWindowFlags_NoMove |
ImGuiWindowFlags_NoTitleBar |
ImGuiWindowFlags_NoSavedSettings |
ImGuiWindowFlags_NoFocusOnAppearing |
ImGuiWindowFlags_AlwaysVerticalScrollbar |
ImGuiWindowFlags_AlwaysHorizontalScrollbar;
public:
bool m_bActivate = false;
vector<CSuggest> m_vsvCommandBases;
///////////////////////////////////////////////////////////////////////////
CConsole(void);
~CConsole(void);
bool Setup(void);
void Draw(void);
void Think(void);
void BasePanel(void);
void OptionsPanel(void);
void SuggestPanel(void);
bool CanAutoComplete(void);
void ResetAutoComplete(void);
void ClearAutoComplete(void);
void FindFromPartial(void);
void ProcessCommand(const char* pszCommand);
int ColorCodeFlags(int nFlags) const;
int TextEditCallback(ImGuiInputTextCallbackData* pData);
static int TextEditCallbackStub(ImGuiInputTextCallbackData* pData);
///////////////////////////////////////////////////////////////////////////
void AddLog(const CConLog& conLog);
void AddLog(const ImVec4& color, const char* fmt, ...) IM_FMTARGS(2);
void ClearLog(void);
///////////////////////////////////////////////////////////////////////////
void SetStyleVar(void);
};
///////////////////////////////////////////////////////////////////////////////
extern CConsole* g_pConsole;
#endif // !DEDICATED