custom GUIs: added property GraphicsName to specify graphics of Symbol (if Symbol is a definition)

f.e. {Symbol = Icon_Number, GraphicsName = "Inf"}
Controls
David Dormagen 2015-03-23 15:34:09 +01:00
parent fa5257328c
commit dae7f11a70
7 changed files with 28 additions and 3 deletions

View File

@ -69,6 +69,12 @@ Every window can be defined by the following properties, which can additionally
<col>A symbol that will be drawn in the window.</col>
</row>
<row>
<col>GraphicsName</col>
<col>string</col>
<col>"Infinite"</col>
<col>Only if Symbol is a definition: the name of the graphics to use.</col>
</row>
<row>
<col>Decoration</col>
<col>definition</col>
<col>GUI_MenuDeco</col>

View File

@ -305,6 +305,8 @@ void C4ScriptGuiWindowProperty::CleanUp(Prop &prop)
if (prop.action) delete prop.action;
break;
case C4ScriptGuiWindowPropertyName::text:
case C4ScriptGuiWindowPropertyName::tooltip:
case C4ScriptGuiWindowPropertyName::symbolGraphicsName:
if (prop.strBuf) delete prop.strBuf;
break;
default:
@ -382,6 +384,7 @@ const C4Value C4ScriptGuiWindowProperty::ToC4Value()
break;
case C4ScriptGuiWindowPropertyName::text:
case C4ScriptGuiWindowPropertyName::symbolGraphicsName:
case C4ScriptGuiWindowPropertyName::tooltip:
{
if (prop.strBuf)
@ -514,6 +517,7 @@ void C4ScriptGuiWindowProperty::Set(const C4Value &value, C4String *tag)
break;
}
case C4ScriptGuiWindowPropertyName::text:
case C4ScriptGuiWindowPropertyName::symbolGraphicsName:
case C4ScriptGuiWindowPropertyName::tooltip:
{
C4String *string = value.getStr();
@ -649,6 +653,7 @@ void C4ScriptGuiWindow::Init()
props[C4ScriptGuiWindowPropertyName::symbolObject].SetNull();
props[C4ScriptGuiWindowPropertyName::symbolDef].SetNull();
props[C4ScriptGuiWindowPropertyName::text].SetNull();
props[C4ScriptGuiWindowPropertyName::symbolGraphicsName].SetNull();
props[C4ScriptGuiWindowPropertyName::tooltip].SetNull();
props[C4ScriptGuiWindowPropertyName::onClickAction].SetNull();
props[C4ScriptGuiWindowPropertyName::onMouseInAction].SetNull();
@ -920,6 +925,7 @@ const C4Value C4ScriptGuiWindow::ToC4Value()
break;
case P_Target: val = C4Value(target); break;
case P_Text: val = props[C4ScriptGuiWindowPropertyName::text].ToC4Value(); break;
case P_GraphicsName: val = props[C4ScriptGuiWindowPropertyName::symbolGraphicsName].ToC4Value(); break;
case P_Tooltip: val = props[C4ScriptGuiWindowPropertyName::tooltip].ToC4Value(); break;
case P_ID: val = C4Value(id); break;
case P_OnClick: val = props[C4ScriptGuiWindowPropertyName::onClickAction].ToC4Value(); break;
@ -1025,6 +1031,10 @@ bool C4ScriptGuiWindow::CreateFromPropList(C4PropList *proplist, bool resetStdTa
props[C4ScriptGuiWindowPropertyName::text].Set(property, stdTag);
layoutUpdateRequired = true;
}
else if (&Strings.P[P_GraphicsName] == key)
{
props[C4ScriptGuiWindowPropertyName::symbolGraphicsName].Set(property, stdTag);
}
else if (&Strings.P[P_Tooltip] == key)
{
props[C4ScriptGuiWindowPropertyName::tooltip].Set(property, stdTag);
@ -1749,9 +1759,10 @@ bool C4ScriptGuiWindow::Draw(C4TargetFacet &cgo, int32_t player, C4Rect *current
else
{
C4Def *symbolDef = props[C4ScriptGuiWindowPropertyName::symbolDef].GetDef();
StdCopyStrBuf *graphicsName = props[C4ScriptGuiWindowPropertyName::symbolGraphicsName].GetStrBuf();
if (symbolDef)
{
symbolDef->Draw(cgoOut);
symbolDef->Draw(cgoOut, false, 0UL, nullptr, 0, 0, nullptr, graphicsName ? graphicsName->getData() : nullptr);
}
}

View File

@ -53,6 +53,7 @@ enum C4ScriptGuiWindowPropertyName
frameDecoration,
symbolObject,
symbolDef,
symbolGraphicsName,
text,
onClickAction,
onMouseInAction,

View File

@ -596,12 +596,17 @@ void C4Def::LoadSounds(C4Group &hGroup, C4SoundSystem* pSoundSystem)
pSoundSystem->LoadEffects(hGroup);
}
void C4Def::Draw(C4Facet &cgo, bool fSelected, DWORD iColor, C4Object *pObj, int32_t iPhaseX, int32_t iPhaseY, C4DrawTransform* trans)
void C4Def::Draw(C4Facet &cgo, bool fSelected, DWORD iColor, C4Object *pObj, int32_t iPhaseX, int32_t iPhaseY, C4DrawTransform* trans, const char *graphicsName)
{
if(fSelected)
pDraw->DrawBoxDw(cgo.Surface, cgo.X, cgo.Y, cgo.X + cgo.Wdt - 1, cgo.Y + cgo.Hgt - 1, C4RGB(0xca, 0, 0));
C4DefGraphics* graphics = pObj ? pObj->GetGraphics() : &Graphics;
if (graphicsName)
{
C4DefGraphics *other = graphics->Get(graphicsName);
if (other) graphics = other;
}
graphics->Draw(cgo, iColor, pObj, iPhaseX, iPhaseY, trans);
}

View File

@ -209,7 +209,7 @@ public:
StdMeshSkeletonLoader &loader,
DWORD dwLoadWhat, const char *szLanguage,
class C4SoundSystem *pSoundSystem = NULL);
void Draw(C4Facet &cgo, bool fSelected=false, DWORD iColor=0, C4Object *pObj=NULL, int32_t iPhaseX=0, int32_t iPhaseY=0,C4DrawTransform* trans=NULL);
void Draw(C4Facet &cgo, bool fSelected=false, DWORD iColor=0, C4Object *pObj=NULL, int32_t iPhaseX=0, int32_t iPhaseY=0, C4DrawTransform* trans=NULL, const char * graphicsName=NULL);
inline C4Facet &GetMainFace(C4DefGraphics *pGraphics, DWORD dwClr=0) { MainFace.Surface=pGraphics->GetBitmap(dwClr); return MainFace; }
int32_t GetPlane() { return GetPropertyInt(P_Plane); }

View File

@ -156,6 +156,7 @@ C4StringTable::C4StringTable()
P[P_Target] = "Target";
P[P_Std] = "Std";
P[P_Text] = "Text";
P[P_GraphicsName] = "GraphicsName";
P[P_OnClick] = "OnClick";
P[P_OnMouseIn] = "OnMouseIn";
P[P_OnMouseOut] = "OnMouseOut";

View File

@ -362,6 +362,7 @@ enum C4PropertyName
P_Target,
P_Std,
P_Text,
P_GraphicsName,
P_ID,
P_OnClick,
P_OnMouseIn,