mirror of
https://github.com/ZDoom/gzdoom-gles.git
synced 2024-11-25 13:41:05 +00:00
- cleaned out some cruft from the menu code, now that ListMenu is fully scripted.
This commit is contained in:
parent
b7a5437af6
commit
1b4c9e13b8
11 changed files with 47 additions and 365 deletions
|
@ -845,7 +845,6 @@ set( FASTMATH_PCH_SOURCES
|
||||||
intermission/intermission.cpp
|
intermission/intermission.cpp
|
||||||
intermission/intermission_parse.cpp
|
intermission/intermission_parse.cpp
|
||||||
menu/joystickmenu.cpp
|
menu/joystickmenu.cpp
|
||||||
menu/listmenu.cpp
|
|
||||||
menu/loadsavemenu.cpp
|
menu/loadsavemenu.cpp
|
||||||
menu/menu.cpp
|
menu/menu.cpp
|
||||||
menu/menudef.cpp
|
menu/menudef.cpp
|
||||||
|
|
|
@ -186,7 +186,7 @@ void UpdateJoystickMenu(IJoystickConfig *selected)
|
||||||
{
|
{
|
||||||
opt->mSelectedItem = opt->mItems.Size() - 1;
|
opt->mSelectedItem = opt->mItems.Size() - 1;
|
||||||
}
|
}
|
||||||
opt->CalcIndent();
|
//opt->CalcIndent();
|
||||||
|
|
||||||
// If the joystick config menu is open, close it if the device it's open for is gone.
|
// If the joystick config menu is open, close it if the device it's open for is gone.
|
||||||
if (DMenu::CurrentMenu != nullptr && (DMenu::CurrentMenu->IsKindOf("JoystickConfigMenu")))
|
if (DMenu::CurrentMenu != nullptr && (DMenu::CurrentMenu->IsKindOf("JoystickConfigMenu")))
|
||||||
|
|
|
@ -1,127 +0,0 @@
|
||||||
/*
|
|
||||||
** listmenu.cpp
|
|
||||||
** A simple menu consisting of a list of items
|
|
||||||
**
|
|
||||||
**---------------------------------------------------------------------------
|
|
||||||
** Copyright 2010 Christoph Oelckers
|
|
||||||
** All rights reserved.
|
|
||||||
**
|
|
||||||
** Redistribution and use in source and binary forms, with or without
|
|
||||||
** modification, are permitted provided that the following conditions
|
|
||||||
** are met:
|
|
||||||
**
|
|
||||||
** 1. Redistributions of source code must retain the above copyright
|
|
||||||
** notice, this list of conditions and the following disclaimer.
|
|
||||||
** 2. 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.
|
|
||||||
** 3. The name of the author may not be used to endorse or promote products
|
|
||||||
** derived from this software without specific prior written permission.
|
|
||||||
**
|
|
||||||
** THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``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 AUTHOR 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.
|
|
||||||
**---------------------------------------------------------------------------
|
|
||||||
**
|
|
||||||
*/
|
|
||||||
|
|
||||||
#include "v_video.h"
|
|
||||||
#include "v_font.h"
|
|
||||||
#include "cmdlib.h"
|
|
||||||
#include "gstrings.h"
|
|
||||||
#include "g_level.h"
|
|
||||||
#include "gi.h"
|
|
||||||
#include "d_gui.h"
|
|
||||||
#include "d_event.h"
|
|
||||||
#include "menu/menu.h"
|
|
||||||
|
|
||||||
IMPLEMENT_CLASS(DListMenu, false, false)
|
|
||||||
|
|
||||||
IMPLEMENT_POINTERS_START(DListMenu)
|
|
||||||
IMPLEMENT_POINTER(mFocusControl)
|
|
||||||
IMPLEMENT_POINTERS_END
|
|
||||||
|
|
||||||
//=============================================================================
|
|
||||||
//
|
|
||||||
//
|
|
||||||
//
|
|
||||||
//=============================================================================
|
|
||||||
|
|
||||||
DListMenu::DListMenu(DMenu *parent, DListMenuDescriptor *desc)
|
|
||||||
: DMenu(parent)
|
|
||||||
{
|
|
||||||
mDesc = NULL;
|
|
||||||
if (desc != NULL) Init(parent, desc);
|
|
||||||
}
|
|
||||||
|
|
||||||
//=============================================================================
|
|
||||||
//
|
|
||||||
//
|
|
||||||
//
|
|
||||||
//=============================================================================
|
|
||||||
|
|
||||||
void DListMenu::Init(DMenu *parent, DListMenuDescriptor *desc)
|
|
||||||
{
|
|
||||||
mParentMenu = parent;
|
|
||||||
GC::WriteBarrier(this, parent);
|
|
||||||
mDesc = desc;
|
|
||||||
if (desc->mCenter)
|
|
||||||
{
|
|
||||||
int center = 160;
|
|
||||||
for(unsigned i=0;i<mDesc->mItems.Size(); i++)
|
|
||||||
{
|
|
||||||
int xpos = mDesc->mItems[i]->GetX();
|
|
||||||
int width = mDesc->mItems[i]->GetWidth();
|
|
||||||
int curx = mDesc->mSelectOfsX;
|
|
||||||
|
|
||||||
if (width > 0 && mDesc->mItems[i]->Selectable())
|
|
||||||
{
|
|
||||||
int left = 160 - (width - curx) / 2 - curx;
|
|
||||||
if (left < center) center = left;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
for(unsigned i=0;i<mDesc->mItems.Size(); i++)
|
|
||||||
{
|
|
||||||
int width = mDesc->mItems[i]->GetWidth();
|
|
||||||
|
|
||||||
if (width > 0)
|
|
||||||
{
|
|
||||||
mDesc->mItems[i]->SetX(center);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
//=============================================================================
|
|
||||||
//
|
|
||||||
//
|
|
||||||
//
|
|
||||||
//=============================================================================
|
|
||||||
|
|
||||||
DMenuItemBase *DListMenu::GetItem(FName name)
|
|
||||||
{
|
|
||||||
for(unsigned i=0;i<mDesc->mItems.Size(); i++)
|
|
||||||
{
|
|
||||||
FName nm = mDesc->mItems[i]->GetAction(NULL);
|
|
||||||
if (nm == name) return mDesc->mItems[i];
|
|
||||||
}
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
//=============================================================================
|
|
||||||
//
|
|
||||||
// base class for menu items
|
|
||||||
//
|
|
||||||
//=============================================================================
|
|
||||||
IMPLEMENT_CLASS(DMenuItemBase, false, false)
|
|
||||||
|
|
||||||
DEFINE_FIELD(DListMenu, mDesc)
|
|
||||||
DEFINE_FIELD(DListMenu, mFocusControl)
|
|
||||||
|
|
|
@ -444,21 +444,6 @@ DEFINE_ACTION_FUNCTION(DMenu, Close)
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
DEFINE_ACTION_FUNCTION(DMenu, GetItem)
|
|
||||||
{
|
|
||||||
PARAM_SELF_PROLOGUE(DMenu);
|
|
||||||
PARAM_NAME(name);
|
|
||||||
ACTION_RETURN_OBJECT(self->GetItem(name));
|
|
||||||
}
|
|
||||||
|
|
||||||
DEFINE_ACTION_FUNCTION(DOptionMenuDescriptor, GetItem)
|
|
||||||
{
|
|
||||||
PARAM_SELF_PROLOGUE(DOptionMenuDescriptor);
|
|
||||||
PARAM_NAME(name);
|
|
||||||
ACTION_RETURN_OBJECT(self->GetItem(name));
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
bool DMenu::DimAllowed()
|
bool DMenu::DimAllowed()
|
||||||
{
|
{
|
||||||
return true;
|
return true;
|
||||||
|
@ -1319,41 +1304,6 @@ DMenuItemBase * CreateListMenuItemText(int x, int y, int height, int hotkey, con
|
||||||
return (DMenuItemBase*)p;
|
return (DMenuItemBase*)p;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool DMenuItemBase::CheckCoordinate(int x, int y)
|
|
||||||
{
|
|
||||||
IFVIRTUAL(DMenuItemBase, CheckCoordinate)
|
|
||||||
{
|
|
||||||
VMValue params[] = { (DObject*)this, x, y };
|
|
||||||
int retval;
|
|
||||||
VMReturn ret(&retval);
|
|
||||||
GlobalVMStack.Call(func, params, countof(params), &ret, 1, nullptr);
|
|
||||||
return !!retval;
|
|
||||||
}
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
void DMenuItemBase::Ticker()
|
|
||||||
{
|
|
||||||
IFVIRTUAL(DMenuItemBase, Ticker)
|
|
||||||
{
|
|
||||||
VMValue params[] = { (DObject*)this };
|
|
||||||
GlobalVMStack.Call(func, params, countof(params), nullptr, 0, nullptr);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
bool DMenuItemBase::Selectable()
|
|
||||||
{
|
|
||||||
IFVIRTUAL(DMenuItemBase, Selectable)
|
|
||||||
{
|
|
||||||
VMValue params[] = { (DObject*)this };
|
|
||||||
int retval;
|
|
||||||
VMReturn ret(&retval);
|
|
||||||
GlobalVMStack.Call(func, params, countof(params), &ret, 1, nullptr);
|
|
||||||
return !!retval;
|
|
||||||
}
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
bool DMenuItemBase::Activate()
|
bool DMenuItemBase::Activate()
|
||||||
{
|
{
|
||||||
IFVIRTUAL(DMenuItemBase, Activate)
|
IFVIRTUAL(DMenuItemBase, Activate)
|
||||||
|
@ -1366,18 +1316,6 @@ bool DMenuItemBase::Activate()
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
FName DMenuItemBase::GetAction(int *pparam)
|
|
||||||
{
|
|
||||||
IFVIRTUAL(DMenuItemBase, GetAction)
|
|
||||||
{
|
|
||||||
VMValue params[] = { (DObject*)this };
|
|
||||||
int retval[2];
|
|
||||||
VMReturn ret[2]; ret[0].IntAt(&retval[0]); ret[1].IntAt(&retval[1]);
|
|
||||||
GlobalVMStack.Call(func, params, countof(params), ret, 2, nullptr);
|
|
||||||
return ENamedName(retval[0]);
|
|
||||||
}
|
|
||||||
return NAME_None;
|
|
||||||
}
|
|
||||||
|
|
||||||
bool DMenuItemBase::SetString(int i, const char *s)
|
bool DMenuItemBase::SetString(int i, const char *s)
|
||||||
{
|
{
|
||||||
|
@ -1435,90 +1373,4 @@ bool DMenuItemBase::GetValue(int i, int *pvalue)
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
IMPLEMENT_CLASS(DMenuItemBase, false, false)
|
||||||
void DMenuItemBase::Enable(bool on)
|
|
||||||
{
|
|
||||||
IFVIRTUAL(DMenuItemBase, Enable)
|
|
||||||
{
|
|
||||||
VMValue params[] = { (DObject*)this, on };
|
|
||||||
GlobalVMStack.Call(func, params, countof(params), nullptr, 0, nullptr);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
bool DMenuItemBase::MenuEvent(int mkey, bool fromcontroller)
|
|
||||||
{
|
|
||||||
IFVIRTUAL(DMenuItemBase, MenuEvent)
|
|
||||||
{
|
|
||||||
VMValue params[] = { (DObject*)this, mkey, fromcontroller };
|
|
||||||
int retval;
|
|
||||||
VMReturn ret(&retval);
|
|
||||||
GlobalVMStack.Call(func, params, countof(params), &ret, 1, nullptr);
|
|
||||||
return !!retval;
|
|
||||||
}
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
bool DMenuItemBase::MouseEvent(int type, int x, int y)
|
|
||||||
{
|
|
||||||
IFVIRTUAL(DMenuItemBase, MouseEvent)
|
|
||||||
{
|
|
||||||
VMValue params[] = { (DObject*)this, type, x, y };
|
|
||||||
int retval;
|
|
||||||
VMReturn ret(&retval);
|
|
||||||
GlobalVMStack.Call(func, params, countof(params), &ret, 1, nullptr);
|
|
||||||
return !!retval;
|
|
||||||
}
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
bool DMenuItemBase::CheckHotkey(int c)
|
|
||||||
{
|
|
||||||
IFVIRTUAL(DMenuItemBase, CheckHotkey)
|
|
||||||
{
|
|
||||||
VMValue params[] = { (DObject*)this, c };
|
|
||||||
int retval;
|
|
||||||
VMReturn ret(&retval);
|
|
||||||
GlobalVMStack.Call(func, params, countof(params), &ret, 1, nullptr);
|
|
||||||
return !!retval;
|
|
||||||
}
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
int DMenuItemBase::GetWidth()
|
|
||||||
{
|
|
||||||
IFVIRTUAL(DMenuItemBase, GetWidth)
|
|
||||||
{
|
|
||||||
VMValue params[] = { (DObject*)this };
|
|
||||||
int retval;
|
|
||||||
VMReturn ret(&retval);
|
|
||||||
GlobalVMStack.Call(func, params, countof(params), &ret, 1, nullptr);
|
|
||||||
return retval;
|
|
||||||
}
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
int DMenuItemBase::GetIndent()
|
|
||||||
{
|
|
||||||
IFVIRTUAL(DMenuItemBase, GetIndent)
|
|
||||||
{
|
|
||||||
VMValue params[] = { (DObject*)this };
|
|
||||||
int retval;
|
|
||||||
VMReturn ret(&retval);
|
|
||||||
GlobalVMStack.Call(func, params, countof(params), &ret, 1, nullptr);
|
|
||||||
return retval;
|
|
||||||
}
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
int DMenuItemBase::Draw(DOptionMenuDescriptor *desc, int y, int indent, bool selected)
|
|
||||||
{
|
|
||||||
IFVIRTUAL(DMenuItemBase, Draw)
|
|
||||||
{
|
|
||||||
VMValue params[] = { (DObject*)this, desc, y, indent, selected };
|
|
||||||
int retval;
|
|
||||||
VMReturn ret(&retval);
|
|
||||||
GlobalVMStack.Call(func, params, countof(params), &ret, 1, nullptr);
|
|
||||||
return retval;
|
|
||||||
}
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
|
@ -286,8 +286,6 @@ public:
|
||||||
virtual bool CheckFocus(DMenuItemBase *fc) { return false; }
|
virtual bool CheckFocus(DMenuItemBase *fc) { return false; }
|
||||||
virtual void ReleaseFocus() {}
|
virtual void ReleaseFocus() {}
|
||||||
|
|
||||||
virtual DMenuItemBase *GetItem(FName name) { return nullptr; }
|
|
||||||
|
|
||||||
bool CallResponder(event_t *ev);
|
bool CallResponder(event_t *ev);
|
||||||
bool CallMenuEvent(int mkey, bool fromcontroller);
|
bool CallMenuEvent(int mkey, bool fromcontroller);
|
||||||
bool CallMouseEvent(int type, int x, int y);
|
bool CallMouseEvent(int type, int x, int y);
|
||||||
|
@ -317,61 +315,15 @@ public:
|
||||||
FNameNoInit mAction;
|
FNameNoInit mAction;
|
||||||
bool mEnabled;
|
bool mEnabled;
|
||||||
|
|
||||||
bool CheckCoordinate(int x, int y);
|
|
||||||
void Ticker();
|
|
||||||
bool Selectable();
|
|
||||||
bool Activate();
|
bool Activate();
|
||||||
FName GetAction(int *pparam);
|
|
||||||
bool SetString(int i, const char *s);
|
bool SetString(int i, const char *s);
|
||||||
bool GetString(int i, char *s, int len);
|
bool GetString(int i, char *s, int len);
|
||||||
bool SetValue(int i, int value);
|
bool SetValue(int i, int value);
|
||||||
bool GetValue(int i, int *pvalue);
|
bool GetValue(int i, int *pvalue);
|
||||||
void Enable(bool on);
|
|
||||||
bool MenuEvent (int mkey, bool fromcontroller);
|
|
||||||
bool MouseEvent(int type, int x, int y);
|
|
||||||
bool CheckHotkey(int c);
|
|
||||||
int GetWidth();
|
|
||||||
int GetIndent();
|
|
||||||
int Draw(DOptionMenuDescriptor *desc, int y, int indent, bool selected);
|
|
||||||
void OffsetPositionY(int ydelta) { mYpos += ydelta; }
|
void OffsetPositionY(int ydelta) { mYpos += ydelta; }
|
||||||
int GetY() { return mYpos; }
|
int GetY() { return mYpos; }
|
||||||
int GetX() { return mXpos; }
|
|
||||||
void SetX(int x) { mXpos = x; }
|
|
||||||
};
|
};
|
||||||
|
|
||||||
//=============================================================================
|
|
||||||
//
|
|
||||||
// list menu class runs a menu described by a DListMenuDescriptor
|
|
||||||
//
|
|
||||||
//=============================================================================
|
|
||||||
|
|
||||||
class DListMenu : public DMenu
|
|
||||||
{
|
|
||||||
DECLARE_CLASS(DListMenu, DMenu)
|
|
||||||
HAS_OBJECT_POINTERS;
|
|
||||||
public:
|
|
||||||
|
|
||||||
DListMenuDescriptor *mDesc;
|
|
||||||
DMenuItemBase *mFocusControl;
|
|
||||||
|
|
||||||
DListMenu(DMenu *parent = NULL, DListMenuDescriptor *desc = NULL);
|
|
||||||
virtual void Init(DMenu *parent = NULL, DListMenuDescriptor *desc = NULL);
|
|
||||||
DMenuItemBase *GetItem(FName name);
|
|
||||||
void SetFocus(DMenuItemBase *fc)
|
|
||||||
{
|
|
||||||
mFocusControl = fc;
|
|
||||||
}
|
|
||||||
bool CheckFocus(DMenuItemBase *fc)
|
|
||||||
{
|
|
||||||
return mFocusControl == fc;
|
|
||||||
}
|
|
||||||
void ReleaseFocus()
|
|
||||||
{
|
|
||||||
mFocusControl = NULL;
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
//=============================================================================
|
//=============================================================================
|
||||||
//
|
//
|
||||||
//
|
//
|
||||||
|
|
|
@ -868,7 +868,6 @@ static void ParseOptionMenu(FScanner &sc)
|
||||||
|
|
||||||
ParseOptionMenuBody(sc, desc);
|
ParseOptionMenuBody(sc, desc);
|
||||||
ReplaceMenu(sc, desc);
|
ReplaceMenu(sc, desc);
|
||||||
if (desc->mIndent == 0) desc->CalcIndent();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -1340,7 +1339,7 @@ void M_StartupSkillMenu(FGameStartup *gs)
|
||||||
// Delete previous contents
|
// Delete previous contents
|
||||||
for(unsigned i=0; i<ld->mItems.Size(); i++)
|
for(unsigned i=0; i<ld->mItems.Size(); i++)
|
||||||
{
|
{
|
||||||
FName n = ld->mItems[i]->GetAction(nullptr);
|
FName n = ld->mItems[i]->mAction;
|
||||||
if (n == NAME_Startgame || n == NAME_StartgameConfirm)
|
if (n == NAME_Startgame || n == NAME_StartgameConfirm)
|
||||||
{
|
{
|
||||||
ld->mItems.Resize(i);
|
ld->mItems.Resize(i);
|
||||||
|
|
|
@ -49,32 +49,6 @@
|
||||||
#include "menu/menu.h"
|
#include "menu/menu.h"
|
||||||
|
|
||||||
|
|
||||||
//=============================================================================
|
|
||||||
//
|
|
||||||
//
|
|
||||||
//
|
|
||||||
//=============================================================================
|
|
||||||
|
|
||||||
void DOptionMenuDescriptor::CalcIndent()
|
|
||||||
{
|
|
||||||
// calculate the menu indent
|
|
||||||
int widest = 0, thiswidth;
|
|
||||||
|
|
||||||
for (unsigned i = 0; i < mItems.Size(); i++)
|
|
||||||
{
|
|
||||||
thiswidth = mItems[i]->GetIndent();
|
|
||||||
if (thiswidth > widest) widest = thiswidth;
|
|
||||||
}
|
|
||||||
mIndent = widest + 4;
|
|
||||||
}
|
|
||||||
|
|
||||||
DEFINE_ACTION_FUNCTION(DOptionMenuDescriptor, CalcIndent)
|
|
||||||
{
|
|
||||||
PARAM_SELF_PROLOGUE(DOptionMenuDescriptor);
|
|
||||||
self->CalcIndent();
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
//=============================================================================
|
//=============================================================================
|
||||||
//
|
//
|
||||||
//
|
//
|
||||||
|
@ -85,7 +59,7 @@ DMenuItemBase *DOptionMenuDescriptor::GetItem(FName name)
|
||||||
{
|
{
|
||||||
for(unsigned i=0;i<mItems.Size(); i++)
|
for(unsigned i=0;i<mItems.Size(); i++)
|
||||||
{
|
{
|
||||||
FName nm = mItems[i]->GetAction(NULL);
|
FName nm = mItems[i]->mAction;
|
||||||
if (nm == name) return mItems[i];
|
if (nm == name) return mItems[i];
|
||||||
}
|
}
|
||||||
return NULL;
|
return NULL;
|
||||||
|
|
|
@ -40,10 +40,10 @@ class ListMenuDescriptor : MenuDescriptor native
|
||||||
//
|
//
|
||||||
//=============================================================================
|
//=============================================================================
|
||||||
|
|
||||||
class ListMenu : Menu native
|
class ListMenu : Menu
|
||||||
{
|
{
|
||||||
native ListMenuDescriptor mDesc;
|
ListMenuDescriptor mDesc;
|
||||||
native MenuItemBase mFocusControl;
|
MenuItemBase mFocusControl;
|
||||||
|
|
||||||
virtual void Init(Menu parent = NULL, ListMenuDescriptor desc = NULL)
|
virtual void Init(Menu parent = NULL, ListMenuDescriptor desc = NULL)
|
||||||
{
|
{
|
||||||
|
@ -82,7 +82,7 @@ class ListMenu : Menu native
|
||||||
//
|
//
|
||||||
//=============================================================================
|
//=============================================================================
|
||||||
|
|
||||||
MenuItemBase GetItem(Name name)
|
ListMenuItem GetItem(Name name)
|
||||||
{
|
{
|
||||||
for(int i = 0; i < mDesc.mItems.Size(); i++)
|
for(int i = 0; i < mDesc.mItems.Size(); i++)
|
||||||
{
|
{
|
||||||
|
|
|
@ -111,7 +111,6 @@ class Menu : Object native
|
||||||
native virtual void Ticker();
|
native virtual void Ticker();
|
||||||
native virtual void Drawer();
|
native virtual void Drawer();
|
||||||
native void Close();
|
native void Close();
|
||||||
native MenuItemBase GetItem(Name n);
|
|
||||||
native void ActivateMenu();
|
native void ActivateMenu();
|
||||||
|
|
||||||
static void MenuSound(Sound snd)
|
static void MenuSound(Sound snd)
|
||||||
|
|
|
@ -56,8 +56,6 @@ class OptionMenuDescriptor : MenuDescriptor native
|
||||||
native int mPosition;
|
native int mPosition;
|
||||||
native bool mDontDim;
|
native bool mDontDim;
|
||||||
|
|
||||||
native void CalcIndent();
|
|
||||||
native OptionMenuItem GetItem(Name iname);
|
|
||||||
void Reset()
|
void Reset()
|
||||||
{
|
{
|
||||||
// Reset the default settings (ignore all other values in the struct)
|
// Reset the default settings (ignore all other values in the struct)
|
||||||
|
@ -66,6 +64,25 @@ class OptionMenuDescriptor : MenuDescriptor native
|
||||||
mIndent = 0;
|
mIndent = 0;
|
||||||
mDontDim = 0;
|
mDontDim = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//=============================================================================
|
||||||
|
//
|
||||||
|
//
|
||||||
|
//
|
||||||
|
//=============================================================================
|
||||||
|
|
||||||
|
void CalcIndent()
|
||||||
|
{
|
||||||
|
// calculate the menu indent
|
||||||
|
int widest = 0, thiswidth;
|
||||||
|
|
||||||
|
for (int i = 0; i < mItems.Size(); i++)
|
||||||
|
{
|
||||||
|
thiswidth = mItems[i].GetIndent();
|
||||||
|
if (thiswidth > widest) widest = thiswidth;
|
||||||
|
}
|
||||||
|
mIndent = widest + 4;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -88,7 +105,24 @@ class OptionMenu : Menu
|
||||||
mParentMenu = parent;
|
mParentMenu = parent;
|
||||||
mDesc = desc;
|
mDesc = desc;
|
||||||
if (mDesc != NULL && mDesc.mSelectedItem == -1) mDesc.mSelectedItem = FirstSelectable();
|
if (mDesc != NULL && mDesc.mSelectedItem == -1) mDesc.mSelectedItem = FirstSelectable();
|
||||||
|
mDesc.CalcIndent();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
//=============================================================================
|
||||||
|
//
|
||||||
|
//
|
||||||
|
//
|
||||||
|
//=============================================================================
|
||||||
|
|
||||||
|
OptionMenuItem GetItem(Name name)
|
||||||
|
{
|
||||||
|
for(int i = 0; i < mDesc.mItems.Size(); i++)
|
||||||
|
{
|
||||||
|
Name nm = mDesc.mItems[i].GetAction();
|
||||||
|
if (nm == name) return mDesc.mItems[i];
|
||||||
|
}
|
||||||
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -136,7 +136,7 @@ class OptionMenuItemCommand : OptionMenuItemSubmenu
|
||||||
// don't execute if no menu is active
|
// don't execute if no menu is active
|
||||||
if (m == null) return false;
|
if (m == null) return false;
|
||||||
// don't execute if this item cannot be found in the current menu.
|
// don't execute if this item cannot be found in the current menu.
|
||||||
if (m.mDesc.GetItem(mAction) != self) return false;
|
if (m.GetItem(mAction) != self) return false;
|
||||||
Menu.MenuSound("menu/choose");
|
Menu.MenuSound("menu/choose");
|
||||||
DoCommand(mAction);
|
DoCommand(mAction);
|
||||||
return true;
|
return true;
|
||||||
|
@ -388,7 +388,7 @@ class EnterKey : Menu
|
||||||
let parent = OptionMenu(mParentMenu);
|
let parent = OptionMenu(mParentMenu);
|
||||||
if (parent != null)
|
if (parent != null)
|
||||||
{
|
{
|
||||||
let it = parent.mDesc.GetItem('Controlmessage');
|
let it = parent.GetItem('Controlmessage');
|
||||||
if (it != null)
|
if (it != null)
|
||||||
{
|
{
|
||||||
it.SetValue(0, which);
|
it.SetValue(0, which);
|
||||||
|
|
Loading…
Reference in a new issue