mirror of
https://github.com/elasota/Aerofoil.git
synced 2025-12-14 03:59:36 +00:00
Updated version tagging and added about dialog
This commit is contained in:
@@ -611,15 +611,15 @@ namespace PortabilityLayer
|
||||
{
|
||||
public:
|
||||
Dialog *LoadDialog(int16_t resID, Window *behindWindow, const DialogTextSubstitutions *substitutions) override;
|
||||
Dialog *LoadDialogFromTemplate(int16_t templateResID, const Rect &rect, bool visible, bool hasCloseBox, uint32_t referenceConstant, uint16_t positionSpec, Window *behindWindow, const PLPasStr &title, const DialogTextSubstitutions *substitutions) override;
|
||||
int16_t DisplayAlert(int16_t alertResID, const DialogTextSubstitutions *substitutions) override;
|
||||
void PositionWindow(Window *window, const Rect &rect) const override;
|
||||
|
||||
DialogTemplate *LoadDialogTemplate(int16_t resID);
|
||||
|
||||
static DialogManagerImpl *GetInstance();
|
||||
|
||||
private:
|
||||
void PositionWindow(Window *window, const Rect &rect);
|
||||
Dialog *LoadDialogFromTemplate(int16_t templateResID, const Rect &rect, bool visible, bool hasCloseBox, uint32_t referenceConstant, uint16_t positionSpec, Window *behindWindow, const PLPasStr &title, const DialogTextSubstitutions *substitutions);
|
||||
|
||||
static int16_t AlertFilter(Dialog *dialog, const TimeTaggedVOSEvent *evt);
|
||||
|
||||
@@ -827,7 +827,7 @@ namespace PortabilityLayer
|
||||
return dtemplate;
|
||||
}
|
||||
|
||||
void DialogManagerImpl::PositionWindow(Window *window, const Rect &rect)
|
||||
void DialogManagerImpl::PositionWindow(Window *window, const Rect &rect) const
|
||||
{
|
||||
unsigned int displayWidth, displayHeight;
|
||||
PortabilityLayer::HostDisplayDriver::GetInstance()->GetDisplayResolution(&displayWidth, &displayHeight, nullptr);
|
||||
|
||||
@@ -4,8 +4,10 @@
|
||||
|
||||
struct Dialog;
|
||||
struct DialogTextSubstitutions;
|
||||
struct Rect;
|
||||
struct Window;
|
||||
struct TimeTaggedVOSEvent;
|
||||
class PLPasStr;
|
||||
|
||||
namespace PortabilityLayer
|
||||
{
|
||||
@@ -16,7 +18,9 @@ namespace PortabilityLayer
|
||||
{
|
||||
public:
|
||||
virtual Dialog *LoadDialog(int16_t resID, Window *behindWindow, const DialogTextSubstitutions *substitutions) = 0;
|
||||
virtual Dialog *LoadDialogFromTemplate(int16_t templateResID, const Rect &rect, bool visible, bool hasCloseBox, uint32_t referenceConstant, uint16_t positionSpec, Window *behindWindow, const PLPasStr &title, const DialogTextSubstitutions *substitutions) = 0;
|
||||
virtual int16_t DisplayAlert(int16_t alertResID, const DialogTextSubstitutions *substitutions) = 0;
|
||||
virtual void PositionWindow(Window *window, const Rect &rect) const = 0;
|
||||
|
||||
static DialogManager *GetInstance();
|
||||
};
|
||||
|
||||
@@ -128,6 +128,8 @@ namespace PortabilityLayer
|
||||
THandle<Menu> DeserializeMenu(const void *resData) const override;
|
||||
THandle<Menu> GetMenuByID(int id) const override;
|
||||
|
||||
PLError_t AppendMenuItem(const THandle<Menu> &menu, int8_t iconResID, uint8_t key, uint8_t submenuID, uint8_t textStyle, bool enabled, bool checked, const PLPasStr &text) const override;
|
||||
|
||||
void InsertMenuBefore(const THandle<Menu> &insertingMenu, const THandle<Menu> &existingMenu) override;
|
||||
void InsertMenuAfter(const THandle<Menu> &insertingMenu, const THandle<Menu> &existingMenu) override;
|
||||
void InsertMenuAtEnd(const THandle<Menu> &insertingMenu) override;
|
||||
@@ -391,6 +393,41 @@ namespace PortabilityLayer
|
||||
return THandle<Menu>();
|
||||
}
|
||||
|
||||
PLError_t MenuManagerImpl::AppendMenuItem(const THandle<Menu> &menuHdl, int8_t iconResID, uint8_t key, uint8_t submenuID, uint8_t textStyle, bool enabled, bool checked, const PLPasStr &text) const
|
||||
{
|
||||
PortabilityLayer::MemoryManager *mm = PortabilityLayer::MemoryManager::GetInstance();
|
||||
|
||||
Menu *menu = *menuHdl;
|
||||
|
||||
// This doesn't need a +1 because 1 is implicit
|
||||
if (!mm->ResizeHandle(menuHdl.MMBlock(), sizeof(Menu) + menu->numMenuItems * sizeof(MenuItem)))
|
||||
return PLErrors::kOutOfMemory;
|
||||
|
||||
menu = *menuHdl;
|
||||
size_t oldStringBlobSize = menu->stringBlobHandle->m_size;
|
||||
|
||||
if (!mm->ResizeHandle(menu->stringBlobHandle, oldStringBlobSize + text.Length() + 1))
|
||||
return PLErrors::kOutOfMemory;
|
||||
|
||||
MenuItem *lastItem = menu->menuItems + menu->numMenuItems;
|
||||
menu->numMenuItems++;
|
||||
menu->haveMenuLayout = false;
|
||||
|
||||
uint8_t *stringBlob = static_cast<uint8_t*>(menu->stringBlobHandle->m_contents);
|
||||
stringBlob[oldStringBlobSize] = text.Length();
|
||||
memcpy(stringBlob + oldStringBlobSize + 1, text.UChars(), text.Length());
|
||||
|
||||
lastItem->iconResID = iconResID;
|
||||
lastItem->key = key;
|
||||
lastItem->submenuID = submenuID;
|
||||
lastItem->textStyle = textStyle;
|
||||
lastItem->enabled = enabled;
|
||||
lastItem->checked = checked;
|
||||
lastItem->nameOffsetInStringBlob = oldStringBlobSize;
|
||||
|
||||
return PLErrors::kNone;
|
||||
}
|
||||
|
||||
void MenuManagerImpl::InsertMenuBefore(const THandle<Menu> &insertingMenu, const THandle<Menu> &existingMenu)
|
||||
{
|
||||
m_haveMenuBarLayout = false;
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
#pragma once
|
||||
|
||||
#include <stdint.h>
|
||||
#include "PLErrorCodes.h"
|
||||
|
||||
template<class T>
|
||||
class THandle;
|
||||
@@ -22,6 +23,8 @@ namespace PortabilityLayer
|
||||
virtual THandle<Menu> DeserializeMenu(const void *resData) const = 0;
|
||||
virtual THandle<Menu> GetMenuByID(int id) const = 0;
|
||||
|
||||
virtual PLError_t AppendMenuItem(const THandle<Menu> &menu, int8_t iconResID, uint8_t key, uint8_t submenuID, uint8_t textStyle, bool enabled, bool checked, const PLPasStr &text) const = 0;
|
||||
|
||||
virtual void InsertMenuBefore(const THandle<Menu> &insertingMenu, const THandle<Menu> &existingMenu) = 0;
|
||||
virtual void InsertMenuAfter(const THandle<Menu> &insertingMenu, const THandle<Menu> &existingMenu) = 0;
|
||||
virtual void InsertMenuAtEnd(const THandle<Menu> &insertingMenu) = 0;
|
||||
|
||||
@@ -73,6 +73,13 @@ void CheckMenuItem(MenuHandle menu, int index, Boolean checked)
|
||||
mm->SetItemChecked(menu, index - 1, checked != 0);
|
||||
}
|
||||
|
||||
|
||||
void AppendMenuItem(MenuHandle menu, int8_t iconResID, uint8_t key, uint8_t submenuID, uint8_t textStyle, bool enabled, bool checked, const PLPasStr &text)
|
||||
{
|
||||
PortabilityLayer::MenuManager *mm = PortabilityLayer::MenuManager::GetInstance();
|
||||
mm->AppendMenuItem(menu, iconResID, key, submenuID, textStyle, enabled, checked, text);
|
||||
}
|
||||
|
||||
void SetMenuItemText(MenuHandle menu, int index, const PLPasStr &text)
|
||||
{
|
||||
PL_NotYetImplemented();
|
||||
|
||||
@@ -14,4 +14,6 @@ void DisableMenuItem(MenuHandle menu, int index);
|
||||
void CheckMenuItem(MenuHandle menu, int index, Boolean checked);
|
||||
void SetMenuItemText(MenuHandle menu, int index, const PLPasStr &text);
|
||||
|
||||
void AppendMenuItem(MenuHandle menu, int8_t iconResID, uint8_t key, uint8_t submenuID, uint8_t textStyle, bool enabled, bool checked, const PLPasStr &text);
|
||||
|
||||
#endif
|
||||
|
||||
@@ -13,6 +13,7 @@ namespace PortabilityLayer
|
||||
PascalStr();
|
||||
PascalStr(size_t size, const char *str);
|
||||
explicit PascalStr(const PLPasStr &pstr);
|
||||
explicit PascalStr(const char *str);
|
||||
};
|
||||
}
|
||||
|
||||
@@ -38,4 +39,10 @@ namespace PortabilityLayer
|
||||
: UnsafePascalStr<TSize, true>(pstr.Length(), pstr.Chars())
|
||||
{
|
||||
}
|
||||
|
||||
template<size_t TSize>
|
||||
PascalStr<TSize>::PascalStr(const char *str)
|
||||
: UnsafePascalStr<TSize, true>((str == nullptr) ? 0 : strlen(str), str)
|
||||
{
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user