///** @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);

    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;