#include <Protocol/SimpleTextOut.h>\r
#include <Protocol/SimpleTextIn.h>\r
#include <Protocol/FormBrowser2.h>\r
+#include <Protocol/FormBrowserEx.h>\r
#include <Protocol/DevicePath.h>\r
#include <Protocol/UnicodeCollation.h>\r
#include <Protocol/HiiConfigAccess.h>\r
// Definition for function key setting\r
//\r
#define NONE_FUNCTION_KEY_SETTING 0\r
-#define DEFAULT_FUNCTION_KEY_SETTING (FUNCTION_NINE | FUNCTION_TEN)\r
-\r
-#define FUNCTION_NINE (1 << 2)\r
-#define FUNCTION_TEN (1 << 3)\r
+#define ENABLE_FUNCTION_KEY_SETTING 1\r
\r
typedef struct {\r
EFI_GUID FormSetGuid;\r
//\r
// Produced protocol\r
//\r
- EFI_FORM_BROWSER2_PROTOCOL FormBrowser2;\r
+ EFI_FORM_BROWSER2_PROTOCOL FormBrowser2;\r
+ \r
+ EFI_FORM_BROWSER_EXTENSION_PROTOCOL FormBrowserEx;\r
\r
} SETUP_DRIVER_PRIVATE_DATA;\r
\r
\r
#define FORMSET_DEFAULTSTORE_FROM_LINK(a) CR (a, FORMSET_DEFAULTSTORE, Link, FORMSET_DEFAULTSTORE_SIGNATURE)\r
\r
+#define FORM_BROWSER_FORMSET_SIGNATURE SIGNATURE_32 ('F', 'B', 'F', 'S')\r
+\r
typedef struct {\r
- EFI_HII_HANDLE HiiHandle;\r
+ UINTN Signature;\r
+ LIST_ENTRY Link;\r
+ EFI_HII_HANDLE HiiHandle; // unique id for formset.\r
EFI_HANDLE DriverHandle;\r
EFI_HII_CONFIG_ACCESS_PROTOCOL *ConfigAccess;\r
EFI_DEVICE_PATH_PROTOCOL *DevicePath;\r
LIST_ENTRY ExpressionListHead; // List of Expressions (FORM_EXPRESSION)\r
} FORM_BROWSER_FORMSET;\r
\r
+#define FORM_BROWSER_FORMSET_FROM_LINK(a) CR (a, FORM_BROWSER_FORMSET, Link, FORM_BROWSER_FORMSET_SIGNATURE)\r
+\r
#define BROWSER_CONTEXT_SIGNATURE SIGNATURE_32 ('B', 'C', 'T', 'X')\r
\r
typedef struct {\r
BOOLEAN ResetRequired;\r
UINT16 Direction;\r
EFI_SCREEN_DESCRIPTOR ScreenDimensions;\r
- CHAR16 *FunctionNineString;\r
- CHAR16 *FunctionTenString;\r
CHAR16 *EnterString;\r
CHAR16 *EnterCommitString;\r
CHAR16 *EnterEscapeString;\r
CHAR16 *EscapeString;\r
- CHAR16 *SaveFailed;\r
CHAR16 *MoveHighlight;\r
CHAR16 *MakeSelection;\r
CHAR16 *DecNumericInput;\r
\r
#define BROWSER_CONTEXT_FROM_LINK(a) CR (a, BROWSER_CONTEXT, Link, BROWSER_CONTEXT_SIGNATURE)\r
\r
+#define BROWSER_HOT_KEY_SIGNATURE SIGNATURE_32 ('B', 'H', 'K', 'S')\r
+\r
+typedef struct {\r
+ UINTN Signature;\r
+ LIST_ENTRY Link;\r
+ \r
+ EFI_INPUT_KEY *KeyData;\r
+ IN UINT32 Action;\r
+ IN UINT16 DefaultId;\r
+ IN EFI_STRING HelpString;\r
+} BROWSER_HOT_KEY;\r
+\r
+#define BROWSER_HOT_KEY_FROM_LINK(a) CR (a, BROWSER_HOT_KEY, Link, BROWSER_HOT_KEY_SIGNATURE)\r
+\r
extern EFI_HII_DATABASE_PROTOCOL *mHiiDatabase;\r
extern EFI_HII_STRING_PROTOCOL *mHiiString;\r
extern EFI_HII_CONFIG_ROUTING_PROTOCOL *mHiiConfigRouting;\r
extern EFI_SCREEN_DESCRIPTOR gScreenDimensions;\r
\r
extern FORM_BROWSER_FORMSET *gOldFormSet;\r
+extern LIST_ENTRY gBrowserFormSetList;\r
+extern LIST_ENTRY gBrowserHotKeyList;\r
+extern BROWSER_SETTING_SCOPE gBrowserSettingScope;\r
+extern EXIT_HANDLER ExitHandlerFunction;\r
+extern UINTN gFooterHeight;\r
\r
//\r
// Browser Global Strings\r
//\r
-extern CHAR16 *gFunctionNineString;\r
-extern CHAR16 *gFunctionTenString;\r
+extern CHAR16 *gDiscardFailed;\r
+extern CHAR16 *gDefaultFailed;\r
extern CHAR16 *gEnterString;\r
extern CHAR16 *gEnterCommitString;\r
extern CHAR16 *gEnterEscapeString;\r
IN UINTN Type\r
);\r
\r
+\r
/**\r
- Discard data for form level or formset level.\r
+ Discard data based on the input setting scope (Form, FormSet or System).\r
\r
@param FormSet FormSet data structure.\r
@param Form Form data structure.\r
- @param SingleForm whether submit single form or formset.\r
+ @param SettingScope Setting Scope for Discard action.\r
\r
@retval EFI_SUCCESS The function completed successfully.\r
+ @retval EFI_UNSUPPORTED Unsupport SettingScope.\r
\r
**/\r
EFI_STATUS\r
DiscardForm (\r
IN FORM_BROWSER_FORMSET *FormSet,\r
IN FORM_BROWSER_FORM *Form,\r
- IN BOOLEAN SingleForm\r
+ IN BROWSER_SETTING_SCOPE SettingScope\r
);\r
\r
/**\r
- Submit data for form level or formset level.\r
+ Submit data based on the input Setting level (Form, FormSet or System).\r
\r
@param FormSet FormSet data structure.\r
@param Form Form data structure.\r
- @param SingleForm whether submit single form or formset.\r
+ @param SettingScope Setting Scope for Submit action.\r
\r
@retval EFI_SUCCESS The function completed successfully.\r
+ @retval EFI_UNSUPPORTED Unsupport SettingScope.\r
\r
**/\r
EFI_STATUS\r
SubmitForm (\r
IN FORM_BROWSER_FORMSET *FormSet,\r
IN FORM_BROWSER_FORM *Form,\r
- IN BOOLEAN SingleForm\r
+ IN BROWSER_SETTING_SCOPE SettingScope\r
);\r
\r
/**\r
);\r
\r
/**\r
- Reset Questions in a Formset to their default value.\r
+ Reset Questions to their default value in a Form, Formset or System.\r
\r
@param FormSet FormSet data structure.\r
+ @param Form Form data structure.\r
@param DefaultId The Class of the default.\r
+ @param SettingScope Setting Scope for Default action.\r
\r
@retval EFI_SUCCESS The function completed successfully.\r
+ @retval EFI_UNSUPPORTED Unsupport SettingScope.\r
\r
**/\r
EFI_STATUS\r
-ExtractFormSetDefault (\r
+ExtractDefault (\r
IN FORM_BROWSER_FORMSET *FormSet,\r
- IN UINT16 DefaultId\r
+ IN FORM_BROWSER_FORM *Form,\r
+ IN UINT16 DefaultId,\r
+ IN BROWSER_SETTING_SCOPE SettingScope\r
);\r
\r
/**\r
IN EFI_BROWSER_ACTION Action,\r
IN BOOLEAN SkipSaveOrDiscard\r
);\r
+\r
+/**\r
+ Find the matched FormSet context in the backup maintain list based on HiiHandle.\r
+ \r
+ @param Handle The Hii Handle.\r
+ \r
+ @return the found FormSet context. If no found, NULL will return.\r
+\r
+**/\r
+FORM_BROWSER_FORMSET * \r
+GetFormSetFromHiiHandle (\r
+ EFI_HII_HANDLE Handle\r
+ );\r
+\r
+/**\r
+ Check whether the input HII handle is the FormSet that is being used.\r
+ \r
+ @param Handle The Hii Handle.\r
+ \r
+ @retval TRUE HII handle is being used.\r
+ @retval FALSE HII handle is not being used.\r
+\r
+**/\r
+BOOLEAN\r
+IsHiiHandleInBrowserContext (\r
+ EFI_HII_HANDLE Handle\r
+ );\r
+\r
+/**\r
+ Configure what scope the hot key will impact.\r
+ All hot keys have the same scope. The mixed hot keys with the different level are not supported.\r
+ If no scope is set, the default scope will be FormSet level.\r
+ After all registered hot keys are removed, previous Scope can reset to another level.\r
+ \r
+ @param[in] Scope Scope level to be set. \r
+ \r
+ @retval EFI_SUCCESS Scope is set correctly.\r
+ @retval EFI_INVALID_PARAMETER Scope is not the valid value specified in BROWSER_SETTING_SCOPE. \r
+ @retval EFI_UNSPPORTED Scope level is different from current one that the registered hot keys have.\r
+\r
+**/\r
+EFI_STATUS\r
+EFIAPI\r
+SetScope (\r
+ IN BROWSER_SETTING_SCOPE Scope\r
+ );\r
+\r
+/**\r
+ Register the hot key with its browser action, or unregistered the hot key.\r
+ Only support hot key that is not printable character (control key, function key, etc.).\r
+ If the action value is zero, the hot key will be unregistered if it has been registered.\r
+ If the same hot key has been registered, the new action and help string will override the previous ones.\r
+ \r
+ @param[in] KeyData A pointer to a buffer that describes the keystroke\r
+ information for the hot key. Its type is EFI_INPUT_KEY to \r
+ be supported by all ConsoleIn devices.\r
+ @param[in] Action Action value that describes what action will be trigged when the hot key is pressed. \r
+ @param[in] DefaultId Specifies the type of defaults to retrieve, which is only for DEFAULT action.\r
+ @param[in] HelpString Help string that describes the hot key information.\r
+ Its value may be NULL for the unregistered hot key.\r
+ \r
+ @retval EFI_SUCCESS Hot key is registered or unregistered.\r
+ @retval EFI_INVALID_PARAMETER KeyData is NULL.\r
+ @retval EFI_NOT_FOUND KeyData is not found to be unregistered.\r
+ @retval EFI_UNSUPPORTED Key represents a printable character. It is conflicted with Browser.\r
+**/\r
+EFI_STATUS\r
+EFIAPI\r
+RegisterHotKey (\r
+ IN EFI_INPUT_KEY *KeyData,\r
+ IN UINT32 Action,\r
+ IN UINT16 DefaultId,\r
+ IN EFI_STRING HelpString OPTIONAL\r
+ );\r
+\r
+/**\r
+ Register Exit handler function. \r
+ When more than one handler function is registered, the latter one will override the previous one. \r
+ When NULL handler is specified, the previous Exit handler will be unregistered. \r
+ \r
+ @param[in] Handler Pointer to handler function. \r
+\r
+**/\r
+VOID\r
+EFIAPI\r
+RegiserExitHandler (\r
+ IN EXIT_HANDLER Handler\r
+ );\r
+\r
+/**\r
+ Create reminder to let user to choose save or discard the changed browser data.\r
+ Caller can use it to actively check the changed browser data.\r
+\r
+ @retval BROWSER_NO_CHANGES No browser data is changed.\r
+ @retval BROWSER_SAVE_CHANGES The changed browser data is saved.\r
+ @retval BROWSER_DISCARD_CHANGES The changed browser data is discard.\r
+\r
+**/\r
+UINT32\r
+EFIAPI\r
+SaveReminder (\r
+ VOID\r
+ );\r
+\r
+/**\r
+ Find the registered HotKey based on KeyData.\r
+ \r
+ @param[in] KeyData A pointer to a buffer that describes the keystroke\r
+ information for the hot key.\r
+\r
+ @return The registered HotKey context. If no found, NULL will return.\r
+**/\r
+BROWSER_HOT_KEY *\r
+GetHotKeyFromRegisterList (\r
+ IN EFI_INPUT_KEY *KeyData\r
+ );\r
+\r
#endif\r