OpenClonk
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros
C4CustomKey Class Reference

#include <C4KeyboardInput.h>

Inheritance diagram for C4CustomKey:
[legend]

Public 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
 

Public Member Functions

 C4CustomKey (const C4CustomKey &rCpy, bool fCopyCallbacks)
 
virtual ~C4CustomKey ()
 
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)
 

Public Attributes

CBVec vecCallbacks
 

Protected Member Functions

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

Protected Attributes

int iRef
 

Friends

class C4Game
 

Detailed Description

Definition at line 416 of file C4KeyboardInput.h.

Member Typedef Documentation

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

Definition at line 419 of file C4KeyboardInput.h.

Member Enumeration Documentation

Enumerator
PRIO_None 
PRIO_Base 
PRIO_Dlg 
PRIO_Ctrl 
PRIO_CtrlOverride 
PRIO_FocusCtrl 
PRIO_Context 
PRIO_PlrControl 
PRIO_MoreThanMax 

Definition at line 431 of file C4KeyboardInput.h.

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

Constructor & Destructor Documentation

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

Definition at line 566 of file C4KeyboardInput.cpp.

References StdStrBuf::Copy(), C4KeyCodeEx::Key, KEY_Default, C4KeyboardCallbackInterface::pOriginalKey, C4KeyboardCallbackInterface::Ref(), and vecCallbacks.

567  : Scope(Scope), Name(), uiPriority(uiPriority), iRef(0), is_down(false)
568 {
569  // generate code
570  if (DefCode.Key != KEY_Default) DefaultCodes.push_back(DefCode);
571  // ctor for default key
572  Name.Copy(szName);
573  if (pCallback)
574  {
575  pCallback->Ref();
576  vecCallbacks.push_back(pCallback);
577  pCallback->pOriginalKey = this;
578  }
579 }
const C4KeyCode KEY_Default
C4KeyCode Key
void Copy()
Definition: StdBuf.h:467
class C4CustomKey * pOriginalKey

Here is the call graph for this function:

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

Definition at line 581 of file C4KeyboardInput.cpp.

References StdStrBuf::Copy(), C4KeyboardCallbackInterface::pOriginalKey, C4KeyboardCallbackInterface::Ref(), and vecCallbacks.

582  : DefaultCodes(std::move(rDefCodes)), Scope(Scope), Name(), uiPriority(uiPriority), iRef(0), is_down(false)
583 {
584  // ctor for default key
585  Name.Copy(szName);
586  if (pCallback)
587  {
588  pCallback->Ref();
589  vecCallbacks.push_back(pCallback);
590  pCallback->pOriginalKey = this;
591  }
592 }
void Copy()
Definition: StdBuf.h:467
class C4CustomKey * pOriginalKey

Here is the call graph for this function:

C4CustomKey::C4CustomKey ( const C4CustomKey rCpy,
bool  fCopyCallbacks 
)

Definition at line 594 of file C4KeyboardInput.cpp.

References StdStrBuf::Copy(), GetName(), and vecCallbacks.

595  : Codes(rCpy.Codes), DefaultCodes(rCpy.DefaultCodes), Scope(rCpy.Scope), Name(), uiPriority(rCpy.uiPriority), iRef(0), is_down(false)
596 {
597  Name.Copy(rCpy.GetName());
598  if (fCopyCallbacks)
599  {
600  for (auto callback : rCpy.vecCallbacks)
601  {
602  callback->Ref();
603  vecCallbacks.push_back(callback);
604  }
605  }
606 }
const StdStrBuf & GetName() const
void Copy()
Definition: StdBuf.h:467

Here is the call graph for this function:

C4CustomKey::~C4CustomKey ( )
virtual

Definition at line 608 of file C4KeyboardInput.cpp.

References vecCallbacks.

609 {
610  // free callback handles
611  for (CBVec::const_iterator i = vecCallbacks.begin(); i != vecCallbacks.end(); ++i)
612  (*i)->Deref();
613 }

Member Function Documentation

void C4CustomKey::CompileFunc ( StdCompiler pComp)

Definition at line 657 of file C4KeyboardInput.cpp.

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

658 {
659  pComp->Value(mkNamingAdapt(mkSTLContainerAdapt(Codes), Name.getData(), DefaultCodes));
660 }
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:681

