2024-02-16 16:11:18 -05:00
|
|
|
#pragma once
|
|
|
|
|
|
|
|
#include <Geode/DefaultInclude.hpp>
|
2024-05-01 11:51:08 -04:00
|
|
|
#include <Geode/binding/TextInputDelegate.hpp>
|
2024-02-16 16:11:18 -05:00
|
|
|
#include <Geode/binding/CCTextInputNode.hpp>
|
|
|
|
#include <cocos2d.h>
|
|
|
|
|
|
|
|
namespace geode {
|
|
|
|
enum class CommonFilter {
|
|
|
|
// Allow an unsigned integer
|
|
|
|
Uint,
|
|
|
|
// Allow a signed integer
|
|
|
|
Int,
|
|
|
|
// Allow a floating point number
|
|
|
|
Float,
|
|
|
|
// Allow letters, numbers, dashes, underscores, and dots
|
|
|
|
ID,
|
|
|
|
// Allow word-like characters & spaces
|
|
|
|
Name,
|
|
|
|
// Allows basically anything possible to type in an input
|
|
|
|
Any,
|
|
|
|
// Allow a hexadecimal number
|
|
|
|
Hex,
|
|
|
|
// Allow a non-URL-safe Base64 number
|
|
|
|
Base64Normal,
|
|
|
|
// Allow a URL-safe Base64 number
|
|
|
|
Base64URL,
|
|
|
|
};
|
|
|
|
|
|
|
|
GEODE_DLL const char* getCommonFilterAllowedChars(CommonFilter filter);
|
|
|
|
|
2024-02-27 16:32:37 -05:00
|
|
|
enum class TextInputAlign {
|
|
|
|
Center,
|
|
|
|
Left,
|
|
|
|
};
|
|
|
|
|
2024-02-16 16:11:18 -05:00
|
|
|
/**
|
|
|
|
* A single-line text input node
|
|
|
|
*/
|
|
|
|
class GEODE_DLL TextInput : public cocos2d::CCNode, public TextInputDelegate {
|
|
|
|
protected:
|
|
|
|
cocos2d::extension::CCScale9Sprite* m_bgSprite;
|
|
|
|
CCTextInputNode* m_input;
|
|
|
|
std::function<void(std::string const&)> m_onInput = nullptr;
|
|
|
|
|
|
|
|
bool init(float width, std::string const& placeholder, std::string const& font);
|
|
|
|
|
|
|
|
void textChanged(CCTextInputNode* input) override;
|
|
|
|
|
|
|
|
public:
|
|
|
|
/**
|
|
|
|
* Create a single-line text input with a background.
|
|
|
|
* Can either be used in delegate or callback mode;
|
|
|
|
* with callback mode, you don't need to deal with adding
|
|
|
|
* TextInputDelegate to your class' base list, you just install a
|
|
|
|
* callback function directly to the input itself
|
|
|
|
* @param width The width of the input
|
|
|
|
* @param placeholder Placeholder text for the input
|
|
|
|
* @param font The font to use
|
|
|
|
*/
|
|
|
|
static TextInput* create(float width, std::string const& placeholder, std::string const& font = "bigFont.fnt");
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Set the placeholder label for this input
|
|
|
|
*/
|
|
|
|
void setPlaceholder(std::string const& placeholder);
|
|
|
|
/**
|
|
|
|
* Set the filter (allowed characters) for this input
|
|
|
|
* @param allowedChars String of allowed characters; each character in
|
|
|
|
* the string represents one allowed character
|
|
|
|
*/
|
|
|
|
void setFilter(std::string const& allowedChars);
|
|
|
|
/**
|
|
|
|
* Set a commonly used filter (number, text, etc.)
|
|
|
|
*/
|
|
|
|
void setCommonFilter(CommonFilter filter);
|
|
|
|
/**
|
|
|
|
* Set the maximum amount of characters for this input. Use 0 for
|
|
|
|
* infinite length
|
|
|
|
*/
|
|
|
|
void setMaxCharCount(size_t length);
|
|
|
|
/**
|
|
|
|
* Enable/disable password mode (all input characters are rendered as
|
|
|
|
* dots rather than the actual characters)
|
|
|
|
*/
|
|
|
|
void setPasswordMode(bool enable);
|
|
|
|
/**
|
|
|
|
* Set the width of the label. This does not set the maximum character
|
|
|
|
* count; use `setMaxCharCount` for that
|
|
|
|
*/
|
|
|
|
void setWidth(float width);
|
|
|
|
/**
|
|
|
|
* Install a delegate that handles input events. Removes any currently
|
|
|
|
* set direct callbacks
|
|
|
|
* @param delegate The delegate to install
|
|
|
|
* @param tag Some legacy delegates use a tag to distinguish between
|
|
|
|
* inputs; this is a convenience parameter for setting the tag of the
|
|
|
|
* internal CCTextInputNode for those cases
|
|
|
|
*/
|
|
|
|
void setDelegate(TextInputDelegate* delegate, std::optional<int> tag = std::nullopt);
|
|
|
|
/**
|
|
|
|
* Set a direct callback function that is called when the user types in
|
|
|
|
* the input. Overrides any delegate that is currently installed
|
|
|
|
* @param onInput Function to call when the user changes the value of
|
|
|
|
* the text input
|
|
|
|
*/
|
|
|
|
void setCallback(std::function<void(std::string const&)> onInput);
|
2024-02-17 11:24:23 -05:00
|
|
|
/**
|
|
|
|
* Enable/disable the input
|
|
|
|
*/
|
|
|
|
void setEnabled(bool enabled);
|
2024-02-27 16:32:37 -05:00
|
|
|
/**
|
|
|
|
* Align the button's content to the left. If false, aligns to the center
|
|
|
|
*/
|
|
|
|
void setTextAlign(TextInputAlign align);
|
2024-02-16 16:11:18 -05:00
|
|
|
|
|
|
|
/**
|
|
|
|
* Hides the background of this input. Shorthand for
|
|
|
|
* `input->getBGSprite()->setVisible(false)`
|
|
|
|
*/
|
|
|
|
void hideBG();
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Set the value of the input
|
|
|
|
* @param str The new text of the input
|
|
|
|
* @param triggerCallback Whether this should trigger the callback
|
|
|
|
* function / delegate's textChanged event or not
|
|
|
|
*/
|
|
|
|
void setString(std::string const& str, bool triggerCallback = false);
|
|
|
|
/**
|
|
|
|
* Get the current value of the input
|
|
|
|
*/
|
|
|
|
std::string getString() const;
|
|
|
|
|
|
|
|
CCTextInputNode* getInputNode() const;
|
|
|
|
cocos2d::extension::CCScale9Sprite* getBGSprite() const;
|
|
|
|
};
|
|
|
|
}
|