OpenClonk
C4KeyBinding Class Reference

#include <C4KeyboardInput.h>

Inheritance diagram for C4KeyBinding:
[legend]
Collaboration diagram for C4KeyBinding:
[legend]

Public Member Functions

 C4KeyBinding (const C4KeyCodeEx &DefCode, const char *szName, C4KeyScope Scope, C4KeyboardCallbackInterface *pCallback, unsigned int uiPriority=PRIO_Base)
 
 C4KeyBinding (const CodeList &rDefCodes, const char *szName, C4KeyScope Scope, C4KeyboardCallbackInterface *pCallback, unsigned int uiPriority=PRIO_Base)
 
 ~C4KeyBinding () override
 

Protected Types

enum  Priority {
  PRIO_None = 0u , PRIO_Base = 1u , PRIO_Dlg = 2u , PRIO_Ctrl = 3u ,
  PRIO_CtrlOverride = 4u , PRIO_FocusCtrl = 5u , PRIO_Context = 6u , PRIO_PlrControl = 7u ,
  PRIO_MoreThanMax = 100u
}
 
typedef std::vector< C4KeyCodeEx > CodeList
 

Protected Member Functions

void Ref ()
 
void Deref ()
 
const CodeList & GetCodes () const
 
const StdStrBuf & GetName () const
 
C4KeyScope GetScope () const
 
unsigned int GetPriority () const
 
bool IsCodeMatched (const C4KeyCodeEx &key) const
 
void Update (const C4CustomKey *pByKey)
 
bool Execute (C4KeyEventType eEv, C4KeyCodeEx key)
 
bool IsDown () const
 
void KillCallbacks (const C4CustomKey *pOfKey)
 
void CompileFunc (StdCompiler *pComp)
 

Protected Attributes

CBVec vecCallbacks
 
int iRef
 

Detailed Description

Definition at line 476 of file C4KeyboardInput.h.

Member Typedef Documentation

◆ CodeList

typedef std::vector<C4KeyCodeEx> C4CustomKey::CodeList
inherited

Definition at line 421 of file C4KeyboardInput.h.

Member Enumeration Documentation

◆ Priority

enum C4CustomKey::Priority
inherited
Enumerator
PRIO_None 
PRIO_Base 
PRIO_Dlg 
PRIO_Ctrl 
PRIO_CtrlOverride 
PRIO_FocusCtrl 
PRIO_Context 
PRIO_PlrControl 
PRIO_MoreThanMax 

Definition at line 433 of file C4KeyboardInput.h.

434  {
435  PRIO_None = 0u,
436  PRIO_Base = 1u,
437  PRIO_Dlg = 2u,
438  PRIO_Ctrl = 3u, // controls have higher priority than dialogs in GUI
439  PRIO_CtrlOverride = 4u, // dialog handlings of keys that overwrite regular control handlings
440  PRIO_FocusCtrl = 5u, // controls override special dialog handling keys (e.g., RenameEdit)
441  PRIO_Context = 6u, // context menus above controls
442  PRIO_PlrControl = 7u, // player controls overwrite any other controls
443  PRIO_MoreThanMax = 100u // must be larger than otherwise largest used priority
444  };

Constructor & Destructor Documentation

◆ C4KeyBinding() [1/2]

C4KeyBinding::C4KeyBinding ( const C4KeyCodeEx &  DefCode,
const char *  szName,
C4KeyScope  Scope,
C4KeyboardCallbackInterface *  pCallback,
unsigned int  uiPriority = PRIO_Base 
)

Definition at line 726 of file C4KeyboardInput.cpp.

727  : C4CustomKey(DefCode, szName, Scope, pCallback, uiPriority)
728 {
729  // self holds a ref
730  Ref();
731  // register into keyboard input class
733 }
C4KeyboardInput & C4KeyboardInput_Init()
C4CustomKey(const C4KeyCodeEx &DefCode, const char *szName, C4KeyScope Scope, C4KeyboardCallbackInterface *pCallback, unsigned int uiPriority=PRIO_Base)
void RegisterKey(C4CustomKey *pRegKey)

References C4KeyboardInput_Init(), C4CustomKey::Ref(), and C4KeyboardInput::RegisterKey().

