///** @file
//
//  Device Manager formset.
//
//  Copyright (c) 2004 - 2015, Intel Corporation. All rights reserved.<BR>
//  SPDX-License-Identifier: BSD-2-Clause-Patent
//
//**/

#define FORMSET_GUID  { 0x3ebfa8e6, 0x511d, 0x4b5b, 0xa9, 0x5f, 0xfb, 0x38, 0x26, 0xf, 0x1c, 0x27 }

#define LABEL_DEVICES_LIST                 0x1100
#define LABEL_NETWORK_DEVICE_LIST_ID       0x1101
#define LABEL_NETWORK_DEVICE_ID            0x1102
#define LABEL_END                          0xffff

#define DEVICE_MANAGER_FORM_ID             0x1000
#define NETWORK_DEVICE_LIST_FORM_ID        0x1001
#define NETWORK_DEVICE_FORM_ID             0x1002

formset
  guid      = FORMSET_GUID,
  title     = STRING_TOKEN(STR_EDKII_MENU_TITLE),
  help      = STRING_TOKEN(STR_EDKII_MENU_HELP),
  classguid = gEfiIfrFrontPageGuid,

  form formid = DEVICE_MANAGER_FORM_ID,
    title  = STRING_TOKEN(STR_EDKII_MENU_TITLE);
    subtitle text = STRING_TOKEN(STR_DEVICES_LIST);

    //
    // Add this invisable text in order to indicate enter Device Manager form.
    //
    suppressif TRUE;
          text
              help  = STRING_TOKEN(STR_EMPTY_STRING),
              text  = STRING_TOKEN(STR_EMPTY_STRING),
              flags = INTERACTIVE,
              key   = 0x1212;
    endif;

    label LABEL_DEVICES_LIST;
    label LABEL_END;

    subtitle text = STRING_TOKEN(STR_EMPTY_STRING);
    subtitle text = STRING_TOKEN(STR_EMPTY_STRING);
    subtitle text = STRING_TOKEN(STR_EXIT_STRING);
  endform;

  form formid = NETWORK_DEVICE_LIST_FORM_ID,
    title = STRING_TOKEN(STR_FORM_NETWORK_DEVICE_LIST_TITLE);
    subtitle text = STRING_TOKEN(STR_NETWORK_DEVICE_LIST_STRING);

    label LABEL_NETWORK_DEVICE_LIST_ID;
    label LABEL_END;

    subtitle text = STRING_TOKEN(STR_EMPTY_STRING);
    subtitle text = STRING_TOKEN(STR_EXIT_STRING);
  endform;

  form formid = NETWORK_DEVICE_FORM_ID,
    title = STRING_TOKEN(STR_FORM_NETWORK_DEVICE_TITLE);
    subtitle text = STRING_TOKEN(STR_NETWORK_DEVICE_STRING);

    label LABEL_NETWORK_DEVICE_ID;
    label LABEL_END;

    subtitle text = STRING_TOKEN(STR_EMPTY_STRING);
    subtitle text = STRING_TOKEN(STR_EXIT_STRING);
  endform;
endformset;