+ Status = EFI_SUCCESS;\r
+ PrivateData = DRIVER_SAMPLE_PRIVATE_FROM_THIS (This);\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
+ &mFormSetGuid, // 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
+ }\r
+ break;\r
+\r
+ case EFI_BROWSER_ACTION_FORM_CLOSE:\r
+ {\r
+ if (QuestionId == 0x5678) {\r
+ //\r
+ // Sample CallBack for UEFI FORM_CLOSE action:\r
+ // Show up a pop-up to specify Form 3 will be closed when exit Form 3.\r
+ //\r
+ do {\r
+ CreatePopUp (\r
+ EFI_LIGHTGRAY | EFI_BACKGROUND_BLUE,\r
+ &Key,\r
+ L"",\r
+ L"You are going to leave third Form!",\r
+ L"Press ESC or ENTER to continue ...",\r
+ L"",\r
+ NULL\r
+ );\r
+ } while ((Key.ScanCode != SCAN_ESC) && (Key.UnicodeChar != CHAR_CARRIAGE_RETURN));\r
+ }\r
+ }\r
+ break;\r
+ \r
+ case EFI_BROWSER_ACTION_RETRIEVE:\r
+ {\r
+ if (QuestionId == 0x1111) {\r
+ //\r
+ // EfiVarstore question takes sample action (print value as debug information) \r
+ // after read/write question.\r
+ //\r
+ MyVarSize = 1;\r
+ Status = gRT->GetVariable(\r
+ L"MyVar",\r
+ &mFormSetGuid,\r
+ NULL,\r
+ &MyVarSize,\r
+ &MyVar\r
+ );\r
+ ASSERT_EFI_ERROR (Status);\r
+ DEBUG ((DEBUG_INFO, "EfiVarstore question: Tall value is %d with value width %d\n", MyVar, MyVarSize));\r
+ }\r
+ }\r
+ break;\r
+\r
+ case EFI_BROWSER_ACTION_CHANGING:\r
+ {\r
+ switch (QuestionId) {\r
+ case 0x1234:\r