Properly delete all GUIObjects and pages on theme reload
Signed-off-by: Vojtech Bocek <vbocek@gmail.com> Change-Id: I8df41877f8f4439a434becfd47a9914b50649b34
This commit is contained in:
@@ -216,7 +216,6 @@ GUIInput::~GUIInput()
|
||||
if (mInputText) delete mInputText;
|
||||
if (mBackground) delete mBackground;
|
||||
if (mCursor) delete mCursor;
|
||||
if (mFont) delete mFont;
|
||||
if (mAction) delete mAction;
|
||||
}
|
||||
|
||||
|
||||
@@ -304,10 +304,7 @@ GUIKeyboard::GUIKeyboard(xml_node<>* node)
|
||||
|
||||
GUIKeyboard::~GUIKeyboard()
|
||||
{
|
||||
int layoutindex;
|
||||
|
||||
for (layoutindex=0; layoutindex<MAX_KEYBOARD_LAYOUTS; layoutindex++)
|
||||
if (keyboardImg[layoutindex]) delete keyboardImg[layoutindex];
|
||||
}
|
||||
|
||||
int GUIKeyboard::Render(void)
|
||||
|
||||
@@ -193,6 +193,12 @@ Page::Page(xml_node<>* page, xml_node<>* templates /* = NULL */)
|
||||
return;
|
||||
}
|
||||
|
||||
Page::~Page()
|
||||
{
|
||||
for (std::vector<GUIObject*>::iterator itr = mObjects.begin(); itr != mObjects.end(); ++itr)
|
||||
delete *itr;
|
||||
}
|
||||
|
||||
bool Page::ProcessNode(xml_node<>* page, xml_node<>* templates /* = NULL */, int depth /* = 0 */)
|
||||
{
|
||||
if (depth == 10)
|
||||
@@ -225,86 +231,101 @@ bool Page::ProcessNode(xml_node<>* page, xml_node<>* templates /* = NULL */, int
|
||||
if (type == "text")
|
||||
{
|
||||
GUIText* element = new GUIText(child);
|
||||
mObjects.push_back(element);
|
||||
mRenders.push_back(element);
|
||||
mActions.push_back(element);
|
||||
}
|
||||
else if (type == "image")
|
||||
{
|
||||
GUIImage* element = new GUIImage(child);
|
||||
mObjects.push_back(element);
|
||||
mRenders.push_back(element);
|
||||
}
|
||||
else if (type == "fill")
|
||||
{
|
||||
GUIFill* element = new GUIFill(child);
|
||||
mObjects.push_back(element);
|
||||
mRenders.push_back(element);
|
||||
}
|
||||
else if (type == "action")
|
||||
{
|
||||
GUIAction* element = new GUIAction(child);
|
||||
mObjects.push_back(element);
|
||||
mActions.push_back(element);
|
||||
}
|
||||
else if (type == "console")
|
||||
{
|
||||
GUIConsole* element = new GUIConsole(child);
|
||||
mObjects.push_back(element);
|
||||
mRenders.push_back(element);
|
||||
mActions.push_back(element);
|
||||
}
|
||||
else if (type == "button")
|
||||
{
|
||||
GUIButton* element = new GUIButton(child);
|
||||
mObjects.push_back(element);
|
||||
mRenders.push_back(element);
|
||||
mActions.push_back(element);
|
||||
}
|
||||
else if (type == "checkbox")
|
||||
{
|
||||
GUICheckbox* element = new GUICheckbox(child);
|
||||
mObjects.push_back(element);
|
||||
mRenders.push_back(element);
|
||||
mActions.push_back(element);
|
||||
}
|
||||
else if (type == "fileselector")
|
||||
{
|
||||
GUIFileSelector* element = new GUIFileSelector(child);
|
||||
mObjects.push_back(element);
|
||||
mRenders.push_back(element);
|
||||
mActions.push_back(element);
|
||||
}
|
||||
else if (type == "animation")
|
||||
{
|
||||
GUIAnimation* element = new GUIAnimation(child);
|
||||
mObjects.push_back(element);
|
||||
mRenders.push_back(element);
|
||||
}
|
||||
else if (type == "progressbar")
|
||||
{
|
||||
GUIProgressBar* element = new GUIProgressBar(child);
|
||||
mObjects.push_back(element);
|
||||
mRenders.push_back(element);
|
||||
mActions.push_back(element);
|
||||
}
|
||||
else if (type == "slider")
|
||||
{
|
||||
GUISlider* element = new GUISlider(child);
|
||||
mObjects.push_back(element);
|
||||
mRenders.push_back(element);
|
||||
mActions.push_back(element);
|
||||
}
|
||||
else if (type == "slidervalue")
|
||||
{
|
||||
GUISliderValue *element = new GUISliderValue(child);
|
||||
mObjects.push_back(element);
|
||||
mRenders.push_back(element);
|
||||
mActions.push_back(element);
|
||||
}
|
||||
else if (type == "listbox")
|
||||
{
|
||||
GUIListBox* element = new GUIListBox(child);
|
||||
mObjects.push_back(element);
|
||||
mRenders.push_back(element);
|
||||
mActions.push_back(element);
|
||||
}
|
||||
else if (type == "keyboard")
|
||||
{
|
||||
GUIKeyboard* element = new GUIKeyboard(child);
|
||||
mObjects.push_back(element);
|
||||
mRenders.push_back(element);
|
||||
mActions.push_back(element);
|
||||
}
|
||||
else if (type == "input")
|
||||
{
|
||||
GUIInput* element = new GUIInput(child);
|
||||
mObjects.push_back(element);
|
||||
mRenders.push_back(element);
|
||||
mActions.push_back(element);
|
||||
mInputs.push_back(element);
|
||||
@@ -312,6 +333,7 @@ bool Page::ProcessNode(xml_node<>* page, xml_node<>* templates /* = NULL */, int
|
||||
else if (type == "partitionlist")
|
||||
{
|
||||
GUIPartitionList* element = new GUIPartitionList(child);
|
||||
mObjects.push_back(element);
|
||||
mRenders.push_back(element);
|
||||
mActions.push_back(element);
|
||||
}
|
||||
@@ -526,6 +548,9 @@ PageSet::PageSet(char* xmlFile)
|
||||
|
||||
PageSet::~PageSet()
|
||||
{
|
||||
for (std::vector<Page*>::iterator itr = mPages.begin(); itr != mPages.end(); ++itr)
|
||||
delete *itr;
|
||||
|
||||
delete mResources;
|
||||
free(mXmlFile);
|
||||
}
|
||||
@@ -869,6 +894,8 @@ int PageManager::ReloadPackage(std::string name, std::string package)
|
||||
}
|
||||
if (mCurrentSet == set)
|
||||
SelectPackage(name);
|
||||
if (mBaseSet == set)
|
||||
mBaseSet = mCurrentSet;
|
||||
delete set;
|
||||
return 0;
|
||||
}
|
||||
|
||||
+4
-3
@@ -29,14 +29,14 @@ class RenderObject;
|
||||
class ActionObject;
|
||||
class InputObject;
|
||||
class MouseCursor;
|
||||
class GUIObject;
|
||||
|
||||
class Page
|
||||
{
|
||||
public:
|
||||
virtual ~Page() {}
|
||||
|
||||
public:
|
||||
Page(xml_node<>* page, xml_node<>* templates = NULL);
|
||||
virtual ~Page();
|
||||
|
||||
std::string GetName(void) { return mName; }
|
||||
|
||||
public:
|
||||
@@ -51,6 +51,7 @@ public:
|
||||
|
||||
protected:
|
||||
std::string mName;
|
||||
std::vector<GUIObject*> mObjects;
|
||||
std::vector<RenderObject*> mRenders;
|
||||
std::vector<ActionObject*> mActions;
|
||||
std::vector<InputObject*> mInputs;
|
||||
|
||||
Reference in New Issue
Block a user