mirror of
https://github.com/ZDoom/gzdoom.git
synced 2024-11-23 04:22:34 +00:00
- scripted color picker fully working.
This commit is contained in:
parent
dbf3530696
commit
f0e925c5a7
9 changed files with 186 additions and 189 deletions
|
@ -839,7 +839,6 @@ set( FASTMATH_PCH_SOURCES
|
||||||
SkylineBinPack.cpp
|
SkylineBinPack.cpp
|
||||||
intermission/intermission.cpp
|
intermission/intermission.cpp
|
||||||
intermission/intermission_parse.cpp
|
intermission/intermission_parse.cpp
|
||||||
menu/colorpickermenu.cpp
|
|
||||||
menu/joystickmenu.cpp
|
menu/joystickmenu.cpp
|
||||||
menu/listmenu.cpp
|
menu/listmenu.cpp
|
||||||
menu/loadsavemenu.cpp
|
menu/loadsavemenu.cpp
|
||||||
|
|
|
@ -1,151 +0,0 @@
|
||||||
/*
|
|
||||||
** colorpickermenu.cpp
|
|
||||||
** The color picker menu
|
|
||||||
**
|
|
||||||
**---------------------------------------------------------------------------
|
|
||||||
** 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 <float.h>
|
|
||||||
|
|
||||||
#include "menu/menu.h"
|
|
||||||
#include "c_dispatch.h"
|
|
||||||
#include "w_wad.h"
|
|
||||||
#include "sc_man.h"
|
|
||||||
#include "v_font.h"
|
|
||||||
#include "g_level.h"
|
|
||||||
#include "d_player.h"
|
|
||||||
#include "v_video.h"
|
|
||||||
#include "gi.h"
|
|
||||||
#include "i_system.h"
|
|
||||||
#include "c_bind.h"
|
|
||||||
#include "v_palette.h"
|
|
||||||
#include "d_event.h"
|
|
||||||
#include "d_gui.h"
|
|
||||||
|
|
||||||
class DColorPickerMenu : public DOptionMenu
|
|
||||||
{
|
|
||||||
DECLARE_CLASS(DColorPickerMenu, DOptionMenu)
|
|
||||||
|
|
||||||
public:
|
|
||||||
|
|
||||||
float mRed;
|
|
||||||
float mGreen;
|
|
||||||
float mBlue;
|
|
||||||
|
|
||||||
int mGridPosX;
|
|
||||||
int mGridPosY;
|
|
||||||
|
|
||||||
int mStartItem;
|
|
||||||
|
|
||||||
FColorCVar *mCVar;
|
|
||||||
|
|
||||||
DColorPickerMenu(DMenu *parent, const char *name, DOptionMenuDescriptor *desc, FColorCVar *cvar)
|
|
||||||
{
|
|
||||||
mStartItem = desc->mItems.Size();
|
|
||||||
mRed = (float)RPART(DWORD(*cvar));
|
|
||||||
mGreen = (float)GPART(DWORD(*cvar));
|
|
||||||
mBlue = (float)BPART(DWORD(*cvar));
|
|
||||||
mGridPosX = 0;
|
|
||||||
mGridPosY = 0;
|
|
||||||
mCVar = cvar;
|
|
||||||
|
|
||||||
// This menu uses some featurs that are hard to implement in an external control lump
|
|
||||||
// so it creates its own list of menu items.
|
|
||||||
desc->mItems.Resize(mStartItem+8);
|
|
||||||
desc->mItems[mStartItem+0] = CreateOptionMenuItemStaticText(name, false);
|
|
||||||
desc->mItems[mStartItem+1] = CreateOptionMenuItemStaticText(" ", false);
|
|
||||||
desc->mItems[mStartItem+2] = CreateOptionMenuSliderVar("Red", 0, 0, 255, 15, 0);
|
|
||||||
desc->mItems[mStartItem+3] = CreateOptionMenuSliderVar("Green", 1, 0, 255, 15, 0);
|
|
||||||
desc->mItems[mStartItem+4] = CreateOptionMenuSliderVar("Blue", 2, 0, 255, 15, 0);
|
|
||||||
desc->mItems[mStartItem+5] = CreateOptionMenuItemStaticText(" ", false);
|
|
||||||
desc->mItems[mStartItem+6] = CreateOptionMenuItemCommand("Undo changes", "undocolorpic");
|
|
||||||
desc->mItems[mStartItem+7] = CreateOptionMenuItemStaticText(" ", false);
|
|
||||||
for (auto &p : desc->mItems)
|
|
||||||
{
|
|
||||||
GC::WriteBarrier(p);
|
|
||||||
}
|
|
||||||
desc->mSelectedItem = mStartItem + 2;
|
|
||||||
Init(parent, desc);
|
|
||||||
desc->mIndent = 0;
|
|
||||||
desc->CalcIndent();
|
|
||||||
}
|
|
||||||
|
|
||||||
void OnDestroy() override
|
|
||||||
{
|
|
||||||
if (mStartItem >= 0)
|
|
||||||
{
|
|
||||||
mDesc->mItems.Resize(mStartItem);
|
|
||||||
UCVarValue val;
|
|
||||||
val.Int = MAKERGB(int(mRed), int(mGreen), int(mBlue));
|
|
||||||
if (mCVar != NULL) mCVar->SetGenericRep (val, CVAR_Int);
|
|
||||||
mStartItem = -1;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void Reset()
|
|
||||||
{
|
|
||||||
mRed = (float)RPART(DWORD(*mCVar));
|
|
||||||
mGreen = (float)GPART(DWORD(*mCVar));
|
|
||||||
mBlue = (float)BPART(DWORD(*mCVar));
|
|
||||||
}
|
|
||||||
|
|
||||||
};
|
|
||||||
|
|
||||||
IMPLEMENT_CLASS(DColorPickerMenu, true, false)
|
|
||||||
|
|
||||||
CCMD(undocolorpic)
|
|
||||||
{
|
|
||||||
if (DMenu::CurrentMenu != NULL && DMenu::CurrentMenu->IsKindOf(RUNTIME_CLASS(DColorPickerMenu)))
|
|
||||||
{
|
|
||||||
static_cast<DColorPickerMenu*>(DMenu::CurrentMenu)->Reset();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
DMenu *StartPickerMenu(DMenu *parent, const char *name, FColorCVar *cvar)
|
|
||||||
{
|
|
||||||
DMenuDescriptor **desc = MenuDescriptors.CheckKey(NAME_Colorpickermenu);
|
|
||||||
if (desc != NULL && (*desc)->IsKindOf(RUNTIME_CLASS(DOptionMenuDescriptor)))
|
|
||||||
{
|
|
||||||
return new DColorPickerMenu(parent, name, (DOptionMenuDescriptor*)(*desc), cvar);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
DEFINE_FIELD(DColorPickerMenu, mRed);
|
|
||||||
DEFINE_FIELD(DColorPickerMenu, mGreen);
|
|
||||||
DEFINE_FIELD(DColorPickerMenu, mBlue);
|
|
||||||
DEFINE_FIELD(DColorPickerMenu, mGridPosX);
|
|
||||||
DEFINE_FIELD(DColorPickerMenu, mGridPosY);
|
|
||||||
DEFINE_FIELD(DColorPickerMenu, mStartItem);
|
|
||||||
DEFINE_FIELD(DColorPickerMenu, mCVar);
|
|
|
@ -107,6 +107,14 @@ IMPLEMENT_CLASS(DMenuDescriptor, false, false)
|
||||||
IMPLEMENT_CLASS(DListMenuDescriptor, false, false)
|
IMPLEMENT_CLASS(DListMenuDescriptor, false, false)
|
||||||
IMPLEMENT_CLASS(DOptionMenuDescriptor, false, false)
|
IMPLEMENT_CLASS(DOptionMenuDescriptor, false, false)
|
||||||
|
|
||||||
|
DEFINE_ACTION_FUNCTION(DMenuDescriptor, GetDescriptor)
|
||||||
|
{
|
||||||
|
PARAM_PROLOGUE;
|
||||||
|
PARAM_NAME(name);
|
||||||
|
DMenuDescriptor **desc = MenuDescriptors.CheckKey(name);
|
||||||
|
auto retn = desc ? *desc : nullptr;
|
||||||
|
ACTION_RETURN_POINTER(retn);
|
||||||
|
}
|
||||||
|
|
||||||
size_t DListMenuDescriptor::PropagateMark()
|
size_t DListMenuDescriptor::PropagateMark()
|
||||||
{
|
{
|
||||||
|
@ -1139,6 +1147,21 @@ CCMD(reset2saved)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// This really should be in the script but we can't do scripted CCMDs yet.
|
||||||
|
CCMD(undocolorpic)
|
||||||
|
{
|
||||||
|
if (DMenu::CurrentMenu != NULL)
|
||||||
|
{
|
||||||
|
IFVIRTUALPTR(DMenu::CurrentMenu, DMenu, ResetColor)
|
||||||
|
{
|
||||||
|
VMValue params[] = { (DObject*)DMenu::CurrentMenu };
|
||||||
|
GlobalVMStack.Call(func, params, countof(params), nullptr, 0, nullptr);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
//native void OptionMenuDescriptor.CalcIndent();
|
//native void OptionMenuDescriptor.CalcIndent();
|
||||||
//native OptionMenuItem OptionMenuDescriptor.GetItem(Name iname);
|
//native OptionMenuItem OptionMenuDescriptor.GetItem(Name iname);
|
||||||
|
|
|
@ -487,6 +487,13 @@ void DOptionMenuDescriptor::CalcIndent()
|
||||||
mIndent = widest + 4;
|
mIndent = widest + 4;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
DEFINE_ACTION_FUNCTION(DOptionMenuDescriptor, CalcIndent)
|
||||||
|
{
|
||||||
|
PARAM_SELF_PROLOGUE(DOptionMenuDescriptor);
|
||||||
|
self->CalcIndent();
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
//=============================================================================
|
//=============================================================================
|
||||||
//
|
//
|
||||||
//
|
//
|
||||||
|
|
|
@ -589,6 +589,7 @@ void ZCCCompiler::CreateClassTypes()
|
||||||
{
|
{
|
||||||
Error(c->cls, "Class name %s already exists", c->NodeName().GetChars());
|
Error(c->cls, "Class name %s already exists", c->NodeName().GetChars());
|
||||||
}
|
}
|
||||||
|
else DPrintf(DMSG_SPAMMY, "Created class %s with parent %s\n", c->Type()->TypeName.GetChars(), c->Type()->ParentClass->TypeName.GetChars());
|
||||||
}
|
}
|
||||||
catch (CRecoverableError &err)
|
catch (CRecoverableError &err)
|
||||||
{
|
{
|
||||||
|
|
|
@ -10,6 +10,7 @@
|
||||||
#include "zscript/menu/menu.txt"
|
#include "zscript/menu/menu.txt"
|
||||||
#include "zscript/menu/listmenuitems.txt"
|
#include "zscript/menu/listmenuitems.txt"
|
||||||
#include "zscript/menu/optionmenuitems.txt"
|
#include "zscript/menu/optionmenuitems.txt"
|
||||||
|
#include "zscript/menu/colorpickermenu.txt"
|
||||||
#include "zscript/menu/joystickmenu.txt"
|
#include "zscript/menu/joystickmenu.txt"
|
||||||
#include "zscript/menu/playerdisplay.txt"
|
#include "zscript/menu/playerdisplay.txt"
|
||||||
#include "zscript/menu/playermenu.txt"
|
#include "zscript/menu/playermenu.txt"
|
||||||
|
|
|
@ -43,10 +43,11 @@ class OptionMenuSliderVar : OptionMenuSliderBase
|
||||||
{
|
{
|
||||||
int mIndex;
|
int mIndex;
|
||||||
|
|
||||||
void Init(String label, int index, double min, double max, double step, int showval)
|
OptionMenuSliderVar Init(String label, int index, double min, double max, double step, int showval)
|
||||||
{
|
{
|
||||||
Super.Init(label, min, max, step, showval);
|
Super.Init(label, min, max, step, showval);
|
||||||
mIndex = index;
|
mIndex = index;
|
||||||
|
return self;
|
||||||
}
|
}
|
||||||
|
|
||||||
override double GetSliderValue()
|
override double GetSliderValue()
|
||||||
|
@ -60,19 +61,18 @@ class OptionMenuSliderVar : OptionMenuSliderBase
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
class ColorpickerMenu : OptionMenu
|
||||||
class ColorpickerMenu : Menu native
|
|
||||||
{
|
{
|
||||||
native float mRed;
|
float mRed;
|
||||||
native float mGreen;
|
float mGreen;
|
||||||
native float mBlue;
|
float mBlue;
|
||||||
|
|
||||||
native int mGridPosX;
|
int mGridPosX;
|
||||||
native int mGridPosY;
|
int mGridPosY;
|
||||||
|
|
||||||
native int mStartItem;
|
int mStartItem;
|
||||||
|
|
||||||
native CVar mCVar;
|
CVar mCVar;
|
||||||
|
|
||||||
double GetColor(int index)
|
double GetColor(int index)
|
||||||
{
|
{
|
||||||
|
@ -86,6 +86,40 @@ class ColorpickerMenu : Menu native
|
||||||
else if (index == 1) mGreen = val;
|
else if (index == 1) mGreen = val;
|
||||||
else mBlue = val;
|
else mBlue = val;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//=============================================================================
|
||||||
|
//
|
||||||
|
//
|
||||||
|
//
|
||||||
|
//=============================================================================
|
||||||
|
|
||||||
|
void Init(Menu parent, String name, OptionMenuDescriptor desc, CVar cv)
|
||||||
|
{
|
||||||
|
Super.Init(parent, desc);
|
||||||
|
|
||||||
|
mStartItem = mDesc.mItems.Size();
|
||||||
|
mCVar = cv;
|
||||||
|
|
||||||
|
ResetColor();
|
||||||
|
mGridPosX = 0;
|
||||||
|
mGridPosY = 0;
|
||||||
|
|
||||||
|
// This menu uses some features that are hard to implement in an external control lump
|
||||||
|
// so it creates its own list of menu items.
|
||||||
|
mDesc.mItems.Resize(mStartItem+8);
|
||||||
|
mDesc.mItems[mStartItem+0] = new ("OptionMenuItemStaticText").Init(name, false);
|
||||||
|
mDesc.mItems[mStartItem+1] = new ("OptionMenuItemStaticText").Init(" ", false);
|
||||||
|
mDesc.mItems[mStartItem+2] = new ("OptionMenuSliderVar").Init("Red", 0, 0, 255, 15, 0);
|
||||||
|
mDesc.mItems[mStartItem+3] = new ("OptionMenuSliderVar").Init("Green", 1, 0, 255, 15, 0);
|
||||||
|
mDesc.mItems[mStartItem+4] = new ("OptionMenuSliderVar").Init("Blue", 2, 0, 255, 15, 0);
|
||||||
|
mDesc.mItems[mStartItem+5] = new ("OptionMenuItemStaticText").Init(" ", false);
|
||||||
|
mDesc.mItems[mStartItem+6] = new ("OptionMenuItemCommand").Init("Undo changes", "undocolorpic");
|
||||||
|
mDesc.mItems[mStartItem+7] = new ("OptionMenuItemStaticText").Init(" ", false);
|
||||||
|
mDesc.mSelectedItem = mStartItem + 2;
|
||||||
|
mDesc.mIndent = 0;
|
||||||
|
mDesc.CalcIndent();
|
||||||
|
}
|
||||||
|
|
||||||
//=============================================================================
|
//=============================================================================
|
||||||
//
|
//
|
||||||
//
|
//
|
||||||
|
@ -297,5 +331,24 @@ class ColorpickerMenu : Menu native
|
||||||
screen.DrawText (SmallFont, Font.CR_WHITE, x+(48+24-SmallFont.StringWidth("New")/2)*CleanXfac_1, y, "New", DTA_CleanNoMove_1, true);
|
screen.DrawText (SmallFont, Font.CR_WHITE, x+(48+24-SmallFont.StringWidth("New")/2)*CleanXfac_1, y, "New", DTA_CleanNoMove_1, true);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
override void OnDestroy()
|
||||||
|
{
|
||||||
|
if (mStartItem >= 0)
|
||||||
|
{
|
||||||
|
mDesc.mItems.Resize(mStartItem);
|
||||||
|
if (mCVar != null) mCVar.SetInt(Color(int(mRed), int(mGreen), int(mBlue)));
|
||||||
|
mStartItem = -1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
override void ResetColor()
|
||||||
|
{
|
||||||
|
if (mCVar != null)
|
||||||
|
{
|
||||||
|
Color clr = Color(mCVar.GetInt());
|
||||||
|
mRed = clr.r;
|
||||||
|
mGreen = clr.g;
|
||||||
|
mBlue = clr.b;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
|
@ -99,6 +99,7 @@ class Menu : Object native
|
||||||
virtual void SetFocus(MenuItemBase fc) {}
|
virtual void SetFocus(MenuItemBase fc) {}
|
||||||
virtual bool CheckFocus(MenuItemBase fc) { return false; }
|
virtual bool CheckFocus(MenuItemBase fc) { return false; }
|
||||||
virtual void ReleaseFocus() {}
|
virtual void ReleaseFocus() {}
|
||||||
|
virtual void ResetColor() {}
|
||||||
|
|
||||||
native virtual bool Responder(InputEvent ev);
|
native virtual bool Responder(InputEvent ev);
|
||||||
native virtual bool MenuEvent (int mkey, bool fromcontroller);
|
native virtual bool MenuEvent (int mkey, bool fromcontroller);
|
||||||
|
@ -125,6 +126,8 @@ class MenuDescriptor : Object native
|
||||||
native Name mMenuName;
|
native Name mMenuName;
|
||||||
native String mNetgameMessage;
|
native String mNetgameMessage;
|
||||||
native Class<Menu> mClass;
|
native Class<Menu> mClass;
|
||||||
|
|
||||||
|
native static MenuDescriptor GetDescriptor(Name n);
|
||||||
}
|
}
|
||||||
|
|
||||||
class ListMenuDescriptor : MenuDescriptor native
|
class ListMenuDescriptor : MenuDescriptor native
|
||||||
|
@ -185,7 +188,7 @@ class OptionMenuDescriptor : MenuDescriptor native
|
||||||
native int mPosition;
|
native int mPosition;
|
||||||
native bool mDontDim;
|
native bool mDontDim;
|
||||||
|
|
||||||
//native void CalcIndent();
|
native void CalcIndent();
|
||||||
//native OptionMenuItem GetItem(Name iname);
|
//native OptionMenuItem GetItem(Name iname);
|
||||||
void Reset()
|
void Reset()
|
||||||
{
|
{
|
||||||
|
@ -199,24 +202,64 @@ class OptionMenuDescriptor : MenuDescriptor native
|
||||||
|
|
||||||
class OptionMenu : Menu native
|
class OptionMenu : Menu native
|
||||||
{
|
{
|
||||||
|
native OptionMenuDescriptor mDesc;
|
||||||
native bool CanScrollUp;
|
native bool CanScrollUp;
|
||||||
native bool CanScrollDown;
|
native bool CanScrollDown;
|
||||||
native int VisBottom;
|
native int VisBottom;
|
||||||
native OptionMenuItem mFocusControl;
|
native OptionMenuItem mFocusControl;
|
||||||
native OptionMenuDescriptor mDesc;
|
|
||||||
|
//=============================================================================
|
||||||
|
//
|
||||||
|
//
|
||||||
|
//
|
||||||
|
//=============================================================================
|
||||||
|
|
||||||
|
void Init(Menu parent, OptionMenuDescriptor desc)
|
||||||
|
{
|
||||||
|
mParentMenu = parent;
|
||||||
|
mDesc = desc;
|
||||||
|
if (mDesc != NULL && mDesc.mSelectedItem == -1) mDesc.mSelectedItem = FirstSelectable();
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
//=============================================================================
|
||||||
|
//
|
||||||
|
//
|
||||||
|
//
|
||||||
|
//=============================================================================
|
||||||
|
|
||||||
|
int FirstSelectable()
|
||||||
|
{
|
||||||
|
if (mDesc != NULL)
|
||||||
|
{
|
||||||
|
// Go down to the first selectable item
|
||||||
|
int i = -1;
|
||||||
|
do
|
||||||
|
{
|
||||||
|
i++;
|
||||||
|
}
|
||||||
|
while (i < mDesc.mItems.Size() && !mDesc.mItems[i].Selectable());
|
||||||
|
if (i>=0 && i < mDesc.mItems.Size()) return i;
|
||||||
|
}
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
override void SetFocus(MenuItemBase fc)
|
override void SetFocus(MenuItemBase fc)
|
||||||
{
|
{
|
||||||
mFocusControl = OptionMenuItem(fc);
|
mFocusControl = OptionMenuItem(fc);
|
||||||
}
|
}
|
||||||
|
|
||||||
override bool CheckFocus(MenuItemBase fc)
|
override bool CheckFocus(MenuItemBase fc)
|
||||||
{
|
{
|
||||||
return mFocusControl == fc;
|
return mFocusControl == fc;
|
||||||
}
|
}
|
||||||
|
|
||||||
override void ReleaseFocus()
|
override void ReleaseFocus()
|
||||||
{
|
{
|
||||||
mFocusControl = NULL;
|
mFocusControl = NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -37,7 +37,7 @@ class OptionMenuItem : MenuItemBase
|
||||||
String mLabel;
|
String mLabel;
|
||||||
bool mCentered;
|
bool mCentered;
|
||||||
|
|
||||||
void Init(String label, String command, bool center = false)
|
protected void Init(String label, String command, bool center = false)
|
||||||
{
|
{
|
||||||
Super.Init(0, 0, command);
|
Super.Init(0, 0, command);
|
||||||
mLabel = label;
|
mLabel = label;
|
||||||
|
@ -92,10 +92,11 @@ class OptionMenuItem : MenuItemBase
|
||||||
class OptionMenuItemSubmenu : OptionMenuItem
|
class OptionMenuItemSubmenu : OptionMenuItem
|
||||||
{
|
{
|
||||||
int mParam;
|
int mParam;
|
||||||
void Init(String label, Name command, int param = 0)
|
OptionMenuItemSubmenu Init(String label, Name command, int param = 0)
|
||||||
{
|
{
|
||||||
Super.init(label, command);
|
Super.init(label, command);
|
||||||
mParam = param;
|
mParam = param;
|
||||||
|
return self;
|
||||||
}
|
}
|
||||||
|
|
||||||
override int Draw(OptionMenuDescriptor desc, int y, int indent, bool selected)
|
override int Draw(OptionMenuDescriptor desc, int y, int indent, bool selected)
|
||||||
|
@ -120,9 +121,10 @@ class OptionMenuItemSubmenu : OptionMenuItem
|
||||||
|
|
||||||
class OptionMenuItemCommand : OptionMenuItemSubmenu
|
class OptionMenuItemCommand : OptionMenuItemSubmenu
|
||||||
{
|
{
|
||||||
void Init(String label, Name command)
|
OptionMenuItemCommand Init(String label, Name command)
|
||||||
{
|
{
|
||||||
Super.Init(label, command);
|
Super.Init(label, command);
|
||||||
|
return self;
|
||||||
}
|
}
|
||||||
|
|
||||||
override bool Activate()
|
override bool Activate()
|
||||||
|
@ -145,10 +147,11 @@ class OptionMenuItemSafeCommand : OptionMenuItemCommand
|
||||||
String mPrompt;
|
String mPrompt;
|
||||||
|
|
||||||
|
|
||||||
void Init(String label, Name command, String prompt = "")
|
OptionMenuItemSafeCommand Init(String label, Name command, String prompt = "")
|
||||||
{
|
{
|
||||||
Super.Init(label, command);
|
Super.Init(label, command);
|
||||||
mPrompt = prompt;
|
mPrompt = prompt;
|
||||||
|
return self;
|
||||||
}
|
}
|
||||||
|
|
||||||
override bool MenuEvent (int mkey, bool fromcontroller)
|
override bool MenuEvent (int mkey, bool fromcontroller)
|
||||||
|
@ -289,10 +292,11 @@ class OptionMenuItemOption : OptionMenuItemOptionBase
|
||||||
{
|
{
|
||||||
CVar mCVar;
|
CVar mCVar;
|
||||||
|
|
||||||
void Init(String label, Name command, Name values, CVar graycheck = null, int center = 0)
|
OptionMenuItemOption Init(String label, Name command, Name values, CVar graycheck = null, int center = 0)
|
||||||
{
|
{
|
||||||
Super.Init(label, command, values, graycheck, center);
|
Super.Init(label, command, values, graycheck, center);
|
||||||
mCVar = CVar.FindCVar(mAction);
|
mCVar = CVar.FindCVar(mAction);
|
||||||
|
return self;
|
||||||
}
|
}
|
||||||
|
|
||||||
//=============================================================================
|
//=============================================================================
|
||||||
|
@ -417,7 +421,7 @@ class OptionMenuItemControlBase : OptionMenuItem
|
||||||
int mInput;
|
int mInput;
|
||||||
bool mWaiting;
|
bool mWaiting;
|
||||||
|
|
||||||
void Init(String label, Name command, KeyBindings bindings)
|
protected void Init(String label, Name command, KeyBindings bindings)
|
||||||
{
|
{
|
||||||
Super.init(label, command);
|
Super.init(label, command);
|
||||||
mBindings = bindings;
|
mBindings = bindings;
|
||||||
|
@ -486,17 +490,19 @@ class OptionMenuItemControlBase : OptionMenuItem
|
||||||
|
|
||||||
class OptionMenuItemControl : OptionMenuItemControlBase
|
class OptionMenuItemControl : OptionMenuItemControlBase
|
||||||
{
|
{
|
||||||
void Init(String label, Name command)
|
OptionMenuItemControl Init(String label, Name command)
|
||||||
{
|
{
|
||||||
Super.Init(label, command, Bindings);
|
Super.Init(label, command, Bindings);
|
||||||
|
return self;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
class OptionMenuItemMapControl : OptionMenuItemControlBase
|
class OptionMenuItemMapControl : OptionMenuItemControlBase
|
||||||
{
|
{
|
||||||
void Init(String label, Name command)
|
OptionMenuItemMapControl Init(String label, Name command)
|
||||||
{
|
{
|
||||||
Super.Init(label, command, AutomapBindings);
|
Super.Init(label, command, AutomapBindings);
|
||||||
|
return self;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -511,18 +517,20 @@ class OptionMenuItemStaticText : OptionMenuItem
|
||||||
int mColor;
|
int mColor;
|
||||||
|
|
||||||
// this function is only for use from MENUDEF, it needs to do some strange things with the color for backwards compatibility.
|
// this function is only for use from MENUDEF, it needs to do some strange things with the color for backwards compatibility.
|
||||||
void Init(String label, int cr = -1)
|
OptionMenuItemStaticText Init(String label, int cr = -1)
|
||||||
{
|
{
|
||||||
Super.Init(label, 'None', true);
|
Super.Init(label, 'None', true);
|
||||||
mColor = OptionMenuSettings.mFontColor;
|
mColor = OptionMenuSettings.mFontColor;
|
||||||
if ((cr & 0xffff0000) == 0x12340000) mColor = cr & 0xffff;
|
if ((cr & 0xffff0000) == 0x12340000) mColor = cr & 0xffff;
|
||||||
else if (cr > 0) mColor = OptionMenuSettings.mFontColorHeader;
|
else if (cr > 0) mColor = OptionMenuSettings.mFontColorHeader;
|
||||||
|
return self;
|
||||||
}
|
}
|
||||||
|
|
||||||
void InitDirect(String label, int cr)
|
OptionMenuItemStaticText InitDirect(String label, int cr)
|
||||||
{
|
{
|
||||||
Super.Init(label, 'None', true);
|
Super.Init(label, 'None', true);
|
||||||
mColor = cr;
|
mColor = cr;
|
||||||
|
return self;
|
||||||
}
|
}
|
||||||
|
|
||||||
override int Draw(OptionMenuDescriptor desc, int y, int indent, bool selected)
|
override int Draw(OptionMenuDescriptor desc, int y, int indent, bool selected)
|
||||||
|
@ -551,7 +559,7 @@ class OptionMenuItemStaticTextSwitchable : OptionMenuItem
|
||||||
int mCurrent;
|
int mCurrent;
|
||||||
|
|
||||||
// this function is only for use from MENUDEF, it needs to do some strange things with the color for backwards compatibility.
|
// this function is only for use from MENUDEF, it needs to do some strange things with the color for backwards compatibility.
|
||||||
void Init(String label, String label2, Name command, int cr = -1)
|
OptionMenuItemStaticTextSwitchable Init(String label, String label2, Name command, int cr = -1)
|
||||||
{
|
{
|
||||||
Super.Init(label, command, true);
|
Super.Init(label, command, true);
|
||||||
mAltText = label2;
|
mAltText = label2;
|
||||||
|
@ -560,14 +568,16 @@ class OptionMenuItemStaticTextSwitchable : OptionMenuItem
|
||||||
mColor = OptionMenuSettings.mFontColor;
|
mColor = OptionMenuSettings.mFontColor;
|
||||||
if ((cr & 0xffff0000) == 0x12340000) mColor = cr & 0xffff;
|
if ((cr & 0xffff0000) == 0x12340000) mColor = cr & 0xffff;
|
||||||
else if (cr > 0) mColor = OptionMenuSettings.mFontColorHeader;
|
else if (cr > 0) mColor = OptionMenuSettings.mFontColorHeader;
|
||||||
|
return self;
|
||||||
}
|
}
|
||||||
|
|
||||||
void InitDirect(String label, String label2, Name command, int cr)
|
OptionMenuItemStaticTextSwitchable InitDirect(String label, String label2, Name command, int cr)
|
||||||
{
|
{
|
||||||
Super.Init(label, command, true);
|
Super.Init(label, command, true);
|
||||||
mColor = cr;
|
mColor = cr;
|
||||||
mAltText = label2;
|
mAltText = label2;
|
||||||
mCurrent = 0;
|
mCurrent = 0;
|
||||||
|
return self;
|
||||||
}
|
}
|
||||||
|
|
||||||
override int Draw(OptionMenuDescriptor desc, int y, int indent, bool selected)
|
override int Draw(OptionMenuDescriptor desc, int y, int indent, bool selected)
|
||||||
|
@ -764,10 +774,11 @@ class OptionMenuItemSlider : OptionMenuSliderBase
|
||||||
{
|
{
|
||||||
CVar mCVar;
|
CVar mCVar;
|
||||||
|
|
||||||
void Init(String label, Name command, double min, double max, double step, int showval = 1)
|
OptionMenuItemSlider Init(String label, Name command, double min, double max, double step, int showval = 1)
|
||||||
{
|
{
|
||||||
Super.Init(label, min, max, step, showval);
|
Super.Init(label, min, max, step, showval);
|
||||||
mCVar =CVar.FindCVar(command);
|
mCVar =CVar.FindCVar(command);
|
||||||
|
return self;
|
||||||
}
|
}
|
||||||
|
|
||||||
override double GetSliderValue()
|
override double GetSliderValue()
|
||||||
|
@ -803,12 +814,13 @@ class OptionMenuItemColorPicker : OptionMenuItem
|
||||||
|
|
||||||
const CPF_RESET = 0x20001;
|
const CPF_RESET = 0x20001;
|
||||||
|
|
||||||
void Init(String label, Name command)
|
OptionMenuItemColorPicker Init(String label, Name command)
|
||||||
{
|
{
|
||||||
Super.Init(label, command);
|
Super.Init(label, command);
|
||||||
CVar cv = CVar.FindCVar(command);
|
CVar cv = CVar.FindCVar(command);
|
||||||
if (cv != null && cv.GetRealType() != CVar.CVAR_Color) cv = null;
|
if (cv != null && cv.GetRealType() != CVar.CVAR_Color) cv = null;
|
||||||
mCVar = cv;
|
mCVar = cv;
|
||||||
|
return self;
|
||||||
}
|
}
|
||||||
|
|
||||||
//=============================================================================
|
//=============================================================================
|
||||||
|
@ -840,20 +852,26 @@ class OptionMenuItemColorPicker : OptionMenuItem
|
||||||
if (mCVar != null)
|
if (mCVar != null)
|
||||||
{
|
{
|
||||||
Menu.MenuSound("menu/choose");
|
Menu.MenuSound("menu/choose");
|
||||||
/*
|
let desc = MenuDescriptor.GetDescriptor('Colorpickermenu');
|
||||||
Menu *picker = StartPickerMenu(Menu.CurrentMenu, mLabel, mCVar);
|
// New color pickers must inherit from the internal one to work here.
|
||||||
if (picker != null)
|
if (desc != NULL && (desc.mClass == null || desc.mClass is "ColorPickerMenu"))
|
||||||
{
|
{
|
||||||
M_ActivateMenu(picker);
|
let odesc = OptionMenuDescriptor(desc);
|
||||||
return true;
|
if (odesc != null)
|
||||||
|
{
|
||||||
|
let cls = desc.mClass;
|
||||||
|
if (cls == null) cls = "ColorpickerMenu";
|
||||||
|
let picker = ColorpickerMenu(new(cls));
|
||||||
|
picker.Init(Menu.GetCurrentMenu(), mLabel, odesc, mCVar);
|
||||||
|
picker.ActivateMenu();
|
||||||
|
return true;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
*/
|
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
class OptionMenuItemScreenResolution : OptionMenuItem
|
class OptionMenuItemScreenResolution : OptionMenuItem
|
||||||
{
|
{
|
||||||
String mResTexts[3];
|
String mResTexts[3];
|
||||||
|
@ -868,11 +886,12 @@ class OptionMenuItemScreenResolution : OptionMenuItem
|
||||||
SRL_HIGHLIGHT = 0x30004,
|
SRL_HIGHLIGHT = 0x30004,
|
||||||
};
|
};
|
||||||
|
|
||||||
void Init(String command)
|
OptionMenuItemScreenResolution Init(String command)
|
||||||
{
|
{
|
||||||
Super.Init("", command);
|
Super.Init("", command);
|
||||||
mSelection = 0;
|
mSelection = 0;
|
||||||
mHighlight = -1;
|
mHighlight = -1;
|
||||||
|
return self;
|
||||||
}
|
}
|
||||||
|
|
||||||
override bool SetValue(int i, int v)
|
override bool SetValue(int i, int v)
|
||||||
|
@ -1064,10 +1083,11 @@ class OptionMenuFieldBase : OptionMenuItem
|
||||||
|
|
||||||
class OptionMenuItemTextField : OptionMenuFieldBase
|
class OptionMenuItemTextField : OptionMenuFieldBase
|
||||||
{
|
{
|
||||||
void Init (String label, Name command, CVar graycheck = null)
|
OptionMenuItemTextField Init (String label, Name command, CVar graycheck = null)
|
||||||
{
|
{
|
||||||
Super.Init(label, command, graycheck);
|
Super.Init(label, command, graycheck);
|
||||||
mEntering = false;
|
mEntering = false;
|
||||||
|
return self;
|
||||||
}
|
}
|
||||||
|
|
||||||
override String Represent()
|
override String Represent()
|
||||||
|
@ -1132,12 +1152,13 @@ class OptionMenuItemTextField : OptionMenuFieldBase
|
||||||
|
|
||||||
class OptionMenuItemNumberField : OptionMenuFieldBase
|
class OptionMenuItemNumberField : OptionMenuFieldBase
|
||||||
{
|
{
|
||||||
void Init (String label, Name command, float minimum = 0, float maximum = 100, float step = 1, CVar graycheck = null)
|
OptionMenuItemNumberField Init (String label, Name command, float minimum = 0, float maximum = 100, float step = 1, CVar graycheck = null)
|
||||||
{
|
{
|
||||||
Super.Init(label, command, graycheck);
|
Super.Init(label, command, graycheck);
|
||||||
mMinimum = min(minimum, maximum);
|
mMinimum = min(minimum, maximum);
|
||||||
mMaximum = max(minimum, maximum);
|
mMaximum = max(minimum, maximum);
|
||||||
mStep = max(1, step);
|
mStep = max(1, step);
|
||||||
|
return self;
|
||||||
}
|
}
|
||||||
|
|
||||||
override String Represent()
|
override String Represent()
|
||||||
|
|
Loading…
Reference in a new issue