Here is the call graph for this function:

void C4CustomKey::Deref ( )
inline

Definition at line 455 of file C4KeyboardInput.h.

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

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

Here is the caller graph for this function:

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

Definition at line 662 of file C4KeyboardInput.cpp.

References KEYEV_Down, and vecCallbacks.

Referenced by C4KeyboardInput::DoInput().

663 {
664  // remember down-state
665  is_down = (eEv == KEYEV_Down);
666  // execute all callbacks
667  for (auto & callback : vecCallbacks)
668  if (callback->OnKeyEvent(key, eEv))
669  return true;
670  // no event processed it
671  return false;
672 }

Here is the caller graph for this function:

const CodeList& C4CustomKey::GetCodes ( ) const
inline

Definition at line 457 of file C4KeyboardInput.h.

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

457 { 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
inline

Definition at line 458 of file C4KeyboardInput.h.

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

458 { return Name; }

Here is the caller graph for this function:

unsigned int C4CustomKey::GetPriority ( ) const
inline

Definition at line 460 of file C4KeyboardInput.h.

Referenced by C4KeyboardInput::DoInput().

460 { return uiPriority; }

Here is the caller graph for this function:

C4KeyScope C4CustomKey::GetScope ( ) const
inline

Definition at line 459 of file C4KeyboardInput.h.

Referenced by C4KeyboardInput::DoInput().

459 { return Scope; }

Here is the caller graph for this function:

bool C4CustomKey::IsCodeMatched ( const C4KeyCodeEx key) const

Definition at line 615 of file C4KeyboardInput.cpp.

References GetCodes().

Referenced by C4KeyboardInput::DoInput().

616 {
617  const CodeList &codes = GetCodes();
618  for (const auto &code : codes)
619  if (code == key)
620  return true;
621  return false;
622 }
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
inline

Definition at line 466 of file C4KeyboardInput.h.

Referenced by C4KeyboardInput::DoInput().

466 { return is_down; }

Here is the caller graph for this function:

void C4CustomKey::KillCallbacks ( const C4CustomKey pOfKey)

Definition at line 645 of file C4KeyboardInput.cpp.

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

Referenced by C4KeyboardInput::UnregisterKeyBinding().

646 {
647  // remove all instances from list
648  CBVec::iterator i;
649  while ((i = std::find_if(vecCallbacks.begin(), vecCallbacks.end(), std::bind2nd(std::ptr_fun(&C4KeyboardCallbackInterfaceHasOriginalKey), pOfKey))) != vecCallbacks.end())
650  {
651  C4KeyboardCallbackInterface *pItfc = *i;
652  vecCallbacks.erase(i);
653  pItfc->Deref();
654  }
655 }
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 ( )
inline

Definition at line 454 of file C4KeyboardInput.h.

References iRef.

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

454 { ++iRef; }

Here is the caller graph for this function:

void C4CustomKey::Update ( const C4CustomKey pByKey)

Definition at line 624 of file C4KeyboardInput.cpp.

References KEYSCOPE_None, PRIO_None, and vecCallbacks.

Referenced by C4KeyboardInput::RegisterKey().

625 {
626  assert(pByKey);
627  assert(Name == pByKey->Name);
628  // transfer any assigned data, except name which should be equal anyway
629  if (pByKey->DefaultCodes.size()) DefaultCodes = pByKey->DefaultCodes;
630  if (pByKey->Codes.size()) Codes = pByKey->Codes;
631  if (pByKey->Scope != KEYSCOPE_None) Scope = pByKey->Scope;
632  if (pByKey->uiPriority != PRIO_None) uiPriority = pByKey->uiPriority;
633  for (auto callback : pByKey->vecCallbacks)
634  {
635  callback->Ref();
636  vecCallbacks.push_back(callback);
637  }
638 }

Here is the caller graph for this function:

Friends And Related Function Documentation

friend class C4Game
friend

Definition at line 448 of file C4KeyboardInput.h.

Member Data Documentation

int C4CustomKey::iRef
protected

Definition at line 445 of file C4KeyboardInput.h.

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

CBVec C4CustomKey::vecCallbacks

Definition at line 429 of file C4KeyboardInput.h.

Referenced by C4CustomKey(), Execute(), KillCallbacks(), Update(), and ~C4CustomKey().


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