// ----------------------------------------------------------------------------- /// @file MenuElements.c /// @brief Description // ----------------------------------------------------------------------------- // Micro-Key bv // Industrieweg 28, 9804 TG Noordhorn // Postbus 92, 9800 AB Zuidhorn // The Netherlands // Tel: +31 594 503020 // Fax: +31 594 505825 // Email: support@microkey.nl // Web: www.microkey.nl // ----------------------------------------------------------------------------- /// $Revision$ /// $Author$ /// $Date$ // (c) 2017 Micro-Key bv // ----------------------------------------------------------------------------- /// @file MenuElements.c /// @ingroup {group_name} // ----------------------------------------------------------------------------- // Include files // ----------------------------------------------------------------------------- #include "string.h" #include "MenuElements.h" // ----------------------------------------------------------------------------- // Constant and macro definitions // ----------------------------------------------------------------------------- // ----------------------------------------------------------------------------- // Type definitions // ----------------------------------------------------------------------------- // ----------------------------------------------------------------------------- // File-scope variables // ----------------------------------------------------------------------------- // ----------------------------------------------------------------------------- // Function declarations // ----------------------------------------------------------------------------- // ----------------------------------------------------------------------------- // Function definitions // ----------------------------------------------------------------------------- ErrorStatus MenuElements_createMenuPage (struct MenuPage* self, bool hasCursor, int maxNumberOfRows) { ErrorStatus returnValue = SUCCESS; if (maxNumberOfRows <= MENUCORE_MAX_NUMBER_OF_ROWS) { self->maxNumberOfKeys = NUMBER_OF_KEY_EVENTS * MENUCORE_MAX_NUMBER_OF_KEYS; self->numberOfRows = 0; self->numberOfKeys = 0; self->maxNumberOfRows = maxNumberOfRows; self->hasCursor = hasCursor; } else { returnValue = ERROR; } return returnValue; } ErrorStatus MenuElements_addMenuPageRow (struct MenuPage* self, const char* text, int newState, MenuCoreFunctionCall actionCall) { ErrorStatus returnValue = SUCCESS; if (self->numberOfRows < self->maxNumberOfRows) { // memcpy(self->row[self->numberOfRows].text, text, 20); self->row[self->numberOfRows].text = text; self->row[self->numberOfRows].newState = newState; self->row[self->numberOfRows].actionPointer = actionCall; self->numberOfRows++; } else { returnValue = ERROR; } return returnValue; } ErrorStatus MenuElements_addKeyAction_HOTKEYSELECT (struct MenuPage* self, char key, Keypad_KeyState keyState, int rowToSelect) { ErrorStatus returnValue = SUCCESS; if (self->numberOfKeys < self->maxNumberOfKeys) { self->keyActionBinding[self->numberOfKeys].key = key; self->keyActionBinding[self->numberOfKeys].keyState = keyState; self->keyActionBinding[self->numberOfKeys].action = HOTKEY_SELECT; self->keyActionBinding[self->numberOfKeys].argument = rowToSelect; self->keyActionBinding[self->numberOfKeys].actionPointer = NULL; self->numberOfKeys++; } else { returnValue = ERROR; } return returnValue; } ErrorStatus MenuElements_addKeyAction_SELECT (struct MenuPage* self, char key, Keypad_KeyState keyState) { ErrorStatus returnValue = SUCCESS; if (self->numberOfKeys < self->maxNumberOfKeys) { self->keyActionBinding[self->numberOfKeys].key = key; self->keyActionBinding[self->numberOfKeys].keyState = keyState; self->keyActionBinding[self->numberOfKeys].action = SELECT; self->keyActionBinding[self->numberOfKeys].argument = 0; self->keyActionBinding[self->numberOfKeys].actionPointer = NULL; self->numberOfKeys++; } else { returnValue = ERROR; } return returnValue; } ErrorStatus MenuElements_addKeyAction_GOTOSTATE (struct MenuPage* self, char key, Keypad_KeyState keyState, T_MenuState state) { ErrorStatus returnValue = SUCCESS; if (self->numberOfKeys < self->maxNumberOfKeys) { self->keyActionBinding[self->numberOfKeys].key = key; self->keyActionBinding[self->numberOfKeys].keyState = keyState; self->keyActionBinding[self->numberOfKeys].action = GOTO_STATE; self->keyActionBinding[self->numberOfKeys].argument = state; self->keyActionBinding[self->numberOfKeys].actionPointer = NULL; self->numberOfKeys++; } else { returnValue = ERROR; } return returnValue; } ErrorStatus MenuElements_addKeyAction_EXECUTEFUNCTION (struct MenuPage* self, char key, Keypad_KeyState keyState, MenuCoreFunctionCall actionPointer) { ErrorStatus returnValue = SUCCESS; if (self->numberOfKeys < self->maxNumberOfKeys) { self->keyActionBinding[self->numberOfKeys].key = key; self->keyActionBinding[self->numberOfKeys].keyState = keyState; self->keyActionBinding[self->numberOfKeys].action = EXECUTE_FUNCTION; self->keyActionBinding[self->numberOfKeys].argument = 0; self->keyActionBinding[self->numberOfKeys].actionPointer = actionPointer; self->numberOfKeys++; } else { returnValue = ERROR; } return returnValue; } ErrorStatus MenuElements_addKeyAction_SCROLLUP (struct MenuPage* self, char key, Keypad_KeyState keyState) { ErrorStatus returnValue = SUCCESS; if (self->numberOfKeys < self->maxNumberOfKeys) { self->keyActionBinding[self->numberOfKeys].key = key; self->keyActionBinding[self->numberOfKeys].keyState = keyState; self->keyActionBinding[self->numberOfKeys].action = SCROLL_UP; self->keyActionBinding[self->numberOfKeys].argument = 0; self->keyActionBinding[self->numberOfKeys].actionPointer = NULL; self->numberOfKeys++; } else { returnValue = ERROR; } return returnValue; } ErrorStatus MenuElements_addKeyAction_SCROLLDOWN (struct MenuPage* self, char key, Keypad_KeyState keyState) { ErrorStatus returnValue = SUCCESS; if (self->numberOfKeys < self->maxNumberOfKeys) { self->keyActionBinding[self->numberOfKeys].key = key; self->keyActionBinding[self->numberOfKeys].keyState = keyState; self->keyActionBinding[self->numberOfKeys].action = SCROLL_DOWN; self->keyActionBinding[self->numberOfKeys].argument = 0; self->keyActionBinding[self->numberOfKeys].actionPointer = NULL; self->numberOfKeys++; } else { returnValue = ERROR; } return returnValue; } ErrorStatus MenuElements_addKeyAction_DIGITINSERT (struct MenuPage* self, char key, Keypad_KeyState keyState, unsigned int maxNumberOfDigits) { ErrorStatus returnValue = SUCCESS; if (self->numberOfKeys < self->maxNumberOfKeys) { self->keyActionBinding[self->numberOfKeys].key = key; self->keyActionBinding[self->numberOfKeys].keyState = keyState; self->keyActionBinding[self->numberOfKeys].action = DIGIT_INSERT; self->keyActionBinding[self->numberOfKeys].argument = maxNumberOfDigits; self->keyActionBinding[self->numberOfKeys].actionPointer = NULL; self->numberOfKeys++; } else { returnValue = ERROR; } return returnValue; } ErrorStatus MenuElements_addKeyAction_DIGITREMOVE (struct MenuPage* self, char key, Keypad_KeyState keyState) { ErrorStatus returnValue = SUCCESS; if (self->numberOfKeys < self->maxNumberOfKeys) { self->keyActionBinding[self->numberOfKeys].key = key; self->keyActionBinding[self->numberOfKeys].keyState = keyState; self->keyActionBinding[self->numberOfKeys].action = DIGIT_REMOVE; self->keyActionBinding[self->numberOfKeys].argument = 0; self->keyActionBinding[self->numberOfKeys].actionPointer = NULL; self->numberOfKeys++; } else { returnValue = ERROR; } return returnValue; } ErrorStatus MenuElements_addKeyAction_DIGITINSERTCONFIRM (struct MenuPage* self, char key, Keypad_KeyState keyState, MenuCoreFunctionCall actionPointer) { ErrorStatus returnValue = SUCCESS; if (self->numberOfKeys < self->maxNumberOfKeys) { self->keyActionBinding[self->numberOfKeys].key = key; self->keyActionBinding[self->numberOfKeys].keyState = keyState; self->keyActionBinding[self->numberOfKeys].action = DIGIT_INSERT_CONFIRM; self->keyActionBinding[self->numberOfKeys].argument = 0; self->keyActionBinding[self->numberOfKeys].actionPointer = actionPointer; self->numberOfKeys++; } else { returnValue = ERROR; } return returnValue; }