renamed C4GuiWindow to C4ScriptGuiWindow to increase expressivness and reduce similarity with C4Gui*

Controls
David Dormagen 2014-10-13 18:48:03 +02:00
parent a8690f0b31
commit 2a78b77bda
10 changed files with 453 additions and 450 deletions

View File

@ -247,13 +247,13 @@ set(OC_CLONK_SOURCES
src/gui/C4Gui.cpp src/gui/C4Gui.cpp
src/gui/C4GuiDialogs.cpp src/gui/C4GuiDialogs.cpp
src/gui/C4GuiEdit.cpp src/gui/C4GuiEdit.cpp
src/gui/C4GuiWindow.cpp src/gui/C4ScriptGuiWindow.cpp
src/gui/C4Gui.h src/gui/C4Gui.h
src/gui/C4GuiLabels.cpp src/gui/C4GuiLabels.cpp
src/gui/C4GuiListBox.cpp src/gui/C4GuiListBox.cpp
src/gui/C4GuiMenu.cpp src/gui/C4GuiMenu.cpp
src/gui/C4GuiTabular.cpp src/gui/C4GuiTabular.cpp
src/gui/C4GuiWindow.cpp src/gui/C4ScriptGuiWindow.cpp
src/gui/C4KeyboardInput.cpp src/gui/C4KeyboardInput.cpp
src/gui/C4KeyboardInput.h src/gui/C4KeyboardInput.h
src/gui/C4LoaderScreen.cpp src/gui/C4LoaderScreen.cpp

View File

@ -39,7 +39,7 @@
#include <C4PlayerList.h> #include <C4PlayerList.h>
#include <C4GameObjects.h> #include <C4GameObjects.h>
#include <C4GameControl.h> #include <C4GameControl.h>
#include <C4GuiWindow.h> #include <C4ScriptGuiWindow.h>
#include "gui/C4MessageInput.h" #include "gui/C4MessageInput.h"
#include "object/C4DefList.h" #include "object/C4DefList.h"
@ -555,13 +555,13 @@ C4ControlMenuCommand::C4ControlMenuCommand(int32_t actionID, int32_t player, int
void C4ControlMenuCommand::Execute() const void C4ControlMenuCommand::Execute() const
{ {
// invalid action? The action needs to be in bounds! // invalid action? The action needs to be in bounds!
if (actionType < 0 || actionType >= C4GuiWindowPropertyName::_lastProp) if (actionType < 0 || actionType >= C4ScriptGuiWindowPropertyName::_lastProp)
{ {
// this could only come from a malicious attempt to crash the engine! // this could only come from a malicious attempt to crash the engine!
Log("Warning: invalid action type for C4ControlMenuCommand!"); Log("Warning: invalid action type for C4ControlMenuCommand!");
return; return;
} }
C4GuiWindow *menu = ::Game.GuiWindowRoot->GetChildByID(menuID); C4ScriptGuiWindow *menu = ::Game.ScriptGuiRoot->GetChildByID(menuID);
// menu was closed? // menu was closed?
if (!menu) return; if (!menu) return;

View File

@ -57,7 +57,7 @@
#include <C4RankSystem.h> #include <C4RankSystem.h>
#include <C4RoundResults.h> #include <C4RoundResults.h>
#include <C4GameMessage.h> #include <C4GameMessage.h>
#include <C4GuiWindow.h> #include <C4ScriptGuiWindow.h>
#include <C4Material.h> #include <C4Material.h>
#include <C4Network2Reference.h> #include <C4Network2Reference.h>
#include <C4Weather.h> #include <C4Weather.h>
@ -102,7 +102,7 @@ C4Game::C4Game():
pSec1Timer(new C4GameSec1Timer()), pSec1Timer(new C4GameSec1Timer()),
fPreinited(false), StartupLogPos(0), QuitLogPos(0), fPreinited(false), StartupLogPos(0), QuitLogPos(0),
fQuitWithError(false), fQuitWithError(false),
GuiWindowRoot(0) ScriptGuiRoot(0)
{ {
Default(); Default();
} }
@ -916,7 +916,7 @@ void C4Game::ClearPointers(C4Object * pObj)
::MessageInput.ClearPointers(pObj); ::MessageInput.ClearPointers(pObj);
::Console.ClearPointers(pObj); ::Console.ClearPointers(pObj);
::MouseControl.ClearPointers(pObj); ::MouseControl.ClearPointers(pObj);
GuiWindowRoot->ClearPointers(pObj); ScriptGuiRoot->ClearPointers(pObj);
TransferZones.ClearPointers(pObj); TransferZones.ClearPointers(pObj);
if (pGlobalEffects) if (pGlobalEffects)
pGlobalEffects->ClearPointers(pObj); pGlobalEffects->ClearPointers(pObj);
@ -1485,7 +1485,7 @@ void C4Game::Default()
DebugPassword.Clear(); DebugPassword.Clear();
DebugHost.Clear(); DebugHost.Clear();
DebugWait = false; DebugWait = false;
GuiWindowRoot = nullptr; // will be initialized when the game starts ScriptGuiRoot = nullptr; // will be initialized when the game starts
} }
void C4Game::Evaluate() void C4Game::Evaluate()
@ -1628,12 +1628,12 @@ void C4Game::CompileFunc(StdCompiler *pComp, CompileSettings comp, C4ValueNumber
{ {
C4Value val; C4Value val;
pComp->Value(mkNamingAdapt(mkParAdapt(val, numbers), "CustomGUIs", C4VNull)); pComp->Value(mkNamingAdapt(mkParAdapt(val, numbers), "CustomGUIs", C4VNull));
assert (GuiWindowRoot->GetID() == 0); assert (ScriptGuiRoot->GetID() == 0);
GuiWindowRoot->CreateFromPropList(val.getPropList(), false, false, true); ScriptGuiRoot->CreateFromPropList(val.getPropList(), false, false, true);
} }
else else
{ {
C4Value val = GuiWindowRoot->ToC4Value(); C4Value val = ScriptGuiRoot->ToC4Value();
pComp->Value(mkNamingAdapt(mkParAdapt(val, numbers), "CustomGUIs", C4VNull)); pComp->Value(mkNamingAdapt(mkParAdapt(val, numbers), "CustomGUIs", C4VNull));
} }
} }
@ -2248,11 +2248,11 @@ bool C4Game::InitGame(C4Group &hGroup, bool fLoadSection, bool fLoadSky, C4Value
} }
// prepare script menus // prepare script menus
assert(!GuiWindowRoot); assert(!ScriptGuiRoot);
const float standardVerticalBorder = 100.0f; const float standardVerticalBorder = 100.0f;
const float standardHorizontalBorder = 100.0f; const float standardHorizontalBorder = 100.0f;
GuiWindowRoot = new C4GuiWindow(standardVerticalBorder, standardHorizontalBorder); ScriptGuiRoot = new C4ScriptGuiWindow(standardVerticalBorder, standardHorizontalBorder);
pGUI->AddElement(GuiWindowRoot); pGUI->AddElement(ScriptGuiRoot);
return true; return true;
} }