Here is the call graph for this function:

◆ C4KeyBinding() [2/2]

C4KeyBinding::C4KeyBinding ( const CodeList &  rDefCodes,
const char *  szName,
C4KeyScope  Scope,
C4KeyboardCallbackInterface *  pCallback,
unsigned int  uiPriority = PRIO_Base 
)

Definition at line 735 of file C4KeyboardInput.cpp.

736  : C4CustomKey(rDefCodes, szName, Scope, pCallback, uiPriority)
737 {
738  // self holds a ref
739  Ref();
740  // register into keyboard input class
742 }

References C4KeyboardInput_Init(), C4CustomKey::Ref(), and C4KeyboardInput::RegisterKey().

Here is the call graph for this function:

◆ ~C4KeyBinding()

C4KeyBinding::~C4KeyBinding ( )
override

Definition at line 744 of file C4KeyboardInput.cpp.

745 {
746  // deregister from keyboard input class, if that class still exists
749  // shouldn't be refed now
750  assert(iRef==1);
751  iRef = 0;
752 }
C4Game Game
Definition: C4Globals.cpp:52
C4KeyboardInput & KeyboardInput
Definition: C4Game.h:96
void UnregisterKeyBinding(C4CustomKey *pKey)
static bool IsValid

References Game, C4CustomKey::iRef, C4KeyboardInput::IsValid, C4Game::KeyboardInput, and C4KeyboardInput::UnregisterKeyBinding().

Here is the call graph for this function:

Member Function Documentation

◆ CompileFunc()

void C4CustomKey::CompileFunc ( StdCompiler *  pComp)
inherited

Definition at line 705 of file C4KeyboardInput.cpp.

706 {
707  pComp->Value(mkNamingAdapt(mkSTLContainerAdapt(Codes), Name.getData(), DefaultCodes));
708 }
StdSTLContainerAdapt< C > mkSTLContainerAdapt(C &rTarget, StdCompiler::Sep eSep=StdCompiler::SEP_SEP)
Definition: StdAdaptors.h:713
StdNamingAdapt< T > mkNamingAdapt(T &&rValue, const char *szName)
Definition: StdAdaptors.h:92
void Value(const T &rStruct)
Definition: StdCompiler.h:161
const char * getData() const
Definition: StdBuf.h:442

References StdStrBuf::getData(), mkNamingAdapt(), mkSTLContainerAdapt(), and StdCompiler::Value().

Here is the call graph for this function:

◆ Deref()

void C4CustomKey::Deref ( )
inlineinherited

Definition at line 457 of file C4KeyboardInput.h.

457 { if (!--iRef) delete this; }

References C4CustomKey::iRef.

Referenced by C4KeyboardInput::RegisterKey(), and C4KeyboardInput::UnregisterKey().

Here is the caller graph for this function:

◆ Execute()

bool C4CustomKey::Execute ( C4KeyEventType  eEv,
C4KeyCodeEx  key 
)
inherited

Definition at line 710 of file C4KeyboardInput.cpp.

711 {
712  // remember down-state
713  is_down = (eEv == KEYEV_Down);
714  // execute all callbacks
715  for (auto & callback : vecCallbacks)
716  if (callback->OnKeyEvent(key, eEv))
717  return true;
718  // no event processed it
719  return false;
720 }
@ KEYEV_Down

References KEYEV_Down, and C4CustomKey::vecCallbacks.

Referenced by C4KeyboardInput::DoInput().

Here is the caller graph for this function:

◆ GetCodes()

const CodeList& C4CustomKey::GetCodes ( ) const
inlineinherited

Definition at line 459 of file C4KeyboardInput.h.

459 { return Codes.size() ? Codes : DefaultCodes; } // return assigned codes; default if no custom has been assigned

Referenced by C4KeyboardInput::GetKeyCodeNameByKeyName(), C4CustomKey::IsCodeMatched(), C4KeyboardInput::RegisterKey(), and C4KeyboardInput::UnregisterKey().

Here is the caller graph for this function:

◆ GetName()

const StdStrBuf& C4CustomKey::GetName ( ) const
inlineinherited

Definition at line 460 of file C4KeyboardInput.h.

