void BaseObj::DeleteAction(const char *name) { Action *action; if (!HasAction(name, &action)) return; Action **new_actions; int i, index; index = 0; new_actions = new Action*[_numActions - 1]; for (i = 0; i < _numActions; i++) if (_actions[i] != action) new_actions[index++] = _actions[i]; delete action->ReferenceName; delete action->DisplayName; delete action->Nmemonic; delete action->AcceleratorText; delete action->Accelerator; delete action->Help; delete action->ContextualHelp; delete action->Dependancies; delete action; delete []_actions; _actions = new_actions; _numActions--; }
PdfAction* PdfAnnotation::GetAction() const { if( !m_pAction && HasAction() ) const_cast<PdfAnnotation*>(this)->m_pAction = new PdfAction( m_pObject->GetIndirectKey( "A" ) ); return m_pAction; }
void InputSystem::AddActionHandler( uint32_t action, InputActionHandler handler ) { if (HasAction(action)) { mActionHandlers[action] = handler; } }
boolean BaseObj::SendAction(const char *actionName, BaseObj *requestor) { Action *action; (void) HasAction(actionName, &action); return SendAction(action, requestor); }
boolean BaseObj::HasAction(Action *action) { Action *dummy; if (action) return HasAction(action->ReferenceName, &dummy); else return false; }
boolean BaseObj::SendAction(Action *action, BaseObj *requestor) { boolean status; delete [] _lastActionOutput; free(_lastActionName); _lastActionOutput = NULL; _lastActionName = strdup(action->ReferenceName); if ((status = HasAction(action)) == true) _lastActionStatus = (*action->Handler)(this, &_lastActionOutput, requestor); else { _lastActionStatus = -1; int len = strlen("'%s' is not an action of %s") + strlen(ObjectClassName()) + strlen(action->ReferenceName); _lastActionOutput = new char [len]; sprintf(_lastActionOutput, "'%s' is not an action of %s", ObjectClassName(), action->ReferenceName); } return status; }
boolean BaseObj::HasAction(const char *actionName) { Action *dummy; return HasAction(actionName, &dummy); }