OpenClonk
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros
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

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

Definition at line 421 of file C4KeyboardInput.h.

Member Enumeration Documentation

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::C4KeyBinding ( const C4KeyCodeEx DefCode,
const char *  szName,
C4KeyScope  Scope,
C4KeyboardCallbackInterface pCallback,
unsigned int  uiPriority = PRIO_Base 
)

Definition at line 731 of file C4KeyboardInput.cpp.

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

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

Here is the call graph for this function:

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

Definition at line 740 of file C4KeyboardInput.cpp.

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

741  : C4CustomKey(rDefCodes, szName, Scope, pCallback, uiPriority)
742 {
743  // self holds a ref
744  Ref();
745  // register into keyboard input class
747 }
C4CustomKey(const C4KeyCodeEx &DefCode, const char *szName, C4KeyScope Scope, C4KeyboardCallbackInterface *pCallback, unsigned int uiPriority=PRIO_Base)
C4KeyboardInput & C4KeyboardInput_Init()
void RegisterKey(C4CustomKey *pRegKey)

Here is the call graph for this function:

C4KeyBinding::~C4KeyBinding ( )
override

Definition at line 749 of file C4KeyboardInput.cpp.

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

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

Here is the call graph for this function:

Member Function Documentation

void C4CustomKey::CompileFunc ( StdCompiler pComp)
inherited

Definition at line 710 of file C4KeyboardInput.cpp.

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

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

Here is the call graph for this function:

void C4CustomKey::Deref ( )
inlineinherited

Definition at line 457 of file C4KeyboardInput.h.

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

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

Here is the caller graph for this function:

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

Definition at line 715 of file C4KeyboardInput.cpp.

References KEYEV_Down, and C4CustomKey::vecCallbacks.

Referenced by C4KeyboardInput::DoInput().

716 {
717  // remember down-state
718  is_down = (eEv == KEYEV_Down);
719  // execute all callbacks
720  for (auto & callback : vecCallbacks)
721  if (callback->OnKeyEvent(key, eEv))
722  return true;
723  // no event processed it
724  return false;
725 }

Here is the caller graph for this function:

const CodeList& C4CustomKey::GetCodes ( ) const
inlineinherited

Definition at line 459 of file C4KeyboardInput.h.

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

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

Here is the caller graph for this function:

const StdStrBuf& C4CustomKey::GetName ( ) const
inlineinherited

Definition at line 460 of file C4KeyboardInput.h.

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

460 { return Name; }

Here is the caller graph for this function:

unsigned int C4CustomKey::GetPriority ( ) const
inlineinherited

Definition at line 462 of file C4KeyboardInput.h.

Referenced by C4KeyboardInput::DoInput().

462 { return uiPriority; }

Here is the caller graph for this function:

C4KeyScope C4CustomKey::GetScope ( ) const
inlineinherited

Definition at line 461 of file C4KeyboardInput.h.

Referenced by C4KeyboardInput::DoInput().

461 { return Scope; }

Here is the caller graph for this function:

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

Definition at line 668 of file C4KeyboardInput.cpp.

References C4CustomKey::GetCodes().

Referenced by C4KeyboardInput::DoInput().

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

Here is the call graph for this function:

Here is the caller graph for this function:

bool C4CustomKey::IsDown ( ) const
inlineinherited

Definition at line 468 of file C4KeyboardInput.h.

Referenced by C4KeyboardInput::DoInput().

468 { return is_down; }

Here is the caller graph for this function:

void C4CustomKey::KillCallbacks ( const C4CustomKey pOfKey)
inherited

Definition at line 698 of file C4KeyboardInput.cpp.

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

Referenced by C4KeyboardInput::UnregisterKeyBinding().

699 {
700  // remove all instances from list
701  CBVec::iterator i;
702  while ((i = std::find_if(vecCallbacks.begin(), vecCallbacks.end(), std::bind2nd(std::ptr_fun(&C4KeyboardCallbackInterfaceHasOriginalKey), pOfKey))) != vecCallbacks.end())
703  {
704  C4KeyboardCallbackInterface *pItfc = *i;
705  vecCallbacks.erase(i);
706  pItfc->Deref();
707  }
708 }
bool C4KeyboardCallbackInterfaceHasOriginalKey(C4KeyboardCallbackInterface *pIntfc, const C4CustomKey *pCheckKey)

Here is the call graph for this function:

Here is the caller graph for this function:

void C4CustomKey::Ref ( )
inlineinherited

Definition at line 456 of file C4KeyboardInput.h.

References C4CustomKey::iRef.

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

456 { ++iRef; }

Here is the caller graph for this function:

void C4CustomKey::Update ( const C4CustomKey pByKey)
inherited

Definition at line 677 of file C4KeyboardInput.cpp.

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

Referenced by C4KeyboardInput::RegisterKey().

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 }

Here is the caller graph for this function:

Member Data Documentation

int C4CustomKey::iRef
protectedinherited

Definition at line 447 of file C4KeyboardInput.h.

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

CBVec C4CustomKey::vecCallbacks
inherited

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