diff engine/core/gui/widgets/togglebutton.h @ 177:3fb17daa1b27

* Added ToggleButton widget * Modified editor to use togglebuttons in toolbox
author cheesesucker@33b003aa-7bff-0310-803a-e67f0ece8222
date Sun, 25 Jan 2009 20:17:41 +0000
parents
children d76169461729
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/engine/core/gui/widgets/togglebutton.h	Sun Jan 25 20:17:41 2009 +0000
@@ -0,0 +1,236 @@
+/***************************************************************************
+ *   Copyright (C) 2005-2008 by the FIFE team                              *
+ *   http://www.fifengine.de                                               *
+ *   This file is part of FIFE.                                            *
+ *                                                                         *
+ *   FIFE is free software; you can redistribute it and/or                 *
+ *   modify it under the terms of the GNU Lesser General Public            *
+ *   License as published by the Free Software Foundation; either          *
+ *   version 2.1 of the License, or (at your option) any later version.    *
+ *                                                                         *
+ *   This library 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     *
+ *   Lesser General Public License for more details.                       *
+ *                                                                         *
+ *   You should have received a copy of the GNU Lesser General Public      *
+ *   License along with this library; if not, write to the                 *
+ *   Free Software Foundation, Inc.,                                       *
+ *   51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA          *
+ ***************************************************************************/
+
+#ifndef FIFE_GUICHAN_ADDON_TOGGLEBUTTON_H
+#define FIFE_GUICHAN_ADDON_TOGGLEBUTTON_H
+
+// Standard C++ library includes
+#include <string>
+#include <map>
+
+// 3rd party library includes
+#include <guichan.hpp>
+#include <guichan/actionlistener.hpp>
+
+// FIFE includes
+// These includes are split up in two parts, separated by one empty line
+// First block: files included from the FIFE root src directory
+// Second block: files included from the same folder
+
+namespace gcn {
+	/**
+     * An implementation of a toggleable button.
+	 *
+	 * If the button is in a group, all other buttons in that group will be untoggled
+	 * when a button gets toggled. If the button is already toggled, you can untoggle 
+	 * it by clicking on it.
+	 *
+     */
+	class ToggleButton : public Button, public ActionListener {
+		public:
+			/**
+			 * Constructor
+			 *
+			 * @param up_image Image displayed when the button isn't toggled
+			 * @param down_image Image displayed when the button is toggled
+			 * @param hover_file Image displayed when the mouse cursor is over button
+			 * @param caption Text to be displayed on button
+			 * @param group The group the button belongs to
+			 */
+			ToggleButton(Image *up_image = 0, Image *down_image = 0, Image *hover_image = 0, const std::string& caption = "", const std::string& group = "");
+
+			/**
+			 * Destructor
+			 */
+			~ToggleButton();
+
+			/**
+			 * Draws the button
+			 */
+			void draw(Graphics *graphics);
+
+			/**
+			 * Adjust size to fit image
+			 */
+			void adjustSize();
+
+			/**
+			 * Sets the image that will be displayed when the button isn't toggled
+			 *
+			 * @param image Image to be displayed
+			 */
+			void setUpImage(Image* image);
+
+			/**
+			 * Sets the image that will be displayed when the button is toggled or pressed
+			 *
+			 * @param image Image to be displayed
+			 */
+			void setDownImage(Image* image);
+
+			/**
+			 * Sets the image which will be displayed when the mouse cursor is over the button
+			 *
+			 * @param image Image to be displayed
+			 */
+			void setHoverImage(Image* image);
+			
+			/**
+			 * Sets the number of pixels the image or text will be offset from
+			 * the top left corner of button when the button is pressed or toggled.
+			 *
+			 * @param x Offset from left
+			 * @param y Offset from top
+			 * @see getDownXOffset
+			 * @see getDownYOffset
+			 */
+			void setDownOffset(int x, int y);
+
+			/**
+			 * Gets the number of pixels the image or text will be offset
+			 * from the left of button when the button is pressed or toggled.
+			 *
+			 * @return Offset from left when button is pressed
+			 * @see setDownOffset
+			 */
+			int getDownXOffset() const;
+
+			/**
+			 * Gets the number of pixels the image or text will be offset
+			 * from the top of button when the button is pressed or toggled.
+			 *
+			 * @return Offset from top when button is pressed
+			 * @see setDownOffset
+			 */
+			int getDownYOffset() const;
+
+			/**
+			 * Sets the help text for the button
+			 *
+			 * @param txt The help text
+			 *
+			 * @see getHelpText
+			 */
+			void setHelpText(const std::string& txt);
+
+			/** 
+			 * Gets the help text for the button
+			 *
+			 * @return The help text
+			 *
+			 * @see setHelpText
+			 */
+			const std::string& getHelpText();
+
+			/**
+			 * Checks if the radio button is selected.
+			 *
+			 * @return True if the radio button is selecte, false otherwise.
+			 * @see setSelected
+			 */
+			bool isToggled() const;
+
+			/**
+			 * Sets the radio button to selected or not.
+			 *
+			 * @param selected True if the radio button should be selected,
+			 *                 false otherwise.
+			 * @see isSelected
+			 */
+			void setToggled(bool toggled);
+
+			// From Guichan 0.8.1
+			/**
+			 * Sets the group the toggle button should belong to. Note that
+			 * a toggle button group is unique per application, not per Gui object
+			 * as the group is stored in a static map.
+			 *
+			 * @param group The name of the group.
+			 * @see getGroup
+			 */
+			void setGroup(const std::string &group);
+
+			/**
+			 * Gets the group the toggle button belongs to.
+			 *
+			 * @return The group the toggle button belongs to.
+			 * @see setGroup
+			 */
+			const std::string &getGroup() const;
+
+		protected:
+			// Inherited from gcn::Widget
+			/**
+			 * Toggle button when it is activated
+			 *
+			 * @param actionEvent ActionEvent object
+			 */
+			void action(const ActionEvent& actionEvent);
+
+		private:
+			// Image to be used when the button is not toggle
+			Image *m_upImage;
+
+			// Image to be used when the button is toggled or pressed
+			Image *m_downImage;
+
+			// Image to be used when the mouse cursor is over the image
+			Image *m_hoverImage;
+
+			// Number of pixels the image/text will be offset from the top left
+			// corner, when the button is pressed or toggled
+			int x_downoffset;
+			int y_downoffset;
+
+			// Help text for the button
+			std::string m_helptext;
+
+			/**
+			 * Whether the button is toggled or not.
+			 */
+			bool m_toggled;			
+
+			//-- From Guichan 0.8.1 --
+			/**
+			 * Holds the group of the toggle button.
+			 */
+			std::string m_group;
+
+			/**
+			 * Typedef.
+			 */
+			typedef std::multimap<std::string, ToggleButton *> GroupMap;
+
+			/**
+			 * Typedef.
+			 */
+			typedef GroupMap::iterator GroupIterator;
+
+			/**
+			 * Holds all available toggle button groups.
+			 */
+			static GroupMap m_groupMap;
+	};
+
+}
+
+#endif
+/* vim: set noexpandtab: set shiftwidth=2: set tabstop=2: */