Files
oboe/osx/dialogxml/field.h
Celtic Minstrel 88cb60fb8d Embark on an epic journey to document the dialog engine in as much detail as possible.
... and the previous commits (from 56f73cb on) were by and large a result of things noticed during this process.
2014-12-06 13:37:43 -05:00

77 lines
2.4 KiB
C++

/*
* field.h
* BoE
*
* Created by Celtic Minstrel on 11/05/09.
*
*/
#ifndef FIELD_H
#define FIELD_H
/// @file
/// Field-related classes and types.
#include <string>
#include "control.h"
/// The field's expected input type.
enum eFldType {
FLD_INT, ///< A field that accepts only integers.
FLD_UINT, ///< A field that accepts only positive integers.
FLD_REAL, ///< A field that accepts any real (floating-point) number.
FLD_TEXT, ///< A field that accepts any text. This is the default.
};
/// An editable text field.
/// The text field supports multiline input and text selection.
/// It automatically scrolls to keep the insertion point in view.
/// (If there's a current selection, the mobile end of the selection is kept in view.)
/// Mouse support is currently nonexistent, except for focusing when clicked.
/// There is no Unicode support.
class cTextField : public cControl {
public:
void attachClickHandler(click_callback_t f) throw(xHandlerNotSupported);
/// @copydoc cControl::attachFocusHandler()
/// For text fields, this is triggered when it loses or gains the input focus.
void attachFocusHandler(focus_callback_t f) throw();
bool triggerFocusHandler(cDialog& me, std::string id, bool losingFocus);
bool handleClick(location where);
void setFormat(eFormat prop, short val) throw(xUnsupportedProp);
short getFormat(eFormat prop) throw(xUnsupportedProp);
void setColour(sf::Color clr) throw(xUnsupportedProp);
/// Get the current input type of the field.
/// @return The input type.
eFldType getInputType();
/// Set the input type of the field.
/// @param newType The new input type.
void setInputType(eFldType newType);
sf::Color getColour() throw(xUnsupportedProp);
/// Create a new editable text field.
/// @param parent The parent dialog.
explicit cTextField(cDialog* parent);
bool isClickable();
virtual ~cTextField();
void draw();
/// Check if this text field currently has input focus.
/// @return true if it it is currently focused.
bool hasFocus();
/// Handle keyboard input.
/// @param key The keypress to handle.
void handleInput(cKey key);
cTextField& operator=(cTextField& other) = delete;
cTextField(cTextField& other) = delete;
/// This field is only used by cDialog during the loading process. Changing it will have no effect.
long tabOrder = 0;
private:
eFldType field_type;
focus_callback_t onFocus;
bool haveFocus;
int insertionPoint;
int selectionPoint;
sf::Color color;
bool ip_visible;
sf::Clock ip_timer;
};
#endif