summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/Makefile.am2
-rw-r--r--src/gui/tabbedcontainer.cpp108
-rw-r--r--src/gui/tabbedcontainer.h57
3 files changed, 167 insertions, 0 deletions
diff --git a/src/Makefile.am b/src/Makefile.am
index a8ffa48c..10758caf 100644
--- a/src/Makefile.am
+++ b/src/Makefile.am
@@ -82,6 +82,8 @@ tmw_SOURCES = graphic/spriteset.cpp \
gui/status.h \
gui/stats.cpp \
gui/stats.h \
+ gui/tabbedcontainer.cpp \
+ gui/tabbedcontainer.h \
gui/textbox.cpp \
gui/textbox.h \
gui/textfield.cpp \
diff --git a/src/gui/tabbedcontainer.cpp b/src/gui/tabbedcontainer.cpp
new file mode 100644
index 00000000..3044122a
--- /dev/null
+++ b/src/gui/tabbedcontainer.cpp
@@ -0,0 +1,108 @@
+/*
+ * 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 "tabbedcontainer.h"
+
+#include <sstream>
+
+#include "button.h"
+
+#define TABWIDTH 60
+#define TABHEIGHT 20
+
+TabbedContainer::TabbedContainer():
+ mActiveContent(0)
+{
+}
+
+TabbedContainer::~TabbedContainer()
+{
+ std::vector<gcn::Widget*>::iterator i = mTabs.begin();
+ while (i != mTabs.end()) {
+ remove(*i);
+ delete (*i);
+ i = mTabs.erase(i);
+ }
+
+ mContents.clear();
+}
+
+void TabbedContainer::addTab(gcn::Widget *widget, const std::string &caption)
+{
+ std::stringstream ss;
+
+ Button *tab = new Button(caption);
+
+ int tabNumber = mTabs.size();
+
+ ss << tabNumber;
+ tab->setEventId(ss.str());
+ tab->setSize(TABWIDTH, TABHEIGHT);
+ tab->addActionListener(this);
+ add(tab, TABWIDTH * tabNumber, 0);
+
+ mTabs.push_back(tab);
+
+ mContents.push_back(widget);
+ widget->setPosition(0, TABHEIGHT);
+
+ // If this is the first tab in this container, make it visible
+ if (!mActiveContent) {
+ mActiveContent = widget;
+ add(mActiveContent);
+ }
+}
+
+void TabbedContainer::logic()
+{
+ if (mActiveContent) {
+ mActiveContent->setSize(
+ getWidth() - 2 * mActiveContent->getBorderSize(),
+ getHeight() - TABHEIGHT - 2 * mActiveContent->getBorderSize());
+ }
+
+ Container::logic();
+}
+
+void TabbedContainer::action(const std::string &event)
+{
+ int tabNo;
+ std::stringstream ss;
+ gcn::Widget *newContent;
+
+ ss << event;
+ ss >> tabNo;
+
+ if ((newContent = mContents[tabNo])) {
+ if (mActiveContent) {
+ remove(mActiveContent);
+ }
+ mActiveContent = newContent;
+ add(newContent);
+ }
+}
+
+void TabbedContainer::setOpaque(bool opaque)
+{
+ Container::setOpaque(opaque);
+}
diff --git a/src/gui/tabbedcontainer.h b/src/gui/tabbedcontainer.h
new file mode 100644
index 00000000..a2c4c90c
--- /dev/null
+++ b/src/gui/tabbedcontainer.h
@@ -0,0 +1,57 @@
+/*
+ * 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_TABPANE_H
+#define _TMW_TABPANE_H
+
+#include <iosfwd>
+#include <vector>
+
+#include <guichan/actionlistener.hpp>
+
+#include <guichan/widgets/container.hpp>
+
+#include "guichanfwd.h"
+
+class TabbedContainer : public gcn::Container, public gcn::ActionListener
+{
+ public:
+ TabbedContainer();
+ ~TabbedContainer();
+
+ void addTab(gcn::Widget *widget, const std::string &caption);
+
+ void logic();
+
+ void action(const std::string &event);
+
+ void setOpaque(bool opaque);
+
+ private:
+ std::vector<gcn::Widget*> mTabs; // The actual tabs at the top
+ std::vector<gcn::Widget*> mContents; // The contents of the tabs
+
+ Widget *mActiveContent;
+};
+
+#endif