Skip to content

Commit

Permalink
xrGame/UIHelper: don't crash on non-critical element
Browse files Browse the repository at this point in the history
  • Loading branch information
Xottab-DUTY committed Oct 17, 2018
1 parent b3698c1 commit 20c9be3
Show file tree
Hide file tree
Showing 2 changed files with 66 additions and 22 deletions.
66 changes: 55 additions & 11 deletions src/xrGame/ui/UIHelper.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -18,8 +18,12 @@
#include "UIDragDropReferenceList.h"
#include "xrUICore/EditBox/UIEditBox.h"

CUIStatic* UIHelper::CreateStatic(CUIXml& xml, LPCSTR ui_path, CUIWindow* parent)
CUIStatic* UIHelper::CreateStatic(CUIXml& xml, LPCSTR ui_path, CUIWindow* parent, bool critical)
{
// If it's not critical element, then don't crash if it doesn't exist
if (!critical && !xml.NavigateToNode(ui_path, 0))
return nullptr;

auto ui = new CUIStatic();
if (parent)
{
Expand All @@ -30,8 +34,12 @@ CUIStatic* UIHelper::CreateStatic(CUIXml& xml, LPCSTR ui_path, CUIWindow* parent
return ui;
}

CUITextWnd* UIHelper::CreateTextWnd(CUIXml& xml, LPCSTR ui_path, CUIWindow* parent)
CUITextWnd* UIHelper::CreateTextWnd(CUIXml& xml, LPCSTR ui_path, CUIWindow* parent, bool critical)
{
// If it's not critical element, then don't crash if it doesn't exist
if (!critical && !xml.NavigateToNode(ui_path, 0))
return nullptr;

auto ui = new CUITextWnd();
if (parent)
{
Expand All @@ -42,8 +50,12 @@ CUITextWnd* UIHelper::CreateTextWnd(CUIXml& xml, LPCSTR ui_path, CUIWindow* pare
return ui;
}

CUIEditBox* UIHelper::CreateEditBox(CUIXml& xml, LPCSTR ui_path, CUIWindow* parent)
CUIEditBox* UIHelper::CreateEditBox(CUIXml& xml, LPCSTR ui_path, CUIWindow* parent, bool critical)
{
// If it's not critical element, then don't crash if it doesn't exist
if (!critical && !xml.NavigateToNode(ui_path, 0))
return nullptr;

auto ui = new CUIEditBox();
if (parent)
{
Expand All @@ -54,17 +66,25 @@ CUIEditBox* UIHelper::CreateEditBox(CUIXml& xml, LPCSTR ui_path, CUIWindow* pare
return ui;
}

CUIProgressBar* UIHelper::CreateProgressBar(CUIXml& xml, LPCSTR ui_path, CUIWindow* parent)
CUIProgressBar* UIHelper::CreateProgressBar(CUIXml& xml, LPCSTR ui_path, CUIWindow* parent, bool critical)
{
// If it's not critical element, then don't crash if it doesn't exist
if (!critical && !xml.NavigateToNode(ui_path, 0))
return nullptr;

auto ui = new CUIProgressBar();
parent->AttachChild(ui);
ui->SetAutoDelete(true);
CUIXmlInit::InitProgressBar(xml, ui_path, 0, ui);
return ui;
}

CUIFrameLineWnd* UIHelper::CreateFrameLine(CUIXml& xml, LPCSTR ui_path, CUIWindow* parent)
CUIFrameLineWnd* UIHelper::CreateFrameLine(CUIXml& xml, LPCSTR ui_path, CUIWindow* parent, bool critical)
{
// If it's not critical element, then don't crash if it doesn't exist
if (!critical && !xml.NavigateToNode(ui_path, 0))
return nullptr;

auto ui = new CUIFrameLineWnd();
if (parent)
{
Expand All @@ -75,8 +95,12 @@ CUIFrameLineWnd* UIHelper::CreateFrameLine(CUIXml& xml, LPCSTR ui_path, CUIWindo
return ui;
}

CUIFrameWindow* UIHelper::CreateFrameWindow(CUIXml& xml, LPCSTR ui_path, CUIWindow* parent)
CUIFrameWindow* UIHelper::CreateFrameWindow(CUIXml& xml, LPCSTR ui_path, CUIWindow* parent, bool critical)
{
// If it's not critical element, then don't crash if it doesn't exist
if (!critical && !xml.NavigateToNode(ui_path, 0))
return nullptr;

auto ui = new CUIFrameWindow();
if (parent)
{
Expand All @@ -87,43 +111,63 @@ CUIFrameWindow* UIHelper::CreateFrameWindow(CUIXml& xml, LPCSTR ui_path, CUIWind
return ui;
}

CUI3tButton* UIHelper::Create3tButton(CUIXml& xml, LPCSTR ui_path, CUIWindow* parent)
CUI3tButton* UIHelper::Create3tButton(CUIXml& xml, LPCSTR ui_path, CUIWindow* parent, bool critical)
{
// If it's not critical element, then don't crash if it doesn't exist
if (!critical && !xml.NavigateToNode(ui_path, 0))
return nullptr;

auto ui = new CUI3tButton();
parent->AttachChild(ui);
ui->SetAutoDelete(true);
CUIXmlInit::Init3tButton(xml, ui_path, 0, ui);
return ui;
}

CUICheckButton* UIHelper::CreateCheck(CUIXml& xml, LPCSTR ui_path, CUIWindow* parent)
CUICheckButton* UIHelper::CreateCheck(CUIXml& xml, LPCSTR ui_path, CUIWindow* parent, bool critical)
{
// If it's not critical element, then don't crash if it doesn't exist
if (!critical && !xml.NavigateToNode(ui_path, 0))
return nullptr;

auto ui = new CUICheckButton();
parent->AttachChild(ui);
ui->SetAutoDelete(true);
CUIXmlInit::InitCheck(xml, ui_path, 0, ui);
return ui;
}

UIHint* UIHelper::CreateHint(CUIXml& xml, LPCSTR ui_path)
UIHint* UIHelper::CreateHint(CUIXml& xml, LPCSTR ui_path /*, CUIWindow* parent*/, bool critical)
{
// If it's not critical element, then don't crash if it doesn't exist
if (!critical && !xml.NavigateToNode(ui_path, 0))
return nullptr;

auto ui = new UIHint();
ui->SetAutoDelete(true);
ui->init_from_xml(xml, ui_path);
return ui;
}

CUIDragDropListEx* UIHelper::CreateDragDropListEx(CUIXml& xml, LPCSTR ui_path, CUIWindow* parent)
CUIDragDropListEx* UIHelper::CreateDragDropListEx(CUIXml& xml, LPCSTR ui_path, CUIWindow* parent, bool critical)
{
// If it's not critical element, then don't crash if it doesn't exist
if (!critical && !xml.NavigateToNode(ui_path, 0))
return nullptr;

auto ui = new CUIDragDropListEx();
parent->AttachChild(ui);
ui->SetAutoDelete(true);
CUIXmlInit::InitDragDropListEx(xml, ui_path, 0, ui);
return ui;
}

CUIDragDropReferenceList* UIHelper::CreateDragDropReferenceList(CUIXml& xml, LPCSTR ui_path, CUIWindow* parent)
CUIDragDropReferenceList* UIHelper::CreateDragDropReferenceList(CUIXml& xml, LPCSTR ui_path, CUIWindow* parent, bool critical)
{
// If it's not critical element, then don't crash if it doesn't exist
if (!critical && !xml.NavigateToNode(ui_path, 0))
return nullptr;

auto ui = new CUIDragDropReferenceList();
parent->AttachChild(ui);
ui->SetAutoDelete(true);
Expand Down
22 changes: 11 additions & 11 deletions src/xrGame/ui/UIHelper.h
Original file line number Diff line number Diff line change
Expand Up @@ -28,18 +28,18 @@ class UIHelper
UIHelper(){};
~UIHelper(){};

static CUIStatic* CreateStatic(CUIXml& xml, LPCSTR ui_path, CUIWindow* parent);
static CUITextWnd* CreateTextWnd(CUIXml& xml, LPCSTR ui_path, CUIWindow* parent);
static CUIProgressBar* CreateProgressBar(CUIXml& xml, LPCSTR ui_path, CUIWindow* parent);
static CUIFrameLineWnd* CreateFrameLine(CUIXml& xml, LPCSTR ui_path, CUIWindow* parent);
static CUIFrameWindow* CreateFrameWindow(CUIXml& xml, LPCSTR ui_path, CUIWindow* parent);
static CUI3tButton* Create3tButton(CUIXml& xml, LPCSTR ui_path, CUIWindow* parent);
static CUICheckButton* CreateCheck(CUIXml& xml, LPCSTR ui_path, CUIWindow* parent);
static CUIEditBox* CreateEditBox(CUIXml& xml, LPCSTR ui_path, CUIWindow* parent);
static CUIStatic* CreateStatic(CUIXml& xml, LPCSTR ui_path, CUIWindow* parent, bool critical = true);
static CUITextWnd* CreateTextWnd(CUIXml& xml, LPCSTR ui_path, CUIWindow* parent, bool critical = true);
static CUIProgressBar* CreateProgressBar(CUIXml& xml, LPCSTR ui_path, CUIWindow* parent, bool critical = true);
static CUIFrameLineWnd* CreateFrameLine(CUIXml& xml, LPCSTR ui_path, CUIWindow* parent, bool critical = true);
static CUIFrameWindow* CreateFrameWindow(CUIXml& xml, LPCSTR ui_path, CUIWindow* parent, bool critical = true);
static CUI3tButton* Create3tButton(CUIXml& xml, LPCSTR ui_path, CUIWindow* parent, bool critical = true);
static CUICheckButton* CreateCheck(CUIXml& xml, LPCSTR ui_path, CUIWindow* parent, bool critical = true);
static CUIEditBox* CreateEditBox(CUIXml& xml, LPCSTR ui_path, CUIWindow* parent, bool critical = true);

static UIHint* CreateHint(CUIXml& xml, LPCSTR ui_path /*, CUIWindow* parent*/);
static CUIDragDropListEx* CreateDragDropListEx(CUIXml& xml, LPCSTR ui_path, CUIWindow* parent);
static CUIDragDropReferenceList* CreateDragDropReferenceList(CUIXml& xml, LPCSTR ui_path, CUIWindow* parent);
static UIHint* CreateHint(CUIXml& xml, LPCSTR ui_path /*, CUIWindow* parent*/, bool critical = true);
static CUIDragDropListEx* CreateDragDropListEx(CUIXml& xml, LPCSTR ui_path, CUIWindow* parent, bool critical = true);
static CUIDragDropReferenceList* CreateDragDropReferenceList(CUIXml& xml, LPCSTR ui_path, CUIWindow* parent, bool critical = true);

}; // class UIHelper

Expand Down

0 comments on commit 20c9be3

Please sign in to comment.