summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBjörn Steinbrink <B.Steinbrink@gmx.de>2005-10-18 21:41:46 +0000
committerBjörn Steinbrink <B.Steinbrink@gmx.de>2005-10-18 21:41:46 +0000
commit63da3e112326dfdb059148232e873e5856b11c54 (patch)
tree092f6d9f8549c7928d0ff44a7a17f4a2790de0be
parentaa6a0b7b75bc05e51805b6f377ca6278f1f58436 (diff)
downloadmana-63da3e112326dfdb059148232e873e5856b11c54.tar.gz
mana-63da3e112326dfdb059148232e873e5856b11c54.tar.bz2
mana-63da3e112326dfdb059148232e873e5856b11c54.tar.xz
mana-63da3e112326dfdb059148232e873e5856b11c54.zip
Added garbage collecting container.
-rw-r--r--src/gui/gccontainer.cpp67
-rw-r--r--src/gui/gccontainer.h43
2 files changed, 110 insertions, 0 deletions
diff --git a/src/gui/gccontainer.cpp b/src/gui/gccontainer.cpp
new file mode 100644
index 00000000..ccc9416f
--- /dev/null
+++ b/src/gui/gccontainer.cpp
@@ -0,0 +1,67 @@
+/*
+ * The Mana World
+ * Copyright 2004 The Mana World Development Team
+ *
+ * This file is part of The Mana World.
+ *
+ * The Mana World is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * any later version.
+ *
+ * The Mana World is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with The Mana World; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ *
+ * $Id$
+ */
+
+#include "gccontainer.h"
+
+#include <iostream>
+
+GCContainer::~GCContainer()
+{
+ std::list<gcn::Widget*>::iterator i = mDeathList.begin();
+
+ while (i != mDeathList.end()) {
+ /* Take care _not_ to modify the list in our _announceDeath method */
+ gcn::Widget *w = (*i);
+ i = mDeathList.erase(i);
+ delete w;
+ }
+
+ mDeathList.clear();
+}
+
+void GCContainer::add(gcn::Widget *w, bool delChild)
+{
+ if (delChild) {
+ mDeathList.push_back(w);
+ std::cout << "add" << w << std::endl;
+ }
+
+ Container::add(w);
+}
+
+void GCContainer::add(gcn::Widget *w, int x, int y, bool delChild)
+{
+ if (delChild) {
+ mDeathList.push_back(w);
+ std::cout << "add" << w << std::endl;
+ }
+
+ Container::add(w, x, y);
+}
+
+void GCContainer::_announceDeath(gcn::Widget *w)
+{
+ mDeathList.remove(w);
+ std::cout << w << std::endl;
+ Container::_announceDeath(w);
+}
diff --git a/src/gui/gccontainer.h b/src/gui/gccontainer.h
new file mode 100644
index 00000000..696aef0c
--- /dev/null
+++ b/src/gui/gccontainer.h
@@ -0,0 +1,43 @@
+/*
+ * The Mana World
+ * Copyright 2004 The Mana World Development Team
+ *
+ * This file is part of The Mana World.
+ *
+ * The Mana World is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * any later version.
+ *
+ * The Mana World is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with The Mana World; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ *
+ * $Id$
+ */
+
+#ifndef _TMW_GUI_GCCONTAINER_H
+#define _TMW_GUI_GCCONTAINER_H
+
+#include <list>
+
+#include <guichan/widgets/container.hpp>
+
+class GCContainer : public gcn::Container
+{
+ public:
+ virtual ~GCContainer();
+ virtual void add(gcn::Widget *w, bool delChild=true);
+ virtual void add(gcn::Widget *w, int x, int y, bool delChild=true);
+ virtual void _announceDeath(gcn::Widget *w);
+
+ protected:
+ std::list<gcn::Widget*> mDeathList;
+};
+
+#endif