mirror of
https://github.com/ddnet/ddnet.git
synced 2024-11-10 10:08:18 +00:00
Extend IConsole::PossibleCommands
, add index to callback
`PossibleCommands` now passes the item index to the callback and returns the total number of items. Add `EmptyPossibleCommandCallback` as default parameter.
This commit is contained in:
parent
680abb6405
commit
f3eb93b83a
|
@ -82,14 +82,16 @@ public:
|
|||
|
||||
typedef void (*FTeeHistorianCommandCallback)(int ClientID, int FlagMask, const char *pCmd, IResult *pResult, void *pUser);
|
||||
typedef void (*FPrintCallback)(const char *pStr, void *pUser, ColorRGBA PrintColor);
|
||||
typedef void (*FPossibleCallback)(const char *pCmd, void *pUser);
|
||||
typedef void (*FPossibleCallback)(int Index, const char *pCmd, void *pUser);
|
||||
typedef void (*FCommandCallback)(IResult *pResult, void *pUserData);
|
||||
typedef void (*FChainCommandCallback)(IResult *pResult, void *pUserData, FCommandCallback pfnCallback, void *pCallbackUserData);
|
||||
|
||||
static void EmptyPossibleCommandCallback(int Index, const char *pCmd, void *pUser) {}
|
||||
|
||||
virtual void Init() = 0;
|
||||
virtual const CCommandInfo *FirstCommandInfo(int AccessLevel, int Flagmask) const = 0;
|
||||
virtual const CCommandInfo *GetCommandInfo(const char *pName, int FlagMask, bool Temp) = 0;
|
||||
virtual void PossibleCommands(const char *pStr, int FlagMask, bool Temp, FPossibleCallback pfnCallback, void *pUser) = 0;
|
||||
virtual int PossibleCommands(const char *pStr, int FlagMask, bool Temp, FPossibleCallback pfnCallback = EmptyPossibleCommandCallback, void *pUser = nullptr) = 0;
|
||||
virtual void ParseArguments(int NumArgs, const char **ppArguments) = 0;
|
||||
|
||||
virtual void Register(const char *pName, const char *pParams, int Flags, FCommandCallback pfnFunc, void *pUser, const char *pHelp) = 0;
|
||||
|
|
|
@ -551,16 +551,21 @@ void CConsole::ExecuteLineStroked(int Stroke, const char *pStr, int ClientID, bo
|
|||
}
|
||||
}
|
||||
|
||||
void CConsole::PossibleCommands(const char *pStr, int FlagMask, bool Temp, FPossibleCallback pfnCallback, void *pUser)
|
||||
int CConsole::PossibleCommands(const char *pStr, int FlagMask, bool Temp, FPossibleCallback pfnCallback, void *pUser)
|
||||
{
|
||||
int Index = 0;
|
||||
for(CCommand *pCommand = m_pFirstCommand; pCommand; pCommand = pCommand->m_pNext)
|
||||
{
|
||||
if(pCommand->m_Flags & FlagMask && pCommand->m_Temp == Temp)
|
||||
{
|
||||
if(str_find_nocase(pCommand->m_pName, pStr))
|
||||
pfnCallback(pCommand->m_pName, pUser);
|
||||
{
|
||||
pfnCallback(Index, pCommand->m_pName, pUser);
|
||||
Index++;
|
||||
}
|
||||
}
|
||||
}
|
||||
return Index;
|
||||
}
|
||||
|
||||
CConsole::CCommand *CConsole::FindCommand(const char *pName, int FlagMask)
|
||||
|
|
|
@ -196,7 +196,7 @@ public:
|
|||
void Init() override;
|
||||
const CCommandInfo *FirstCommandInfo(int AccessLevel, int FlagMask) const override;
|
||||
const CCommandInfo *GetCommandInfo(const char *pName, int FlagMask, bool Temp) override;
|
||||
void PossibleCommands(const char *pStr, int FlagMask, bool Temp, FPossibleCallback pfnCallback, void *pUser) override;
|
||||
int PossibleCommands(const char *pStr, int FlagMask, bool Temp, FPossibleCallback pfnCallback, void *pUser) override;
|
||||
|
||||
void ParseArguments(int NumArgs, const char **ppArguments) override;
|
||||
void Register(const char *pName, const char *pParams, int Flags, FCommandCallback pfnFunc, void *pUser, const char *pHelp) override;
|
||||
|
|
|
@ -161,12 +161,11 @@ void CGameConsole::CInstance::ExecuteLine(const char *pLine)
|
|||
}
|
||||
}
|
||||
|
||||
void CGameConsole::CInstance::PossibleCommandsCompleteCallback(const char *pStr, void *pUser)
|
||||
void CGameConsole::CInstance::PossibleCommandsCompleteCallback(int Index, const char *pStr, void *pUser)
|
||||
{
|
||||
CGameConsole::CInstance *pInstance = (CGameConsole::CInstance *)pUser;
|
||||
if(pInstance->m_CompletionChosen == pInstance->m_CompletionEnumerationCount)
|
||||
if(pInstance->m_CompletionChosen == Index)
|
||||
pInstance->m_Input.Set(pStr);
|
||||
pInstance->m_CompletionEnumerationCount++;
|
||||
}
|
||||
|
||||
void CGameConsole::CInstance::OnInput(IInput::CEvent Event)
|
||||
|
@ -335,16 +334,13 @@ void CGameConsole::CInstance::OnInput(IInput::CEvent Event)
|
|||
m_CompletionChosen--;
|
||||
else if(!m_ReverseTAB)
|
||||
m_CompletionChosen++;
|
||||
m_CompletionEnumerationCount = 0;
|
||||
m_pGameConsole->m_pConsole->PossibleCommands(m_aCompletionBuffer, m_CompletionFlagmask, m_Type != CGameConsole::CONSOLETYPE_LOCAL && m_pGameConsole->Client()->RconAuthed() && m_pGameConsole->Client()->UseTempRconCommands(), PossibleCommandsCompleteCallback, this);
|
||||
|
||||
int CompletionEnumerationCount = m_pGameConsole->m_pConsole->PossibleCommands(m_aCompletionBuffer, m_CompletionFlagmask, m_Type != CGameConsole::CONSOLETYPE_LOCAL && m_pGameConsole->Client()->RconAuthed() && m_pGameConsole->Client()->UseTempRconCommands(), PossibleCommandsCompleteCallback, this);
|
||||
m_CompletionUsed = true;
|
||||
|
||||
// handle wrapping
|
||||
if(m_CompletionEnumerationCount && (m_CompletionChosen >= m_CompletionEnumerationCount || m_CompletionChosen < 0))
|
||||
if(CompletionEnumerationCount && (m_CompletionChosen >= CompletionEnumerationCount || m_CompletionChosen < 0))
|
||||
{
|
||||
m_CompletionChosen = (m_CompletionChosen + m_CompletionEnumerationCount) % m_CompletionEnumerationCount;
|
||||
m_CompletionEnumerationCount = 0;
|
||||
m_CompletionChosen = (m_CompletionChosen + CompletionEnumerationCount) % CompletionEnumerationCount;
|
||||
m_pGameConsole->m_pConsole->PossibleCommands(m_aCompletionBuffer, m_CompletionFlagmask, m_Type != CGameConsole::CONSOLETYPE_LOCAL && m_pGameConsole->Client()->RconAuthed() && m_pGameConsole->Client()->UseTempRconCommands(), PossibleCommandsCompleteCallback, this);
|
||||
}
|
||||
}
|
||||
|
@ -487,7 +483,7 @@ struct CRenderInfo
|
|||
float m_Width;
|
||||
};
|
||||
|
||||
void CGameConsole::PossibleCommandsRenderCallback(const char *pStr, void *pUser)
|
||||
void CGameConsole::PossibleCommandsRenderCallback(int Index, const char *pStr, void *pUser)
|
||||
{
|
||||
CRenderInfo *pInfo = static_cast<CRenderInfo *>(pUser);
|
||||
|
||||
|
|
|
@ -40,7 +40,6 @@ class CGameConsole : public CComponent
|
|||
CLineInput m_Input;
|
||||
const char *m_pName;
|
||||
int m_Type;
|
||||
int m_CompletionEnumerationCount;
|
||||
int m_BacklogCurPage;
|
||||
|
||||
CGameConsole *m_pGameConsole;
|
||||
|
@ -74,7 +73,7 @@ class CGameConsole : public CComponent
|
|||
void PrintLine(const char *pLine, int Len, ColorRGBA PrintColor);
|
||||
|
||||
const char *GetString() const { return m_Input.GetString(); }
|
||||
static void PossibleCommandsCompleteCallback(const char *pStr, void *pUser);
|
||||
static void PossibleCommandsCompleteCallback(int Index, const char *pStr, void *pUser);
|
||||
};
|
||||
|
||||
class IConsole *m_pConsole;
|
||||
|
@ -106,7 +105,7 @@ class CGameConsole : public CComponent
|
|||
void Toggle(int Type);
|
||||
void Dump(int Type);
|
||||
|
||||
static void PossibleCommandsRenderCallback(const char *pStr, void *pUser);
|
||||
static void PossibleCommandsRenderCallback(int Index, const char *pStr, void *pUser);
|
||||
static void ConToggleLocalConsole(IConsole::IResult *pResult, void *pUserData);
|
||||
static void ConToggleRemoteConsole(IConsole::IResult *pResult, void *pUserData);
|
||||
static void ConClearLocalConsole(IConsole::IResult *pResult, void *pUserData);
|
||||
|
|
Loading…
Reference in a new issue