View File

@ -26,7 +26,7 @@
#include "C4Scoreboard.h" #include "C4Scoreboard.h"
#include <C4PlayerControl.h> #include <C4PlayerControl.h>
class C4GuiWindow; class C4ScriptGuiWindow;
class C4Game class C4Game
{ {
@ -227,7 +227,7 @@ public:
bool InitPlayerControlSettings(); bool InitPlayerControlSettings();
bool InitPlayerControlUserSettings(); // merge player control default settings and config overloads into user setting bool InitPlayerControlUserSettings(); // merge player control default settings and config overloads into user setting
C4GuiWindow *GuiWindowRoot; C4ScriptGuiWindow *ScriptGuiRoot;
protected: protected:
void Default(); void Default();
void InitInEarth(); void InitInEarth();

View File

@ -30,7 +30,7 @@
#include <C4MouseControl.h> #include <C4MouseControl.h>
#include <C4PXS.h> #include <C4PXS.h>
#include <C4GameMessage.h> #include <C4GameMessage.h>
#include <C4GuiWindow.h> #include <C4ScriptGuiWindow.h>
#include <C4GraphicsResource.h> #include <C4GraphicsResource.h>
#include <C4GraphicsSystem.h> #include <C4GraphicsSystem.h>
#include <C4Landscape.h> #include <C4Landscape.h>
@ -297,7 +297,7 @@ void C4Viewport::Draw(C4TargetFacet &cgo0, bool fDrawOverlay)
// ingame menus // ingame menus
C4ST_STARTNEW(GuiWindowStat, "C4Viewport::DrawOverlay: Menus") C4ST_STARTNEW(GuiWindowStat, "C4Viewport::DrawOverlay: Menus")
pDraw->SetZoom(0, 0, 1.0); pDraw->SetZoom(0, 0, 1.0);
::Game.GuiWindowRoot->DrawAll(gui_cgo, Player); ::Game.ScriptGuiRoot->DrawAll(gui_cgo, Player);
C4ST_STOP(GuiWindowStat) C4ST_STOP(GuiWindowStat)
DrawOverlay(gui_cgo, GameZoom); DrawOverlay(gui_cgo, GameZoom);

View File

@ -32,7 +32,7 @@
#include <C4GraphicsSystem.h> #include <C4GraphicsSystem.h>
#include <C4Log.h> #include <C4Log.h>
#include <C4MessageInput.h> #include <C4MessageInput.h>
#include <C4GuiWindow.h> #include <C4ScriptGuiWindow.h>
#include <C4MouseControl.h> #include <C4MouseControl.h>
#include <C4ObjectInfoList.h> #include <C4ObjectInfoList.h>
#include <C4Player.h> #include <C4Player.h>
@ -2330,26 +2330,26 @@ static bool FnCustomMessage(C4PropList * _this, C4String *pMsg, C4Object *pObj,
static int FnGuiOpen(C4PropList * _this, C4PropList *menu) static int FnGuiOpen(C4PropList * _this, C4PropList *menu)
{ {
C4GuiWindow *window = new C4GuiWindow; C4ScriptGuiWindow *window = new C4ScriptGuiWindow;
::Game.GuiWindowRoot->AddChild(window); ::Game.ScriptGuiRoot->AddChild(window);
if (!window->CreateFromPropList(menu, true)) if (!window->CreateFromPropList(menu, true))
{ {
::Game.GuiWindowRoot->RemoveChild(window, false); ::Game.ScriptGuiRoot->RemoveChild(window, false);
return 0; return 0;
} }
return window->GetID(); return window->GetID();
} }
static bool FnGuiUpdateTag(C4PropList * _this, C4String *tag, int32_t menuID, int32_t childID, C4Object *target) static bool FnGuiUpdateTag(C4PropList * _this, C4String *tag, int32_t guiID, int32_t childID, C4Object *target)
{ {
C4GuiWindow *window = ::Game.GuiWindowRoot->GetChildByID(menuID); C4ScriptGuiWindow *window = ::Game.ScriptGuiRoot->GetChildByID(guiID);
if (!window) return false; if (!window) return false;
if (childID) // note: valid child IDs are always non-zero if (childID) // note: valid child IDs are always non-zero
{ {
C4GuiWindow *subwindow = window->GetSubWindow(childID, target); C4ScriptGuiWindow *subwindow = window->GetSubWindow(childID, target);
if (!subwindow) return false; if (!subwindow) return false;
subwindow->SetTag(tag); subwindow->SetTag(tag);
return true; return true;
@ -2358,13 +2358,13 @@ static bool FnGuiUpdateTag(C4PropList * _this, C4String *tag, int32_t menuID, in
return true; return true;
} }
static bool FnGuiClose(C4PropList *_this, int32_t menuID, int32_t childID, C4Object *target) static bool FnGuiClose(C4PropList *_this, int32_t guiID, int32_t childID, C4Object *target)
{ {
C4GuiWindow *window = ::Game.GuiWindowRoot->GetChildByID(menuID); C4ScriptGuiWindow *window = ::Game.ScriptGuiRoot->GetChildByID(guiID);
if (!window) return false; if (!window) return false;
if (childID) // note: valid child IDs are always non-zero if (childID) // note: valid child IDs are always non-zero
{ {
C4GuiWindow *subwindow = window->GetSubWindow(childID, target); C4ScriptGuiWindow *subwindow = window->GetSubWindow(childID, target);
if (!subwindow) return false; if (!subwindow) return false;
subwindow->Close(); subwindow->Close();
return true; return true;
@ -2373,14 +2373,14 @@ static bool FnGuiClose(C4PropList *_this, int32_t menuID, int32_t childID, C4Obj
return true; return true;
} }
static bool FxGuiUpdate(C4PropList *_this, C4PropList *update, int32_t menuID, int32_t childID, C4Object *target) static bool FxGuiUpdate(C4PropList *_this, C4PropList *update, int32_t guiID, int32_t childID, C4Object *target)
{ {
if (!update) return false; if (!update) return false;
C4GuiWindow *window = ::Game.GuiWindowRoot->GetChildByID(menuID); C4ScriptGuiWindow *window = ::Game.ScriptGuiRoot->GetChildByID(guiID);
if (!window) return false; if (!window) return false;
if (childID) // note: valid child IDs are always non-zero if (childID) // note: valid child IDs are always non-zero
{ {
C4GuiWindow *subwindow = window->GetSubWindow(childID, target); C4ScriptGuiWindow *subwindow = window->GetSubWindow(childID, target);
if (!subwindow) return false; if (!subwindow) return false;
subwindow->CreateFromPropList(update, false, true); subwindow->CreateFromPropList(update, false, true);
return true; return true;
@ -2891,20 +2891,20 @@ C4ScriptConstDef C4ScriptGameConstMap[]=
{ "ATTACH_Back" ,C4V_Int, C4ATTACH_Back }, { "ATTACH_Back" ,C4V_Int, C4ATTACH_Back },
{ "ATTACH_MoveRelative" ,C4V_Int, C4ATTACH_MoveRelative }, { "ATTACH_MoveRelative" ,C4V_Int, C4ATTACH_MoveRelative },
{ "GUI_SetTag" ,C4V_Int, C4GuiWindowActionID::SetTag }, { "GUI_SetTag" ,C4V_Int, C4ScriptGuiWindowActionID::SetTag },
{ "GUI_Call" ,C4V_Int, C4GuiWindowActionID::Call }, { "GUI_Call" ,C4V_Int, C4ScriptGuiWindowActionID::Call },
{ "GUI_GridLayout" ,C4V_Int, C4GuiWindowStyleFlag::GridLayout }, { "GUI_GridLayout" ,C4V_Int, C4ScriptGuiWindowStyleFlag::GridLayout },
{ "GUI_VerticalLayout" ,C4V_Int, C4GuiWindowStyleFlag::VerticalLayout }, { "GUI_VerticalLayout" ,C4V_Int, C4ScriptGuiWindowStyleFlag::VerticalLayout },
{ "GUI_TextVCenter" ,C4V_Int, C4GuiWindowStyleFlag::TextVCenter }, { "GUI_TextVCenter" ,C4V_Int, C4ScriptGuiWindowStyleFlag::TextVCenter },
{ "GUI_TextHCenter" ,C4V_Int, C4GuiWindowStyleFlag::TextHCenter }, { "GUI_TextHCenter" ,C4V_Int, C4ScriptGuiWindowStyleFlag::TextHCenter },
{ "GUI_TextRight" ,C4V_Int, C4GuiWindowStyleFlag::TextRight }, { "GUI_TextRight" ,C4V_Int, C4ScriptGuiWindowStyleFlag::TextRight },
{ "GUI_TextBottom" ,C4V_Int, C4GuiWindowStyleFlag::TextBottom }, { "GUI_TextBottom" ,C4V_Int, C4ScriptGuiWindowStyleFlag::TextBottom },
{ "GUI_TextTop" ,C4V_Int, C4GuiWindowStyleFlag::None }, // note that top and left are considered default { "GUI_TextTop" ,C4V_Int, C4ScriptGuiWindowStyleFlag::None }, // note that top and left are considered default
{ "GUI_TextLeft" ,C4V_Int, C4GuiWindowStyleFlag::None }, // they are only included for completeness { "GUI_TextLeft" ,C4V_Int, C4ScriptGuiWindowStyleFlag::None }, // they are only included for completeness
{ "GUI_FitChildren" ,C4V_Int, C4GuiWindowStyleFlag::FitChildren }, { "GUI_FitChildren" ,C4V_Int, C4ScriptGuiWindowStyleFlag::FitChildren },
{ "GUI_Multiple" ,C4V_Int, C4GuiWindowStyleFlag::Multiple }, { "GUI_Multiple" ,C4V_Int, C4ScriptGuiWindowStyleFlag::Multiple },
{ "GUI_IgnoreMouse" ,C4V_Int, C4GuiWindowStyleFlag::IgnoreMouse }, { "GUI_IgnoreMouse" ,C4V_Int, C4ScriptGuiWindowStyleFlag::IgnoreMouse },
{ "GUI_NoCrop" ,C4V_Int, C4GuiWindowStyleFlag::NoCrop }, { "GUI_NoCrop" ,C4V_Int, C4ScriptGuiWindowStyleFlag::NoCrop },
{ NULL, C4V_Nil, 0} { NULL, C4V_Nil, 0}
}; };

View File

@ -910,7 +910,7 @@ namespace C4GUI
void SetScrollPos(int32_t iToPos) { iScrollPos = iToPos * GetMaxScroll() / (iCBMaxRange-1); } void SetScrollPos(int32_t iToPos) { iScrollPos = iToPos * GetMaxScroll() / (iCBMaxRange-1); }
friend class ScrollWindow; friend class ScrollWindow;
friend class C4GuiWindow; friend class C4ScriptGuiWindow;
}; };
// a window that can be scrolled // a window that can be scrolled

View File

@ -36,7 +36,7 @@
#include <C4PlayerList.h> #include <C4PlayerList.h>
#include <C4GameObjects.h> #include <C4GameObjects.h>
#include <C4GameControl.h> #include <C4GameControl.h>
#include <C4GuiWindow.h> #include <C4ScriptGuiWindow.h>
const int32_t C4MC_Drag_None = 0, const int32_t C4MC_Drag_None = 0,
C4MC_Drag_Script = 6, C4MC_Drag_Script = 6,
@ -320,7 +320,7 @@ void C4MouseControl::Move(int32_t iButton, int32_t iX, int32_t iY, DWORD dwKeyFl
bool menuProcessed = false; bool menuProcessed = false;
if (pPlayer) if (pPlayer)
// adjust by viewport X/Y because the GUI windows calculate their positions (and thus check input) based on that // adjust by viewport X/Y because the GUI windows calculate their positions (and thus check input) based on that
menuProcessed = ::Game.GuiWindowRoot->MouseInput(iButton, iX, iY, dwKeyFlags); menuProcessed = ::Game.ScriptGuiRoot->MouseInput(iButton, iX, iY, dwKeyFlags);
if (menuProcessed) if (menuProcessed)
Cursor = C4MC_Cursor_Select; Cursor = C4MC_Cursor_Select;

File diff suppressed because it is too large Load Diff

View File

@ -17,8 +17,8 @@
/* a flexisble ingame menu system that can be composed out of multiple windows */ /* a flexisble ingame menu system that can be composed out of multiple windows */
#ifndef INC_C4GuiWindow #ifndef INC_C4ScriptGuiWindow
#define INC_C4GuiWindow #define INC_C4ScriptGuiWindow
#include <C4Surface.h> #include <C4Surface.h>
#include <C4Gui.h> #include <C4Gui.h>
@ -27,7 +27,7 @@
#include <map> #include <map>
enum C4GuiWindowPropertyName enum C4ScriptGuiWindowPropertyName
{ {
left = 0, left = 0,
top, top,
@ -65,13 +65,13 @@ enum C4GuiWindowPropertyName
_lastProp _lastProp
}; };
enum C4GuiWindowActionID enum C4ScriptGuiWindowActionID
{ {
SetTag = 1, SetTag = 1,
Call, Call,
}; };
enum C4GuiWindowStyleFlag enum C4ScriptGuiWindowStyleFlag
{ {
None = 0, None = 0,
GridLayout = 1, GridLayout = 1,
@ -86,18 +86,18 @@ enum C4GuiWindowStyleFlag
NoCrop = 512 NoCrop = 512
}; };
class C4GuiWindow; class C4ScriptGuiWindow;
class C4GuiWindowAction class C4ScriptGuiWindowAction
{ {
friend class C4GuiWindow; friend class C4ScriptGuiWindow;
private: private:
// the ID is unique among all actions. It is used later to synchronize callbacks // the ID is unique among all actions. It is used later to synchronize callbacks
int32_t id; int32_t id;
int32_t action; int32_t action;
C4GuiWindowAction *nextAction; // a linked list of actions C4ScriptGuiWindowAction *nextAction; // a linked list of actions
// note: depending on the action not all of the following attributes always have values // note: depending on the action not all of the following attributes always have values
C4PropList *target; // contains a valid C4Object in case of SetTag, a generic proplist in case of Call C4PropList *target; // contains a valid C4Object in case of SetTag, a generic proplist in case of Call
C4String *text; // can be either a function name to call or a tag to set C4String *text; // can be either a function name to call or a tag to set
@ -105,22 +105,22 @@ class C4GuiWindowAction
int32_t subwindowID; int32_t subwindowID;
public: public:
C4GuiWindowAction() : id(0), action(0), nextAction(0), target(0), text(0), value(0), subwindowID(0) { } C4ScriptGuiWindowAction() : id(0), action(0), nextAction(0), target(0), text(0), value(0), subwindowID(0) { }
~C4GuiWindowAction(); ~C4ScriptGuiWindowAction();
void ClearPointers(C4Object *pObj); void ClearPointers(C4Object *pObj);
bool Init(C4ValueArray *array, int32_t index = 0); // index is the current action in an array of actions bool Init(C4ValueArray *array, int32_t index = 0); // index is the current action in an array of actions
// executes non-synced actions and syncs the others // executes non-synced actions and syncs the others
// the action type parameters is only used to be able to sync commands // the action type parameters is only used to be able to sync commands
void Execute(C4GuiWindow *parent, int32_t player, int32_t actionType); void Execute(C4ScriptGuiWindow *parent, int32_t player, int32_t actionType);
// used to execute synced commands, explanation see C4GuiWindow::ExecuteCommand // used to execute synced commands, explanation see C4ScriptGuiWindow::ExecuteCommand
bool ExecuteCommand(int32_t actionID, C4GuiWindow *parent, int32_t player); bool ExecuteCommand(int32_t actionID, C4ScriptGuiWindow *parent, int32_t player);
// used for serialization. The "first" parameter is used so that chained actions are stored correctly into an array // used for serialization. The "first" parameter is used so that chained actions are stored correctly into an array
const C4Value ToC4Value(bool first = true); const C4Value ToC4Value(bool first = true);
}; };
class C4GuiWindowProperty class C4ScriptGuiWindowProperty
{ {
friend class C4GuiWindow; friend class C4ScriptGuiWindow;
private: private:
typedef union typedef union
@ -132,7 +132,7 @@ class C4GuiWindowProperty
C4Def *def; C4Def *def;
C4GUI::FrameDecoration *deco; C4GUI::FrameDecoration *deco;
StdCopyStrBuf *strBuf; StdCopyStrBuf *strBuf;
C4GuiWindowAction *action; C4ScriptGuiWindowAction *action;
} Prop; } Prop;
Prop *current; Prop *current;
@ -152,8 +152,8 @@ class C4GuiWindowProperty
void SetNull(C4String *tag = 0); void SetNull(C4String *tag = 0);
public: public:
~C4GuiWindowProperty(); ~C4ScriptGuiWindowProperty();
C4GuiWindowProperty() : current(0), currentTag(0), type(-1) {} C4ScriptGuiWindowProperty() : current(0), currentTag(0), type(-1) {}
void Set(const C4Value &value, C4String *tag); void Set(const C4Value &value, C4String *tag);
int32_t GetInt() { return current->d; } int32_t GetInt() { return current->d; }
@ -162,8 +162,8 @@ class C4GuiWindowProperty
C4Def *GetDef() { return current->def; } C4Def *GetDef() { return current->def; }
C4GUI::FrameDecoration *GetFrameDecoration() { return current->deco; } C4GUI::FrameDecoration *GetFrameDecoration() { return current->deco; }
StdCopyStrBuf *GetStrBuf() { return current->strBuf; } StdCopyStrBuf *GetStrBuf() { return current->strBuf; }
C4GuiWindowAction *GetAction() { return current->action; } C4ScriptGuiWindowAction *GetAction() { return current->action; }
std::list<C4GuiWindowAction*> GetAllActions(); // used to synchronize actions std::list<C4ScriptGuiWindowAction*> GetAllActions(); // used to synchronize actions
bool SwitchTag(C4String *tag); bool SwitchTag(C4String *tag);
C4String *GetCurrentTag() { return currentTag; } C4String *GetCurrentTag() { return currentTag; }
@ -173,10 +173,10 @@ class C4GuiWindowProperty
void ClearPointers(C4Object *pObj); void ClearPointers(C4Object *pObj);
}; };
class C4GuiWindow : public C4GUI::ScrollWindow class C4ScriptGuiWindow : public C4GUI::ScrollWindow
{ {
friend class C4GuiWindowAction; friend class C4ScriptGuiWindowAction;
friend class C4GuiWindowScrollBar; friend class C4ScriptGuiWindowScrollBar;
private: private:
// the "main" menu ID is always unique, however the sub-menu IDs do NOT have to be unique // the "main" menu ID is always unique, however the sub-menu IDs do NOT have to be unique
@ -202,20 +202,20 @@ class C4GuiWindow : public C4GUI::ScrollWindow
const C4Object *GetTarget() { return target; } const C4Object *GetTarget() { return target; }
// properties are stored extra to make "tags" possible // properties are stored extra to make "tags" possible
C4GuiWindowProperty props[C4GuiWindowPropertyName::_lastProp]; C4ScriptGuiWindowProperty props[C4ScriptGuiWindowPropertyName::_lastProp];
void Init(); void Init();
// ID is set by parent, parent gives unique IDs to children // ID is set by parent, parent gives unique IDs to children
void SetID(int32_t to) { id = to; } void SetID(int32_t to) { id = to; }
// to be used to generate the quick-access children map for main menus // to be used to generate the quick-access children map for main menus
void ChildGotID(C4GuiWindow *child); void ChildGotID(C4ScriptGuiWindow *child);
void ChildWithIDRemoved(C4GuiWindow *child); void ChildWithIDRemoved(C4ScriptGuiWindow *child);
std::multimap<int32_t, C4GuiWindow *> childrenIDMap; std::multimap<int32_t, C4ScriptGuiWindow *> childrenIDMap;
// should be called when the Priority property of a child changes // should be called when the Priority property of a child changes
// will sort the child correctly into the children list // will sort the child correctly into the children list
void ChildChangedPriority(C4GuiWindow *child); void ChildChangedPriority(C4ScriptGuiWindow *child);
// helper function to extract relative and absolute position values from a string // helper function to extract relative and absolute position values from a string
void SetPositionStringProperties(const C4Value &property, C4GuiWindowPropertyName relative, C4GuiWindowPropertyName absolute, C4String *tag); void SetPositionStringProperties(const C4Value &property, C4ScriptGuiWindowPropertyName relative, C4ScriptGuiWindowPropertyName absolute, C4String *tag);
C4Value PositionToC4Value(C4GuiWindowPropertyName relative, C4GuiWindowPropertyName absolute); C4Value PositionToC4Value(C4ScriptGuiWindowPropertyName relative, C4ScriptGuiWindowPropertyName absolute);
// sets all margins either from a string or from an array // sets all margins either from a string or from an array
void SetMarginProperties(const C4Value &property, C4String *tag); void SetMarginProperties(const C4Value &property, C4String *tag);
C4Value MarginsToC4Value(); C4Value MarginsToC4Value();
@ -244,19 +244,19 @@ class C4GuiWindow : public C4GUI::ScrollWindow
void SetTag(C4String *tag); void SetTag(C4String *tag);
C4GuiWindow(); C4ScriptGuiWindow();
C4GuiWindow(float stdBorderX, float stdBorderY); C4ScriptGuiWindow(float stdBorderX, float stdBorderY);
virtual ~C4GuiWindow(); virtual ~C4ScriptGuiWindow();
int32_t GetID() { return id; } int32_t GetID() { return id; }
// finds a child with a certain ID, usually called on ::MainWindowRoot to get submenus // finds a child with a certain ID, usually called on ::MainWindowRoot to get submenus
C4GuiWindow *GetChildByID(int32_t child); C4ScriptGuiWindow *GetChildByID(int32_t child);
// finds a child by name, usually called when updating a window with a new proplist // finds a child by name, usually called when updating a window with a new proplist
C4GuiWindow *GetChildByName(C4String *childName); C4ScriptGuiWindow *GetChildByName(C4String *childName);
// finds any fitting sub menu - not necessarily direct child // finds any fitting sub menu - not necessarily direct child
// has to be called on children of ::MainWindowRoot, uses the childrenIDMap // has to be called on children of ::MainWindowRoot, uses the childrenIDMap
// note: always checks the target to avoid ambiguities, even if 0 // note: always checks the target to avoid ambiguities, even if 0
C4GuiWindow *GetSubWindow(int32_t childID, C4Object *childTarget); C4ScriptGuiWindow *GetSubWindow(int32_t childID, C4Object *childTarget);
@ -268,12 +268,12 @@ class C4GuiWindow : public C4GUI::ScrollWindow
// constructs a C4Value (proplist) that contains everything that is needed for saving this window // constructs a C4Value (proplist) that contains everything that is needed for saving this window
const C4Value ToC4Value(); const C4Value ToC4Value();
// C4GuiWindow will delete its children on close. Make sure you don't delete anything twice // C4ScriptGuiWindow will delete its children on close. Make sure you don't delete anything twice
C4GuiWindow *AddChild(C4GuiWindow *child); C4ScriptGuiWindow *AddChild(C4ScriptGuiWindow *child);
C4GuiWindow *AddChild() { return AddChild(new C4GuiWindow()); } C4ScriptGuiWindow *AddChild() { return AddChild(new C4ScriptGuiWindow()); }
void ClearChildren(bool close = true); // close: whether to properly "Close" them, alias for RemoveChild void ClearChildren(bool close = true); // close: whether to properly "Close" them, alias for RemoveChild
void RemoveChild(C4GuiWindow *child, bool close = true, bool all = false); // child = 0 & all = true to clear all void RemoveChild(C4ScriptGuiWindow *child, bool close = true, bool all = false); // child = 0 & all = true to clear all
void Close(); void Close();
void ClearPointers(C4Object *pObj); void ClearPointers(C4Object *pObj);