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< C4KeyCodeExCodeList
 

Protected Member Functions

void Ref ()
 
void Deref ()
 
const CodeListGetCodes () const
 
const StdStrBufGetName () 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: