Updated version tagging and added about dialog

This commit is contained in:
elasota
2020-06-06 02:25:10 -04:00
parent cfb66d9c9b
commit 9624c283c8
21 changed files with 414 additions and 6 deletions

View File

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

View File

@@ -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();
};

View File

@@ -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;

View File

@@ -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;

View File

@@ -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();

View File

@@ -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

View File

@@ -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)
{
}
}