- switch (QuestionId) {\r
- case 0x1234:\r
- //\r
- // Initialize the container for dynamic opcodes\r
- //\r
- StartOpCodeHandle = HiiAllocateOpCodeHandle ();\r
- ASSERT (StartOpCodeHandle != NULL);\r
-\r
- EndOpCodeHandle = HiiAllocateOpCodeHandle ();\r
- ASSERT (EndOpCodeHandle != NULL);\r
-\r
- //\r
- // Create Hii Extend Label OpCode as the start opcode\r
- //\r
- StartLabel = (EFI_IFR_GUID_LABEL *) HiiCreateGuidOpCode (StartOpCodeHandle, &gEfiIfrTianoGuid, NULL, sizeof (EFI_IFR_GUID_LABEL));\r
- StartLabel->ExtendOpCode = EFI_IFR_EXTEND_OP_LABEL;\r
- StartLabel->Number = LABEL_UPDATE1;\r
-\r
- //\r
- // Create Hii Extend Label OpCode as the end opcode\r
- //\r
- EndLabel = (EFI_IFR_GUID_LABEL *) HiiCreateGuidOpCode (EndOpCodeHandle, &gEfiIfrTianoGuid, NULL, sizeof (EFI_IFR_GUID_LABEL));\r
- EndLabel->ExtendOpCode = EFI_IFR_EXTEND_OP_LABEL;\r
- EndLabel->Number = LABEL_END;\r
-\r
- HiiCreateActionOpCode (\r
- StartOpCodeHandle, // Container for dynamic created opcodes\r
- 0x1237, // Question ID\r
- STRING_TOKEN(STR_EXIT_TEXT), // Prompt text\r
- STRING_TOKEN(STR_EXIT_TEXT), // Help text\r
- EFI_IFR_FLAG_CALLBACK, // Question flag\r
- 0 // Action String ID\r
- );\r
-\r
- //\r
- // Create Option OpCode\r
- //\r
- OptionsOpCodeHandle = HiiAllocateOpCodeHandle ();\r
- ASSERT (OptionsOpCodeHandle != NULL);\r
-\r
- HiiCreateOneOfOptionOpCode (\r
- OptionsOpCodeHandle,\r
- STRING_TOKEN (STR_BOOT_OPTION1),\r
- 0,\r
- EFI_IFR_NUMERIC_SIZE_1,\r
- 1\r
- );\r
-\r
- HiiCreateOneOfOptionOpCode (\r
- OptionsOpCodeHandle,\r
- STRING_TOKEN (STR_BOOT_OPTION2),\r
- 0,\r
- EFI_IFR_NUMERIC_SIZE_1,\r
- 2\r
- );\r
-\r
- //\r
- // Prepare initial value for the dynamic created oneof Question\r
- //\r
- PrivateData->Configuration.DynamicOneof = 2;\r
- Status = gRT->SetVariable(\r
- VariableName,\r
- &mFormSetGuid,\r
- EFI_VARIABLE_NON_VOLATILE | EFI_VARIABLE_BOOTSERVICE_ACCESS,\r
- sizeof (DRIVER_SAMPLE_CONFIGURATION),\r
- &PrivateData->Configuration\r
- );\r
-\r
- HiiCreateOneOfOpCode (\r
- StartOpCodeHandle, // Container for dynamic created opcodes\r
- 0x8001, // Question ID (or call it "key")\r
- CONFIGURATION_VARSTORE_ID, // VarStore ID\r
- (UINT16) DYNAMIC_ONE_OF_VAR_OFFSET, // Offset in Buffer Storage\r
- STRING_TOKEN (STR_ONE_OF_PROMPT), // Question prompt text\r
- STRING_TOKEN (STR_ONE_OF_HELP), // Question help text\r
- EFI_IFR_FLAG_CALLBACK, // Question flag\r
- EFI_IFR_NUMERIC_SIZE_1, // Data type of Question Value\r
- OptionsOpCodeHandle, // Option Opcode list\r
- NULL // Default Opcode is NULl\r
- );\r
-\r
- HiiCreateOrderedListOpCode (\r
- StartOpCodeHandle, // Container for dynamic created opcodes\r
- 0x8002, // Question ID\r
- CONFIGURATION_VARSTORE_ID, // VarStore ID\r
- (UINT16) DYNAMIC_ORDERED_LIST_VAR_OFFSET, // Offset in Buffer Storage\r
- STRING_TOKEN (STR_BOOT_OPTIONS), // Question prompt text\r
- STRING_TOKEN (STR_BOOT_OPTIONS), // Question help text\r
- EFI_IFR_FLAG_RESET_REQUIRED, // Question flag\r
- 0, // Ordered list flag, e.g. EFI_IFR_UNIQUE_SET\r
- EFI_IFR_NUMERIC_SIZE_1, // Data type of Question value\r
- 5, // Maximum container\r
- OptionsOpCodeHandle, // Option Opcode list\r
- NULL // Default Opcode is NULl\r
- );\r
+ switch (Action) {\r
+ case EFI_BROWSER_ACTION_FORM_OPEN:\r
+ {\r
+ if (QuestionId == 0x1234) {\r
+ //\r
+ // Sample CallBack for UEFI FORM_OPEN action:\r
+ // Add Save action into Form 3 when Form 1 is opened.\r
+ // This will be done only in FORM_OPEN CallBack of question with ID 0x1234 from Form 1.\r
+ //\r
+ PrivateData = DRIVER_SAMPLE_PRIVATE_FROM_THIS (This);\r
+\r
+ //\r
+ // Initialize the container for dynamic opcodes\r
+ //\r
+ StartOpCodeHandle = HiiAllocateOpCodeHandle ();\r
+ ASSERT (StartOpCodeHandle != NULL);\r
+\r
+ //\r
+ // Create Hii Extend Label OpCode as the start opcode\r
+ //\r
+ StartLabel = (EFI_IFR_GUID_LABEL *) HiiCreateGuidOpCode (StartOpCodeHandle, &gEfiIfrTianoGuid, NULL, sizeof (EFI_IFR_GUID_LABEL));\r
+ StartLabel->ExtendOpCode = EFI_IFR_EXTEND_OP_LABEL;\r
+ StartLabel->Number = LABEL_UPDATE2;\r
+\r
+ HiiCreateActionOpCode (\r
+ StartOpCodeHandle, // Container for dynamic created opcodes\r
+ 0x1238, // Question ID\r
+ STRING_TOKEN(STR_SAVE_TEXT), // Prompt text\r
+ STRING_TOKEN(STR_SAVE_TEXT), // Help text\r
+ EFI_IFR_FLAG_CALLBACK, // Question flag\r
+ 0 // Action String ID\r
+ );\r
+\r
+ HiiUpdateForm (\r
+ PrivateData->HiiHandle[0], // HII handle\r
+ &gDriverSampleFormSetGuid, // Formset GUID\r
+ 0x3, // Form ID\r
+ StartOpCodeHandle, // Label for where to insert opcodes\r
+ NULL // Insert data\r
+ );\r
+\r
+ HiiFreeOpCodeHandle (StartOpCodeHandle);\r
+ }\r