/*
* Copyright 2010 Inalogic® Inc.
*
* This program 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 or 3.0
* of the License.
*
* This program is distributed in the hope that it will be useful, but
* WITHOUT ANY WARRANTY; without even the implied warranties of
* MERCHANTABILITY, SATISFACTORY QUALITY or FITNESS FOR A PARTICULAR
* PURPOSE. See the applicable version of the GNU Lesser General Public
* License for more details.
*
* You should have received a copy of both the GNU Lesser General Public
* License along with this program. If not, see
*
* Authored by: Jay Taoko
*
*/
#ifndef EDITTEXTBOX_H
#define EDITTEXTBOX_H
#include "KeyboardHandler.h"
#include "TimerProc.h"
namespace nux
{
class HLayout;
class VLayout;
class Layout;
class BaseKeyboardHandler;
class TextLine;
class Validator;
class EditTextBox : public View
{
public:
EditTextBox(const char *Caption, NUX_FILE_LINE_PROTO);
~EditTextBox();
virtual void Draw(GraphicsEngine &graphics_engine, bool force_draw);
virtual void DrawContent(GraphicsEngine &graphics_engine, bool force_draw);
virtual void PostDraw(GraphicsEngine &graphics_engine, bool force_draw);
//! Return True if the the area knows what to do with the key event.
virtual bool InspectKeyEvent(unsigned int eventType,
unsigned int keysym,
const char* character);
void SetText(const char &Caption);
void SetText(const char *Caption);
void SetText(const tstring &Caption);
void SetText(const NString &Caption);
const char *GetText() const;
unsigned int GetTextSize() const
{
return (unsigned int) m_Text.Length();
}
void SetDoubleValue(double d);
void SetIntegerValue(int i);
//! Return a caption string striping out the prefix and the suffix
virtual NString GetCleanText() const;
void SetTextBackgroundColor(const Color &color);
Color GetTextBackgroundColor() const;
void SetSelectedTextColor(Color color)
{
m_SelectedTextColor = color;
}
void SetSelectedTextBackgroundColor(Color color)
{
m_SelectedTextBackgroundColor = color;
}
void SetTextBlinkColor(Color color)
{
m_TextBlinkColor = color;
}
void SetCursorColor(Color color)
{
m_CursorColor = color;
}
Color GetSelectedTextColor() const
{
return m_SelectedTextColor;
}
Color GetSelectedTextBackgroundColor() const
{
return m_SelectedTextBackgroundColor;
}
Color GetTextBlinkColor() const
{
return m_TextBlinkColor;
}
Color GetCursorColor() const
{
return m_CursorColor;
}
void SetKeyEntryType(BaseKeyboardHandler::eKeyEntryType keytype)
{
m_KeyboardHandler.SetKeyEntryType(keytype);
}
BaseKeyboardHandler::eKeyEntryType GetKeyEntryType()
{
return m_KeyboardHandler.GetKeyEntryType();
}
// Receivers
void RecvMouseDoubleClick(int x, int y, unsigned long button_flags, unsigned long key_flags);
void RecvMouseUp(int x, int y, unsigned long button_flags, unsigned long key_flags);
void RecvMouseDown(int x, int y, unsigned long button_flags, unsigned long key_flags);
void RecvMouseDrag(int x, int y, int dx, int dy, unsigned long button_flags, unsigned long key_flags);
void RecvKeyEvent(
unsigned long eventType , /*event type*/
unsigned long keysym , /*event keysym*/
unsigned long state , /*event state*/
const char* character , /*character*/
unsigned short keyCount /*key repeat count*/);
void RecvStartKeyFocus();
void RecvEndKeyFocus();
void SetPrefix(const tstring &p)
{
m_Prefix = p;
};
void SetPrefix(const char *p)
{
m_Prefix = p;
};
void SetPrefix(const char &p)
{
m_Prefix = p;
};
void SetPrefix(const NString &p)
{
m_Prefix = p;
};
NString GetPrefix() const
{
return m_Prefix;
};
void SetSuffix(const tstring &s)
{
m_Suffix = s;
};
void SetSuffix(const char *s)
{
m_Suffix = s;
};
void SetSuffix(const char &s)
{
m_Suffix = s;
};
void SetSuffix(const NString &s)
{
m_Suffix = s;
};
NString Getsuffix() const
{
return m_Suffix;
};
void SetValidator(const Validator *validator);
sigc::signal< void, EditTextBox *, unsigned int > sigCharacter; // Emitted every time a character typed
sigc::signal< void, EditTextBox * > sigEditChange; // Emitted every time a character typed
sigc::signal< void, EditTextBox *, const NString &> sigValidateKeyboardEntry;
sigc::signal< void, EditTextBox * > sigValidateEntry; // Emitted when the text is validated
sigc::signal< void, EditTextBox * > sigSetText; // Emitted when text is set with setCaption
sigc::signal< void, EditTextBox * > sigEscapeKeyboardFocus;
sigc::signal< void, EditTextBox * > sigStartKeyboardFocus;
sigc::signal< void, EditTextBox * > sigEndKeyboardFocus;
bool IsTextSelected()
{
return m_KeyboardHandler.IsTextSelected();
}
bool IsEmpty();
private:
bool ValidateKeyboardEntry(const char *text) const;
void EscapeKeyboardFocus();
void EnteringKeyboardFocus();
void QuitingKeyboardFocus();
virtual long PostLayoutManagement(long LayoutResult);
NString m_Text;
HLayout *hlayout;
Color m_BackgroundColor;
Color m_SelectedTextColor;
Color m_SelectedTextBackgroundColor;
Color m_TextBlinkColor;
Color m_CursorColor;
BaseKeyboardHandler m_KeyboardHandler;
NString m_temporary_caption;
BaseKeyboardHandler::eKeyEntryType m_keytype;
Validator *m_Validator;
NString m_Suffix;
NString m_Prefix;
bool BlinkCursor;
void BlinkCursorTimerInterrupt(void *v);
void StopBlinkCursor(bool BlinkState = false);
void StartBlinkCursor(bool BlinkState = false);
TimerFunctor *m_BlinkTimerFunctor;
TimerHandle m_BlinkTimerHandler;
void ScrollTimerInterrupt(void *v);
TimerFunctor *m_ScrollTimerFunctor;
TimerHandle m_ScrollTimerHandler;
//! If true, blend the characters alpha value with the destination and write the result to the destination buffer.
bool m_WriteAlpha;
bool text_input_mode_;
bool key_nav_mode_;
friend class RGBValuator;
};
}
#endif // EDITTEXTBOX_H