comparison ext/guichan-0.8.2/include/guichan/widgets/textfield.hpp @ 378:64738befdf3b

bringing in the changes from the build_system_rework branch in preparation for the 0.3.0 release. This commit will require the Jan2010 devkit. Clients will also need to be modified to the new way to import fife.
author vtchill@33b003aa-7bff-0310-803a-e67f0ece8222
date Mon, 11 Jan 2010 23:34:52 +0000
parents
children
comparison
equal deleted inserted replaced
377:fe6fb0e0ed23 378:64738befdf3b
1 /* _______ __ __ __ ______ __ __ _______ __ __
2 * / _____/\ / /\ / /\ / /\ / ____/\ / /\ / /\ / ___ /\ / |\/ /\
3 * / /\____\// / // / // / // /\___\// /_// / // /\_/ / // , |/ / /
4 * / / /__ / / // / // / // / / / ___ / // ___ / // /| ' / /
5 * / /_// /\ / /_// / // / // /_/_ / / // / // /\_/ / // / | / /
6 * /______/ //______/ //_/ //_____/\ /_/ //_/ //_/ //_/ //_/ /|_/ /
7 * \______\/ \______\/ \_\/ \_____\/ \_\/ \_\/ \_\/ \_\/ \_\/ \_\/
8 *
9 * Copyright (c) 2004 - 2008 Olof Naessén and Per Larsson
10 *
11 *
12 * Per Larsson a.k.a finalman
13 * Olof Naessén a.k.a jansem/yakslem
14 *
15 * Visit: http://guichan.sourceforge.net
16 *
17 * License: (BSD)
18 * Redistribution and use in source and binary forms, with or without
19 * modification, are permitted provided that the following conditions
20 * are met:
21 * 1. Redistributions of source code must retain the above copyright
22 * notice, this list of conditions and the following disclaimer.
23 * 2. Redistributions in binary form must reproduce the above copyright
24 * notice, this list of conditions and the following disclaimer in
25 * the documentation and/or other materials provided with the
26 * distribution.
27 * 3. Neither the name of Guichan nor the names of its contributors may
28 * be used to endorse or promote products derived from this software
29 * without specific prior written permission.
30 *
31 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
32 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
33 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
34 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
35 * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
36 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED
37 * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
38 * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
39 * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
40 * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
41 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
42 */
43
44 #ifndef GCN_TEXTFIELD_HPP
45 #define GCN_TEXTFIELD_HPP
46
47 #include "guichan/keylistener.hpp"
48 #include "guichan/mouselistener.hpp"
49 #include "guichan/platform.hpp"
50 #include "guichan/widget.hpp"
51
52 #include <string>
53
54 namespace gcn
55 {
56 /**
57 * An implementation of a text field where a user can enter a line of text.
58 */
59 class GCN_CORE_DECLSPEC TextField:
60 public Widget,
61 public MouseListener,
62 public KeyListener
63 {
64 public:
65 /**
66 * Constructor.
67 */
68 TextField();
69
70 /**
71 * Constructor. The text field will be automatically resized
72 * to fit the text.
73 *
74 * @param text The default text of the text field.
75 */
76 TextField(const std::string& text);
77
78 /**
79 * Sets the text of the text field.
80 *
81 * @param text The text of the text field.
82 * @see getText
83 */
84 void setText(const std::string& text);
85
86 /**
87 * Gets the text of the text field.
88 *
89 * @return The text of the text field.
90 * @see setText
91 */
92 const std::string& getText() const;
93
94 /**
95 * Adjusts the size of the text field to fit the text.
96 */
97 void adjustSize();
98
99 /**
100 * Adjusts the height of the text field to fit caption.
101 */
102 void adjustHeight();
103
104 /**
105 * Sets the caret position. As there is only one line of text
106 * in a text field the position is the caret's x coordinate.
107 *
108 * @param position The caret position.
109 * @see getCaretPosition
110 */
111 void setCaretPosition(unsigned int position);
112
113 /**
114 * Gets the caret position. As there is only one line of text
115 * in a text field the position is the caret's x coordinate.
116 *
117 * @return The caret position.
118 * @see setCaretPosition
119 */
120 unsigned int getCaretPosition() const;
121
122
123 // Inherited from Widget
124
125 virtual void fontChanged();
126
127 virtual void draw(Graphics* graphics);
128
129
130 // Inherited from MouseListener
131
132 virtual void mousePressed(MouseEvent& mouseEvent);
133
134 virtual void mouseDragged(MouseEvent& mouseEvent);
135
136
137 // Inherited from KeyListener
138
139 virtual void keyPressed(KeyEvent& keyEvent);
140
141 protected:
142 /**
143 * Draws the caret. Overloaded this method if you want to
144 * change the style of the caret.
145 *
146 * @param graphics the Graphics object to draw with.
147 * @param x the caret's x-position.
148 */
149 virtual void drawCaret(Graphics* graphics, int x);
150
151 /**
152 * Scrolls the text horizontally so that the caret shows if needed.
153 * The method is used any time a user types in the text field so the
154 * caret always will be shown.
155 */
156 void fixScroll();
157
158 /**
159 * Holds the text of the text box.
160 */
161 std::string mText;
162
163 /**
164 * Holds the caret position.
165 */
166 unsigned int mCaretPosition;
167
168 /**
169 * Holds the amount scrolled in x. If a user types more characters than
170 * the text field can display, due to the text field being to small, the
171 * text needs to scroll in order to show the last type character.
172 */
173 int mXScroll;
174 };
175 }
176
177 #endif // end GCN_TEXTFIELD_HPP