///** @file
//
//  Device Manager formset.
//
//  Copyright (c) 2004 - 2015, Intel Corporation. All rights reserved.<BR>
//  This program and the accompanying materials
//  are licensed and made available under the terms and conditions of the BSD License
//  which accompanies this distribution.  The full text of the license may be found at
//  http://opensource.org/licenses/bsd-license.php
//  
//  THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
//  WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
//  
//**/

#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;