mirror of
https://github.com/CloverHackyColor/CloverBootloader.git
synced 2024-12-25 16:37:42 +01:00
5dbf1e0360
Signed-off-by: Sergey Isakov <isakov-sl@bk.ru>
568 lines
24 KiB
C++
568 lines
24 KiB
C++
/*
|
|
*
|
|
* Copyright (c) 2020 Jief
|
|
* All rights reserved.
|
|
*
|
|
* Redistribution and use in source and binary forms, with or without
|
|
* modification, are permitted provided that the following conditions are
|
|
* met:
|
|
*
|
|
* * Redistributions of source code must retain the above copyright
|
|
* notice, this list of conditions and the following disclaimer.
|
|
*
|
|
* * Redistributions in binary form must reproduce the above copyright
|
|
* notice, this list of conditions and the following disclaimer in the
|
|
* documentation and/or other materials provided with the
|
|
* distribution.
|
|
*
|
|
* * Neither the name of Christoph Pfisterer nor the names of the
|
|
* contributors may be used to endorse or promote products derived
|
|
* from this software without specific prior written permission.
|
|
*
|
|
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
|
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
|
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
|
* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
|
* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
|
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
|
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
|
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
|
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
|
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
|
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
*/
|
|
|
|
#ifndef __menu_items_H__
|
|
#define __menu_items_H__
|
|
|
|
|
|
#include "libeg.h"
|
|
#include "../../refit/lib.h"
|
|
#ifdef __cplusplus
|
|
#include "../cpp_foundation/XObjArray.h"
|
|
#include "../cpp_foundation/XStringWArray.h"
|
|
#include "../cpp_foundation/XStringW.h"
|
|
#include "../../libeg/XPointer.h"
|
|
#endif
|
|
|
|
//
|
|
//#define REFIT_DEBUG (2)
|
|
//#define Print if ((!GlobalConfig.Quiet) || (GlobalConfig.TextOnly)) Print
|
|
////#include "GenericBdsLib.h"
|
|
|
|
|
|
//#define TAG_ABOUT_OLD (1)
|
|
//#define TAG_RESET_OLD (2)
|
|
//#define TAG_SHUTDOWN_OLD (3)
|
|
//#define TAG_TOOL_OLD (4)
|
|
////#define TAG_LOADER (5)
|
|
////#define TAG_LEGACY (6)
|
|
//#define TAG_INFO_OLD (7)
|
|
//#define TAG_OPTIONS (8)
|
|
//#define TAG_INPUT_OLD (9)
|
|
//#define TAG_HELP_OLD (10) // wasn't used ?
|
|
//#define TAG_SWITCH_OLD (11)
|
|
//#define TAG_CHECKBIT_OLD (12)
|
|
//#define TAG_SECURE_BOOT_OLD (13)
|
|
//#define TAG_SECURE_BOOT_CONFIG_OLD (14)
|
|
//#define TAG_CLOVER_OLD (100)
|
|
//#define TAG_EXIT_OLD (101)
|
|
//#define TAG_RETURN_OLD ((UINTN)(-1))
|
|
|
|
//typedef struct _refit_menu_screen REFIT_MENU_SCREEN;
|
|
class REFIT_MENU_SCREEN;
|
|
class REFIT_MENU_SWITCH;
|
|
class REFIT_MENU_CHECKBIT;
|
|
class REFIT_MENU_ENTRY_CLOVER;
|
|
class REFIT_MENU_ITEM_RETURN;
|
|
class REFIT_INPUT_DIALOG;
|
|
class REFIT_INFO_DIALOG;
|
|
class REFIT_MENU_ENTRY_LOADER_TOOL;
|
|
class REFIT_MENU_ITEM_SHUTDOWN;
|
|
class REFIT_MENU_ITEM_RESET;
|
|
class REFIT_MENU_ITEM_ABOUT;
|
|
class REFIT_MENU_ITEM_OPTIONS;
|
|
class REFIT_MENU_ITEM_ABSTRACT_ENTRY_LOADER;
|
|
class LOADER_ENTRY;
|
|
class LEGACY_ENTRY;
|
|
class REFIT_MENU_ENTRY_OTHER;
|
|
class REFIT_SIMPLE_MENU_ENTRY_TAG;
|
|
class REFIT_MENU_ITEM_IEM_ABSTRACT;
|
|
class XPointer;
|
|
|
|
class REFIT_ABSTRACT_MENU_ENTRY
|
|
{
|
|
public:
|
|
CONST CHAR16 *Title;
|
|
UINTN Row;
|
|
CHAR16 ShortcutDigit;
|
|
CHAR16 ShortcutLetter;
|
|
EG_IMAGE *Image;
|
|
EG_RECT Place;
|
|
ACTION AtClick;
|
|
ACTION AtDoubleClick;
|
|
ACTION AtRightClick;
|
|
ACTION AtMouseOver;
|
|
REFIT_MENU_SCREEN *SubScreen;
|
|
|
|
virtual EG_IMAGE* getDriveImage() const { return nullptr; };
|
|
virtual EG_IMAGE* getBadgeImage() const { return nullptr; };
|
|
|
|
|
|
virtual REFIT_SIMPLE_MENU_ENTRY_TAG* getREFIT_SIMPLE_MENU_ENTRY_TAG() { return nullptr; };
|
|
virtual REFIT_MENU_SWITCH* getREFIT_MENU_SWITCH() { return nullptr; };
|
|
virtual REFIT_MENU_CHECKBIT* getREFIT_MENU_CHECKBIT() { return nullptr; };
|
|
virtual REFIT_MENU_ENTRY_CLOVER* getREFIT_MENU_ENTRY_CLOVER() { return nullptr; };
|
|
virtual REFIT_MENU_ITEM_RETURN* getREFIT_MENU_ITEM_RETURN() { return nullptr; };
|
|
virtual REFIT_INPUT_DIALOG* getREFIT_INPUT_DIALOG() { return nullptr; };
|
|
virtual REFIT_INFO_DIALOG* getREFIT_INFO_DIALOG() { return nullptr; };
|
|
virtual REFIT_MENU_ENTRY_LOADER_TOOL* getREFIT_MENU_ENTRY_LOADER_TOOL() { return nullptr; };
|
|
virtual REFIT_MENU_ITEM_SHUTDOWN* getREFIT_MENU_ITEM_SHUTDOWN() { return nullptr; };
|
|
virtual REFIT_MENU_ITEM_RESET* getREFIT_MENU_ITEM_RESET() { return nullptr; };
|
|
virtual REFIT_MENU_ITEM_ABOUT* getREFIT_MENU_ITEM_ABOUT() { return nullptr; };
|
|
virtual REFIT_MENU_ITEM_OPTIONS* getREFIT_MENU_ITEM_OPTIONS() { return nullptr; };
|
|
virtual REFIT_MENU_ITEM_ABSTRACT_ENTRY_LOADER* getREFIT_MENU_ITEM_ABSTRACT_ENTRY_LOADER() { return nullptr; };
|
|
virtual LOADER_ENTRY* getLOADER_ENTRY() { return nullptr; };
|
|
virtual LEGACY_ENTRY* getLEGACY_ENTRY() { return nullptr; };
|
|
virtual REFIT_MENU_ENTRY_OTHER* getREFIT_MENU_ENTRY_OTHER() { return nullptr; };
|
|
virtual REFIT_MENU_ITEM_IEM_ABSTRACT* getREFIT_MENU_ITEM_IEM_ABSTRACT() { return nullptr; };
|
|
|
|
REFIT_ABSTRACT_MENU_ENTRY(CONST CHAR16 *Title_) : Title(Title_), Row(0), ShortcutDigit(0), ShortcutLetter(0), Image(NULL), Place({0,0,0,0}), AtClick(ActionNone), AtDoubleClick(ActionNone), AtRightClick(ActionNone), AtMouseOver(ActionNone), SubScreen(NULL) {};
|
|
REFIT_ABSTRACT_MENU_ENTRY(CONST CHAR16 *Title_, ACTION AtClick_) : Title(Title_), Row(0), ShortcutDigit(0), ShortcutLetter(0), Image(NULL), Place({0,0,0,0}), AtClick(AtClick_), AtDoubleClick(ActionNone), AtRightClick(ActionNone), AtMouseOver(ActionNone), SubScreen(NULL) {};
|
|
REFIT_ABSTRACT_MENU_ENTRY(CONST CHAR16 *Title_, UINTN Row_,
|
|
CHAR16 ShortcutDigit_, CHAR16 ShortcutLetter_, EG_IMAGE* Image_,
|
|
EG_RECT Place_, ACTION AtClick_, ACTION AtDoubleClick_, ACTION AtRightClick_, ACTION AtMouseOver_,
|
|
REFIT_MENU_SCREEN *SubScreen_)
|
|
: Title(Title_), Row(Row_), ShortcutDigit(ShortcutDigit_), ShortcutLetter(ShortcutLetter_),
|
|
Image(Image_), Place(Place_),
|
|
AtClick(AtClick_), AtDoubleClick(AtDoubleClick_), AtRightClick(AtRightClick_), AtMouseOver(AtMouseOver_),
|
|
SubScreen(SubScreen_) {};
|
|
virtual ~REFIT_ABSTRACT_MENU_ENTRY() {}; // virtual destructor : this is vital
|
|
};
|
|
|
|
class REFIT_SIMPLE_MENU_ENTRY_TAG : public REFIT_ABSTRACT_MENU_ENTRY
|
|
{
|
|
public:
|
|
UINTN Tag;
|
|
|
|
REFIT_SIMPLE_MENU_ENTRY_TAG(CONST CHAR16 *Title_, UINTN Tag_, ACTION AtClick_)
|
|
: REFIT_ABSTRACT_MENU_ENTRY(Title_, AtClick_), Tag(Tag_)
|
|
{};
|
|
|
|
virtual REFIT_SIMPLE_MENU_ENTRY_TAG* getREFIT_SIMPLE_MENU_ENTRY_TAG() { return this; };
|
|
};
|
|
|
|
class REFIT_MENU_ENTRY : public REFIT_ABSTRACT_MENU_ENTRY
|
|
{
|
|
public:
|
|
// CONST CHAR16 *Title;
|
|
// UINTN Tag;
|
|
// UINTN Row;
|
|
// CHAR16 ShortcutDigit;
|
|
// CHAR16 ShortcutLetter;
|
|
// EG_IMAGE *Image;
|
|
// EG_IMAGE *DriveImage;
|
|
// EG_IMAGE *BadgeImage;
|
|
// EG_RECT Place;
|
|
// ACTION AtClick;
|
|
// ACTION AtDoubleClick;
|
|
// ACTION AtRightClick;
|
|
// ACTION AtMouseOver;
|
|
// REFIT_MENU_SCREEN *SubScreen;
|
|
|
|
REFIT_MENU_ENTRY() : REFIT_ABSTRACT_MENU_ENTRY(NULL) {};
|
|
REFIT_MENU_ENTRY( CONST CHAR16 *Title_, UINTN Row_, CHAR16 ShortcutDigit_, CHAR16 ShortcutLetter_,
|
|
EG_IMAGE *Image_, EG_RECT Place_,
|
|
ACTION AtClick_, ACTION AtDoubleClick_, ACTION AtRightClick_, ACTION AtMouseOver_,
|
|
REFIT_MENU_SCREEN *SubScreen_)
|
|
: REFIT_ABSTRACT_MENU_ENTRY(Title_, Row_, ShortcutDigit_, ShortcutLetter_, Image_, Place_, AtClick_, AtDoubleClick_, AtRightClick_, AtMouseOver_, SubScreen_)
|
|
{};
|
|
};
|
|
|
|
class REFIT_MENU_ENTRY_OTHER : public REFIT_MENU_ENTRY
|
|
{
|
|
public:
|
|
// UINTN Tag;
|
|
|
|
REFIT_MENU_ENTRY_OTHER() : REFIT_MENU_ENTRY() {};
|
|
REFIT_MENU_ENTRY_OTHER(CONST CHAR16 *Title_, UINTN Row_, CHAR16 ShortcutDigit_, CHAR16 ShortcutLetter_,
|
|
EG_IMAGE* Image_, EG_RECT Place_,
|
|
ACTION AtClick_, ACTION AtDoubleClick_, ACTION AtRightClick_, ACTION AtMouseOver_,
|
|
REFIT_MENU_SCREEN *SubScreen_)
|
|
: REFIT_MENU_ENTRY(Title_, Row_, ShortcutDigit_, ShortcutLetter_, Image_, Place_, AtClick_, AtDoubleClick_, AtRightClick_, AtMouseOver_, SubScreen_)
|
|
{};
|
|
|
|
virtual REFIT_MENU_ENTRY_OTHER* getREFIT_MENU_ENTRY_OTHER() { return this; };
|
|
};
|
|
|
|
class REFIT_MENU_ITEM_RETURN : public REFIT_MENU_ENTRY_OTHER
|
|
{
|
|
public:
|
|
REFIT_MENU_ITEM_RETURN(CONST CHAR16 *Title_, UINTN Row_, CHAR16 ShortcutDigit_, CHAR16 ShortcutLetter_, ACTION AtClick_)
|
|
: REFIT_MENU_ENTRY_OTHER(Title_, Row_, ShortcutDigit_, ShortcutLetter_, NULL, {0, 0, 0, 0}, AtClick_, ActionEnter, ActionNone, ActionNone, NULL)
|
|
{};
|
|
REFIT_MENU_ITEM_RETURN(CONST CHAR16 *Title_, UINTN Row_, CHAR16 ShortcutDigit_, CHAR16 ShortcutLetter_,
|
|
EG_IMAGE* Image_, EG_RECT Place_,
|
|
ACTION AtClick_, ACTION AtDoubleClick_, ACTION AtRightClick_, ACTION AtMouseOver_,
|
|
REFIT_MENU_SCREEN *SubScreen_)
|
|
: REFIT_MENU_ENTRY_OTHER(Title_, Row_, ShortcutDigit_, ShortcutLetter_, Image_, Place_, AtClick_, AtDoubleClick_, AtRightClick_, AtMouseOver_, SubScreen_)
|
|
{};
|
|
virtual REFIT_MENU_ITEM_RETURN* getREFIT_MENU_ITEM_RETURN() { return this; };
|
|
};
|
|
|
|
class REFIT_MENU_ITEM_SHUTDOWN : public REFIT_MENU_ENTRY_OTHER
|
|
{
|
|
public:
|
|
REFIT_MENU_ITEM_SHUTDOWN(CONST CHAR16 *Title_, UINTN Row_, CHAR16 ShortcutDigit_, CHAR16 ShortcutLetter_, ACTION AtClick_)
|
|
: REFIT_MENU_ENTRY_OTHER(Title_, Row_, ShortcutDigit_, ShortcutLetter_, NULL, {0, 0, 0, 0}, AtClick_, ActionEnter, ActionNone, ActionNone, NULL)
|
|
{};
|
|
REFIT_MENU_ITEM_SHUTDOWN(CONST CHAR16 *Title_, UINTN Row_, CHAR16 ShortcutDigit_, CHAR16 ShortcutLetter_,
|
|
EG_IMAGE* Image_, EG_RECT Place_,
|
|
ACTION AtClick_, ACTION AtDoubleClick_, ACTION AtRightClick_, ACTION AtMouseOver_,
|
|
REFIT_MENU_SCREEN *SubScreen_)
|
|
: REFIT_MENU_ENTRY_OTHER(Title_, Row_, ShortcutDigit_, ShortcutLetter_, Image_, Place_, AtClick_, AtDoubleClick_, AtRightClick_, AtMouseOver_, SubScreen_)
|
|
{};
|
|
virtual REFIT_MENU_ITEM_SHUTDOWN* getREFIT_MENU_ITEM_SHUTDOWN() { return this; };
|
|
};
|
|
|
|
class REFIT_MENU_ITEM_RESET : public REFIT_MENU_ENTRY_OTHER {
|
|
public:
|
|
REFIT_MENU_ITEM_RESET(CONST CHAR16 *Title_, UINTN Row_, CHAR16 ShortcutDigit_, CHAR16 ShortcutLetter_, ACTION AtClick_)
|
|
: REFIT_MENU_ENTRY_OTHER(Title_, Row_, ShortcutDigit_, ShortcutLetter_, NULL, {0, 0, 0, 0}, AtClick_, ActionEnter, ActionNone, ActionNone, NULL)
|
|
{};
|
|
REFIT_MENU_ITEM_RESET(CONST CHAR16 *Title_, UINTN Row_, CHAR16 ShortcutDigit_, CHAR16 ShortcutLetter_,
|
|
EG_IMAGE* Image_, EG_RECT Place_,
|
|
ACTION AtClick_, ACTION AtDoubleClick_, ACTION AtRightClick_, ACTION AtMouseOver_,
|
|
REFIT_MENU_SCREEN *SubScreen_)
|
|
: REFIT_MENU_ENTRY_OTHER(Title_, Row_, ShortcutDigit_, ShortcutLetter_, Image_, Place_, AtClick_, AtDoubleClick_, AtRightClick_, AtMouseOver_, SubScreen_)
|
|
{};
|
|
virtual REFIT_MENU_ITEM_RESET* getREFIT_MENU_ITEM_RESET() { return this; };
|
|
};
|
|
|
|
class REFIT_MENU_ITEM_ABOUT : public REFIT_MENU_ENTRY_OTHER
|
|
{
|
|
public:
|
|
REFIT_MENU_ITEM_ABOUT(CONST CHAR16 *Title_, UINTN Row_, CHAR16 ShortcutDigit_, CHAR16 ShortcutLetter_, ACTION AtClick_)
|
|
: REFIT_MENU_ENTRY_OTHER(Title_, Row_, ShortcutDigit_, ShortcutLetter_, NULL, {0, 0, 0, 0}, AtClick_, ActionEnter, ActionNone, ActionNone, NULL)
|
|
{};
|
|
REFIT_MENU_ITEM_ABOUT(CONST CHAR16 *Title_, UINTN Row_, CHAR16 ShortcutDigit_, CHAR16 ShortcutLetter_,
|
|
EG_IMAGE* Image_, EG_RECT Place_,
|
|
ACTION AtClick_, ACTION AtDoubleClick_, ACTION AtRightClick_, ACTION AtMouseOver_,
|
|
REFIT_MENU_SCREEN *SubScreen_)
|
|
: REFIT_MENU_ENTRY_OTHER(Title_, Row_, ShortcutDigit_, ShortcutLetter_, Image_, Place_, AtClick_, AtDoubleClick_, AtRightClick_, AtMouseOver_, SubScreen_)
|
|
{};
|
|
virtual REFIT_MENU_ITEM_ABOUT* getREFIT_MENU_ITEM_ABOUT() { return this; };
|
|
};
|
|
|
|
class REFIT_MENU_ITEM_OPTIONS : public REFIT_MENU_ENTRY_OTHER {
|
|
public:
|
|
REFIT_MENU_ITEM_OPTIONS() : REFIT_MENU_ENTRY_OTHER() {};
|
|
REFIT_MENU_ITEM_OPTIONS(CONST CHAR16 *Title_, UINTN Row_, CHAR16 ShortcutDigit_, CHAR16 ShortcutLetter_, ACTION AtClick_)
|
|
: REFIT_MENU_ENTRY_OTHER(Title_, Row_, ShortcutDigit_, ShortcutLetter_, NULL, {0, 0, 0, 0}, AtClick_, ActionEnter, ActionNone, ActionNone, NULL)
|
|
{};
|
|
REFIT_MENU_ITEM_OPTIONS(CONST CHAR16 *Title_, UINTN Row_, CHAR16 ShortcutDigit_, CHAR16 ShortcutLetter_,
|
|
EG_IMAGE* Image_, EG_RECT Place_,
|
|
ACTION AtClick_, ACTION AtDoubleClick_, ACTION AtRightClick_, ACTION AtMouseOver_,
|
|
REFIT_MENU_SCREEN *SubScreen_)
|
|
: REFIT_MENU_ENTRY_OTHER(Title_, Row_, ShortcutDigit_, ShortcutLetter_, Image_, Place_, AtClick_, AtDoubleClick_, AtRightClick_, AtMouseOver_, SubScreen_)
|
|
{};
|
|
virtual REFIT_MENU_ITEM_OPTIONS* getREFIT_MENU_ITEM_OPTIONS() { return this; };
|
|
};
|
|
|
|
class REFIT_MENU_ITEM_IEM_ABSTRACT : public REFIT_MENU_ENTRY_OTHER {
|
|
public:
|
|
INPUT_ITEM *Item;
|
|
REFIT_MENU_ITEM_IEM_ABSTRACT() : Item(0) {}
|
|
virtual REFIT_MENU_ITEM_IEM_ABSTRACT* getREFIT_MENU_ITEM_IEM_ABSTRACT() { return this; };
|
|
};
|
|
|
|
class REFIT_INPUT_DIALOG : public REFIT_MENU_ITEM_IEM_ABSTRACT {
|
|
public:
|
|
virtual REFIT_INPUT_DIALOG* getREFIT_INPUT_DIALOG() { return this; };
|
|
};
|
|
|
|
class REFIT_INFO_DIALOG : public REFIT_MENU_ENTRY_OTHER {
|
|
public:
|
|
virtual REFIT_INFO_DIALOG* getREFIT_INFO_DIALOG() { return this; };
|
|
};
|
|
|
|
class REFIT_MENU_SWITCH : public REFIT_MENU_ITEM_IEM_ABSTRACT {
|
|
public:
|
|
virtual REFIT_MENU_SWITCH* getREFIT_MENU_SWITCH() { return this; };
|
|
};
|
|
|
|
class REFIT_MENU_CHECKBIT : public REFIT_MENU_ITEM_IEM_ABSTRACT {
|
|
public:
|
|
virtual REFIT_MENU_CHECKBIT* getREFIT_MENU_CHECKBIT() { return this; };
|
|
};
|
|
|
|
/*
|
|
* SUper class of LOADER_ENTRY & LEGACY_ENTRY
|
|
*/
|
|
class REFIT_MENU_ITEM_ABSTRACT_ENTRY_LOADER : public REFIT_MENU_ENTRY
|
|
{
|
|
public:
|
|
REFIT_VOLUME *Volume;
|
|
CONST CHAR16 *DevicePathString;
|
|
CONST CHAR16 *LoadOptions; //moved here for compatibility with legacy
|
|
UINTN BootNum;
|
|
CONST CHAR16 *LoaderPath;
|
|
|
|
EG_IMAGE *DriveImage;
|
|
EG_IMAGE *BadgeImage;
|
|
|
|
REFIT_MENU_ITEM_ABSTRACT_ENTRY_LOADER()
|
|
: Volume(0), DevicePathString(0), LoadOptions(0), BootNum(0), LoaderPath(0), DriveImage(0), BadgeImage(0)
|
|
{}
|
|
virtual EG_IMAGE* getDriveImage() const { return DriveImage; };
|
|
virtual EG_IMAGE* getBadgeImage() const { return BadgeImage; };
|
|
|
|
virtual REFIT_MENU_ITEM_ABSTRACT_ENTRY_LOADER* getREFIT_MENU_ITEM_ABSTRACT_ENTRY_LOADER() { return this; };
|
|
};
|
|
|
|
struct KERNEL_AND_KEXT_PATCHES;
|
|
|
|
class LOADER_ENTRY : public REFIT_MENU_ITEM_ABSTRACT_ENTRY_LOADER
|
|
{
|
|
public:
|
|
CONST CHAR16 *VolName;
|
|
EFI_DEVICE_PATH *DevicePath;
|
|
UINT16 Flags;
|
|
UINT8 LoaderType;
|
|
CHAR8 *OSVersion;
|
|
CHAR8 *BuildVersion;
|
|
EG_PIXEL *BootBgColor;
|
|
UINT8 CustomBoot;
|
|
EG_IMAGE *CustomLogo;
|
|
KERNEL_AND_KEXT_PATCHES *KernelAndKextPatches;
|
|
CONST CHAR16 *Settings;
|
|
|
|
LOADER_ENTRY()
|
|
: REFIT_MENU_ITEM_ABSTRACT_ENTRY_LOADER(), VolName(0), DevicePath(0), Flags(0), LoaderType(0), OSVersion(0), BuildVersion(0), BootBgColor(0), CustomBoot(0), CustomLogo(0), KernelAndKextPatches(0), Settings(0)
|
|
{};
|
|
|
|
virtual LOADER_ENTRY* getLOADER_ENTRY() { return this; };
|
|
} ;
|
|
|
|
class REFIT_MENU_ENTRY_LOADER_TOOL : public LOADER_ENTRY
|
|
{
|
|
public:
|
|
UINT8 NoMemset;
|
|
REFIT_MENU_ENTRY_LOADER_TOOL()
|
|
: LOADER_ENTRY(), NoMemset(1)
|
|
{};
|
|
|
|
virtual REFIT_MENU_ENTRY_LOADER_TOOL* getREFIT_MENU_ENTRY_LOADER_TOOL() { return this; };
|
|
};
|
|
|
|
class LEGACY_ENTRY : public REFIT_MENU_ITEM_ABSTRACT_ENTRY_LOADER
|
|
{
|
|
public:
|
|
// REFIT_VOLUME *Volume;
|
|
// CONST CHAR16 *DevicePathString;
|
|
// CONST CHAR16 *LoadOptions;
|
|
// UINTN BootNum;
|
|
// CONST CHAR16 *LoaderPath; //will be set to NULL
|
|
LEGACY_ENTRY()
|
|
: REFIT_MENU_ITEM_ABSTRACT_ENTRY_LOADER()
|
|
{};
|
|
|
|
virtual LEGACY_ENTRY* getLEGACY_ENTRY() { return this; };
|
|
};
|
|
|
|
class REFIT_MENU_ENTRY_CLOVER : public LOADER_ENTRY
|
|
{
|
|
public:
|
|
virtual REFIT_MENU_ENTRY_CLOVER* getREFIT_MENU_ENTRY_CLOVER() { return this; };
|
|
};
|
|
|
|
|
|
//some unreal values
|
|
#define FILM_CENTRE 40000
|
|
//#define FILM_LEFT 50000
|
|
//#define FILM_TOP 50000
|
|
//#define FILM_RIGHT 60000
|
|
//#define FILM_BOTTOM 60000
|
|
//#define FILM_PERCENT 100000
|
|
#define INITVALUE 40000
|
|
|
|
typedef VOID (REFIT_MENU_SCREEN::*MENU_STYLE_FUNC)(IN UINTN Function, IN CONST CHAR16 *ParamText);
|
|
|
|
class REFIT_MENU_SCREEN
|
|
{
|
|
public:
|
|
XPointer mPointer;
|
|
|
|
UINTN ID;
|
|
CONST CHAR16 *Title; //Title is not const, but *Title is. It will be better to make it XStringW
|
|
EG_IMAGE *TitleImage;
|
|
// INTN InfoLineCount;
|
|
// CONST CHAR16 **InfoLines;
|
|
XStringWArray InfoLines;
|
|
// INTN EntryCount;
|
|
// REFIT_MENU_ENTRY **Entries;
|
|
XObjArray<REFIT_ABSTRACT_MENU_ENTRY> Entries;
|
|
INTN TimeoutSeconds;
|
|
CONST CHAR16 *TimeoutText;
|
|
CONST CHAR16 *Theme;
|
|
BOOLEAN AnimeRun;
|
|
BOOLEAN Once;
|
|
UINT64 LastDraw;
|
|
INTN CurrentFrame;
|
|
INTN Frames;
|
|
UINTN FrameTime; //ms
|
|
EG_RECT FilmPlace;
|
|
EG_IMAGE **Film;
|
|
ACTION mAction;
|
|
UINTN mItemID;
|
|
SCROLL_STATE ScrollState;
|
|
// MENU_STYLE_FUNC StyleFunc;
|
|
|
|
|
|
REFIT_MENU_SCREEN()
|
|
: mPointer(), ID(0), Title(0), TitleImage(0),
|
|
TimeoutSeconds(0), TimeoutText(0), Theme(0), AnimeRun(0),
|
|
Once(0), LastDraw(0), CurrentFrame(0),
|
|
Frames(0), FrameTime(0), FilmPlace({0,0,0,0}),
|
|
Film(0), mAction(ActionNone), mItemID(0) //, StyleFunc(&REFIT_MENU_SCREEN::TextMenuStyle)
|
|
{};
|
|
|
|
REFIT_MENU_SCREEN(UINTN ID, CONST CHAR16* Title, CONST CHAR16* TimeoutText)
|
|
: mPointer(), ID(ID), Title(Title), TitleImage(0),
|
|
TimeoutSeconds(0), TimeoutText(TimeoutText), Theme(0), AnimeRun(0),
|
|
Once(0), LastDraw(0), CurrentFrame(0),
|
|
Frames(0), FrameTime(0), FilmPlace({0,0,0,0}),
|
|
Film(0), mAction(ActionNone), mItemID(0) //, StyleFunc(&REFIT_MENU_SCREEN::TextMenuStyle)
|
|
{};
|
|
REFIT_MENU_SCREEN(UINTN ID, CONST CHAR16* Title, CONST CHAR16* TimeoutText, REFIT_ABSTRACT_MENU_ENTRY* entry1, REFIT_ABSTRACT_MENU_ENTRY* entry2)
|
|
: mPointer(), ID(ID), Title(Title), TitleImage(0),
|
|
TimeoutSeconds(0), TimeoutText(TimeoutText), Theme(0), AnimeRun(0),
|
|
Once(0), LastDraw(0), CurrentFrame(0),
|
|
Frames(0), FrameTime(0), FilmPlace({0,0,0,0}),
|
|
Film(0), mAction(ActionNone), mItemID(0) //, StyleFunc(&REFIT_MENU_SCREEN::TextMenuStyle)
|
|
{
|
|
Entries.AddReference(entry1, false);
|
|
Entries.AddReference(entry2, false);
|
|
};
|
|
|
|
// REFIT_MENU_SCREEN( UINTN ID_,
|
|
// CONST CHAR16 *Title_,
|
|
// EG_IMAGE *TitleImage_,
|
|
//// INTN InfoLineCount_,
|
|
//// CONST CHAR16 **InfoLines_,
|
|
// INTN TimeoutSeconds_,
|
|
// CONST CHAR16 *TimeoutText_,
|
|
// CONST CHAR16 *Theme_,
|
|
// BOOLEAN AnimeRun_,
|
|
// BOOLEAN Once_,
|
|
// UINT64 LastDraw_,
|
|
// INTN CurrentFrame_,
|
|
// INTN Frames_,
|
|
// UINTN FrameTime_,
|
|
// EG_RECT FilmPlace_,
|
|
// EG_IMAGE **Film_)
|
|
// : ID(ID_), Title(Title_), TitleImage(TitleImage_),
|
|
// /*InfoLineCount(InfoLineCount_), InfoLines(InfoLines_),*/ TimeoutSeconds(TimeoutSeconds_),
|
|
// TimeoutText(TimeoutText_), Theme(Theme_), AnimeRun(AnimeRun_),
|
|
// Once(Once_), LastDraw(LastDraw_), CurrentFrame(CurrentFrame_),
|
|
// Frames(Frames_), FrameTime(FrameTime_), FilmPlace(FilmPlace_),
|
|
// Film(Film_), mAction(ActionNone), mItemID(0), mPointer(NULL)
|
|
// {};
|
|
//
|
|
// REFIT_MENU_SCREEN( UINTN ID_,
|
|
// CONST CHAR16 *Title_,
|
|
// EG_IMAGE *TitleImage_,
|
|
//// INTN InfoLineCount_,
|
|
//// CONST CHAR16 **InfoLines_,
|
|
// REFIT_ABSTRACT_MENU_ENTRY* entry,
|
|
// INTN TimeoutSeconds_,
|
|
// CONST CHAR16 *TimeoutText_,
|
|
// CONST CHAR16 *Theme_,
|
|
// BOOLEAN AnimeRun_,
|
|
// BOOLEAN Once_,
|
|
// UINT64 LastDraw_,
|
|
// INTN CurrentFrame_,
|
|
// INTN Frames_,
|
|
// UINTN FrameTime_,
|
|
// EG_RECT FilmPlace_,
|
|
// EG_IMAGE **Film_)
|
|
// : ID(ID_), Title(Title_), TitleImage(TitleImage_),
|
|
// /*InfoLineCount(InfoLineCount_), InfoLines(InfoLines_),*/ TimeoutSeconds(TimeoutSeconds_),
|
|
// TimeoutText(TimeoutText_), Theme(Theme_), AnimeRun(AnimeRun_),
|
|
// Once(Once_), LastDraw(LastDraw_), CurrentFrame(CurrentFrame_),
|
|
// Frames(Frames_), FrameTime(FrameTime_), FilmPlace(FilmPlace_),
|
|
// Film(Film_), mAction(ActionNone), mItemID(0), mPointer(NULL)
|
|
// {
|
|
// Entries.AddReference(entry, false);
|
|
// };
|
|
|
|
// REFIT_MENU_SCREEN( UINTN ID_,
|
|
// CONST CHAR16 *Title_,
|
|
// EG_IMAGE *TitleImage_,
|
|
//// INTN InfoLineCount_,
|
|
//// CONST CHAR16 **InfoLines_,
|
|
// REFIT_ABSTRACT_MENU_ENTRY* entry1,
|
|
// REFIT_ABSTRACT_MENU_ENTRY* entry2,
|
|
// INTN TimeoutSeconds_,
|
|
// CONST CHAR16 *TimeoutText_,
|
|
// CONST CHAR16 *Theme_,
|
|
// BOOLEAN AnimeRun_,
|
|
// BOOLEAN Once_,
|
|
// UINT64 LastDraw_,
|
|
// INTN CurrentFrame_,
|
|
// INTN Frames_,
|
|
// UINTN FrameTime_,
|
|
// EG_RECT FilmPlace_,
|
|
// EG_IMAGE **Film_)
|
|
// : ID(ID_), Title(Title_), TitleImage(TitleImage_),
|
|
// /*InfoLineCount(InfoLineCount_), InfoLines(InfoLines_),*/ TimeoutSeconds(TimeoutSeconds_),
|
|
// TimeoutText(TimeoutText_), Theme(Theme_), AnimeRun(AnimeRun_),
|
|
// Once(Once_), LastDraw(LastDraw_), CurrentFrame(CurrentFrame_),
|
|
// Frames(Frames_), FrameTime(FrameTime_), FilmPlace(FilmPlace_),
|
|
// Film(Film_), mAction(ActionNone), mItemID(0), mPointer(NULL)
|
|
// {
|
|
// Entries.AddReference(entry1, false);
|
|
// Entries.AddReference(entry2, false);
|
|
// };
|
|
//Scroll functions
|
|
VOID InitScroll(IN INTN ItemCount, IN UINTN MaxCount,
|
|
IN UINTN VisibleSpace, IN INTN Selected);
|
|
VOID UpdateScroll(IN UINTN Movement);
|
|
VOID HidePointer();
|
|
EFI_STATUS MouseBirth();
|
|
VOID KillMouse();
|
|
VOID AddMenuItem_(REFIT_MENU_ITEM_IEM_ABSTRACT* InputBootArgs, INTN Inx, CONST CHAR8 *Title, BOOLEAN Cursor);
|
|
VOID AddMenuInfo(CONST CHAR16 *Line);
|
|
VOID AddMenuInfoLine(IN CONST CHAR16 *InfoLine);
|
|
VOID AddMenuEntry(IN REFIT_MENU_ENTRY *Entry, bool freeIt);
|
|
VOID AddMenuItemSwitch(INTN Inx, CONST CHAR8 *Title, BOOLEAN Cursor);
|
|
VOID AddMenuCheck(CONST CHAR8 *Text, UINTN Bit, INTN ItemNum);
|
|
VOID AddMenuItemInput(INTN Inx, CONST CHAR8 *Title, BOOLEAN Cursor);
|
|
VOID FreeMenu();
|
|
INTN FindMenuShortcutEntry(IN CHAR16 Shortcut);
|
|
UINTN RunGenericMenu(IN MENU_STYLE_FUNC StyleFunc, IN OUT INTN *DefaultEntryIndex, OUT REFIT_ABSTRACT_MENU_ENTRY **ChosenEntry);
|
|
UINTN RunMenu(OUT REFIT_ABSTRACT_MENU_ENTRY **ChosenEntry);
|
|
UINTN RunMainMenu(IN INTN DefaultSelection, OUT REFIT_ABSTRACT_MENU_ENTRY **ChosenEntry);
|
|
UINTN InputDialog(IN MENU_STYLE_FUNC StyleFunc);
|
|
|
|
VOID DrawMainMenuLabel(IN CONST CHAR16 *Text, IN INTN XPos, IN INTN YPos);
|
|
VOID CountItems();
|
|
VOID InitAnime();
|
|
BOOLEAN GetAnime();
|
|
VOID UpdateAnime();
|
|
|
|
|
|
//Style functions
|
|
virtual VOID MainMenuStyle(IN UINTN Function, IN CONST CHAR16 *ParamText);
|
|
virtual VOID MainMenuVerticalStyle(IN UINTN Function, IN CONST CHAR16 *ParamText);
|
|
virtual VOID GraphicsMenuStyle(IN UINTN Function, IN CONST CHAR16 *ParamText);
|
|
virtual VOID TextMenuStyle(IN UINTN Function, IN CONST CHAR16 *ParamText);
|
|
|
|
~REFIT_MENU_SCREEN() {};
|
|
};
|
|
|
|
#endif
|
|
/*
|
|
|
|
EOF */
|