460 { return Name; }

Referenced by C4CustomKey::C4CustomKey(), C4KeyboardInput::RegisterKey(), and C4KeyboardInput::UnregisterKeyBinding().

Here is the caller graph for this function:

◆ GetPriority()

unsigned int C4CustomKey::GetPriority ( ) const
inlineinherited

Definition at line 462 of file C4KeyboardInput.h.

462 { return uiPriority; }

Referenced by C4KeyboardInput::DoInput().

Here is the caller graph for this function:

◆ GetScope()

C4KeyScope C4CustomKey::GetScope ( ) const
inlineinherited

Definition at line 461 of file C4KeyboardInput.h.

461 { return Scope; }

Referenced by C4KeyboardInput::DoInput().

Here is the caller graph for this function:

◆ IsCodeMatched()

bool C4CustomKey::IsCodeMatched ( const C4KeyCodeEx &  key) const
inherited

Definition at line 668 of file C4KeyboardInput.cpp.

669 {
670  const CodeList &codes = GetCodes();
671  for (const auto &code : codes)
672  if (code == key)
673  return true;
674  return false;
675 }
const CodeList & GetCodes() const
std::vector< C4KeyCodeEx > CodeList

References C4CustomKey::GetCodes().

Referenced by C4KeyboardInput::DoInput().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ IsDown()

bool C4CustomKey::IsDown ( ) const
inlineinherited

Definition at line 468 of file C4KeyboardInput.h.

468 { return is_down; }

Referenced by C4KeyboardInput::DoInput().

Here is the caller graph for this function:

◆ KillCallbacks()

void C4CustomKey::KillCallbacks ( const C4CustomKey *  pOfKey)
inherited

Definition at line 693 of file C4KeyboardInput.cpp.

694 {
695  // remove all instances from list
696  CBVec::iterator i;
697  while ((i = std::find_if(vecCallbacks.begin(), vecCallbacks.end(), [pOfKey](CBVec::value_type pIntfc) { return pIntfc->IsOriginalKey(pOfKey); })) != vecCallbacks.end())
698  {
699  C4KeyboardCallbackInterface *pItfc = *i;
700  vecCallbacks.erase(i);
701  pItfc->Deref();
702  }
703 }

References C4KeyboardCallbackInterface::Deref(), and C4CustomKey::vecCallbacks.

Referenced by C4KeyboardInput::UnregisterKeyBinding().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ Ref()

void C4CustomKey::Ref ( )
inlineinherited

Definition at line 456 of file C4KeyboardInput.h.

456 { ++iRef; }

References C4CustomKey::iRef.

Referenced by C4KeyBinding(), and C4KeyboardInput::RegisterKey().

Here is the caller graph for this function:

◆ Update()

void C4CustomKey::Update ( const C4CustomKey *  pByKey)
inherited

Definition at line 677 of file C4KeyboardInput.cpp.

678 {
679  assert(pByKey);
680  assert(Name == pByKey->Name);
681  // transfer any assigned data, except name which should be equal anyway
682  if (pByKey->DefaultCodes.size()) DefaultCodes = pByKey->DefaultCodes;
683  if (pByKey->Codes.size()) Codes = pByKey->Codes;
684  if (pByKey->Scope != KEYSCOPE_None) Scope = pByKey->Scope;
685  if (pByKey->uiPriority != PRIO_None) uiPriority = pByKey->uiPriority;
686  for (auto callback : pByKey->vecCallbacks)
687  {
688  callback->Ref();
689  vecCallbacks.push_back(callback);
690  }
691 }
@ KEYSCOPE_None

References KEYSCOPE_None, C4CustomKey::PRIO_None, and C4CustomKey::vecCallbacks.

Referenced by C4KeyboardInput::RegisterKey().

Here is the caller graph for this function:

Member Data Documentation

◆ iRef

int C4CustomKey::iRef
protectedinherited

Definition at line 447 of file C4KeyboardInput.h.

Referenced by C4CustomKey::Deref(), C4CustomKey::Ref(), and ~C4KeyBinding().

◆ vecCallbacks

CBVec C4CustomKey::vecCallbacks
inherited

The documentation for this class was generated from the following files: