1 /*
2  * This source file is part of libRocket, the HTML/CSS Interface Middleware
3  *
4  * For the latest information, see http://www.librocket.com
5  *
6  * Copyright (c) 2008-2010 CodePoint Ltd, Shift Technology Ltd
7  *
8  * Permission is hereby granted, free of charge, to any person obtaining a copy
9  * of this software and associated documentation files (the "Software"), to deal
10  * in the Software without restriction, including without limitation the rights
11  * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
12  * copies of the Software, and to permit persons to whom the Software is
13  * furnished to do so, subject to the following conditions:
14  *
15  * The above copyright notice and this permission notice shall be included in
16  * all copies or substantial portions of the Software.
17  *
18  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
19  * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
20  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
21  * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
22  * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
23  * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
24  * THE SOFTWARE.
25  *
26  */
27 
28 #ifndef ROCKETCONTROLSELEMENTFORMCONTROL_H
29 #define ROCKETCONTROLSELEMENTFORMCONTROL_H
30 
31 #include "../Core/Element.h"
32 #include "Header.h"
33 
34 namespace Rocket {
35 namespace Controls {
36 
37 /**
38 	A generic specialisation of the generic Core::Element for all input controls.
39 
40 	@author Peter Curry
41  */
42 
43 class ROCKETCONTROLS_API ElementFormControl : public Core::Element
44 {
45 public:
46 	/// Constructs a new ElementFormControl. This should not be called directly; use the Factory
47 	/// instead.
48 	/// @param[in] tag The tag the element was declared as in RML.
49 	ElementFormControl(const Rocket::Core::String& tag);
50 	virtual ~ElementFormControl();
51 
52 	/// Returns the name of the form control. This is not guaranteed to be unique, and in the case of some form
53 	/// controls (such as radio buttons) most likely will not be.
54 	/// @return The name of the form control.
55 	Rocket::Core::String GetName() const;
56 	/// Sets the name of the form control.
57 	/// @param[in] name The new name of the form control.
58 	void SetName(const Rocket::Core::String& name);
59 
60 	/// Returns a string representation of the current value of the form control.
61 	/// @return The value of the form control.
62 	virtual Rocket::Core::String GetValue() const = 0;
63 	/// Sets the current value of the form control.
64 	/// @param[in] value The new value of the form control.
65 	virtual void SetValue(const Rocket::Core::String& value) = 0;
66 	/// Returns if this value should be submitted with the form.
67 	/// @return True if the value should be be submitted with the form, false otherwise.
68 	virtual bool IsSubmitted();
69 
70 	/// Returns the disabled status of the form control.
71 	/// @return True if the element is disabled, false otherwise.
72 	bool IsDisabled() const;
73 	/// Sets the disabled status of the form control.
74 	/// @param[in] disable True to disable the element, false to enable.
75 	void SetDisabled(bool disable);
76 
77 protected:
78 	/// Checks for changes to the 'disabled' attribute.
79 	/// @param[in] changed_attributes List of changed attributes on the element.
80 	virtual void OnAttributeChange(const Core::AttributeNameList& changed_attributes);
81 };
82 
83 }
84 }
85 
86 #endif
87