change the event management

This commit is contained in:
Edouard Dupin 2012-02-07 22:29:24 +01:00
parent 165b3da4d3
commit 3c468e612c
12 changed files with 83 additions and 206 deletions

View File

@ -122,41 +122,7 @@ bool ewol::Widget::CalculateSize(etkFloat_t availlableX, etkFloat_t availlableY)
bool ewol::Widget::GenEventInput(int32_t IdInput, eventInputType_te typeEvent, etkFloat_t x, etkFloat_t y)
{
bool ended = false;
//EWOL_WARNING("Input event : " << IdInput << " pos(" << x << "," << y << ")");
for(int32_t iii=m_inputAreaEvent.Size()-1; iii>=0; iii--) {
if( m_inputAreaEvent[iii].origin.x <= x
&& m_inputAreaEvent[iii].origin.y <= y
&& m_inputAreaEvent[iii].origin.x + m_inputAreaEvent[iii].size.x > x
&& m_inputAreaEvent[iii].origin.y + m_inputAreaEvent[iii].size.y > y )
{
if( (m_inputAreaEvent[iii].flags & (1<<(IdInput-1)) )
&& ( ( (FLAG_EVENT_INPUT_MOTION & m_inputAreaEvent[iii].flags) && EVENT_INPUT_TYPE_MOVE == typeEvent)
|| ( (FLAG_EVENT_INPUT_ENTER & m_inputAreaEvent[iii].flags) && EVENT_INPUT_TYPE_ENTER == typeEvent)
|| ( (FLAG_EVENT_INPUT_LEAVE & m_inputAreaEvent[iii].flags) && EVENT_INPUT_TYPE_LEAVE == typeEvent)
|| ( (FLAG_EVENT_INPUT_DOWN & m_inputAreaEvent[iii].flags) && EVENT_INPUT_TYPE_DOWN == typeEvent)
|| ( (FLAG_EVENT_INPUT_UP & m_inputAreaEvent[iii].flags) && EVENT_INPUT_TYPE_UP == typeEvent)
|| ( (FLAG_EVENT_INPUT_CLICKED & m_inputAreaEvent[iii].flags) && EVENT_INPUT_TYPE_SINGLE == typeEvent)
|| ( (FLAG_EVENT_INPUT_CLICKED_DOUBLE & m_inputAreaEvent[iii].flags) && EVENT_INPUT_TYPE_DOUBLE == typeEvent)
|| ( (FLAG_EVENT_INPUT_CLICKED_TRIPLE & m_inputAreaEvent[iii].flags) && EVENT_INPUT_TYPE_TRIPLE == typeEvent)
)
)
{
ended = OnEventArea(m_inputAreaEvent[iii].generateEventId, x, y);
if (true == ended) {
break;
}
if (true == GenEventInputExternal(m_inputAreaEvent[iii].generateEventId, x, y)) {
ended = true;
break;
}
}
}
}
if (false == ended) {
return OnEventInput(IdInput, typeEvent, x, y);
}
return ended;
return OnEventInput(IdInput, typeEvent, x, y);
}
bool ewol::Widget::GenEventInputExternal(const char * generateEventId, etkFloat_t x, etkFloat_t y)
@ -193,12 +159,6 @@ bool ewol::Widget::GenEventShortCut(bool shift, bool control, bool alt, bool met
&& m_inputShortCutEvent[iii].meta == meta
&& m_inputShortCutEvent[iii].UnicodeValue == unicodeValue)
{
/*
ended = OnEventArea(m_inputShortCutEvent[iii].generateEventId, -1, -1);
if (true == ended) {
break;
}
*/
if (true == GenEventInputExternal(m_inputShortCutEvent[iii].generateEventId, -1, -1)) {
ended = true;
break;
@ -214,46 +174,6 @@ bool ewol::Widget::GenEventShortCut(bool shift, bool control, bool alt, bool met
}
bool ewol::Widget::AddEventArea(coord origin, coord size, uint64_t flags, const char * generateEventId)
{
/*
if( origin.x < 0.0
|| origin.y < 0.0)
{
EWOL_WARNING("origin under 0.0 ... out of range");
return false;
}
if( size.x < 0.0
|| size.y < 0.0)
{
EWOL_WARNING("size under 0.0 ... out of range");
return false;
}
if( origin.x > m_size.x
|| origin.y > m_size.y)
{
EWOL_WARNING("origin out of range");
return false;
}
if( origin.x + size.x > m_size.x
|| origin.y + size.y > m_size.y)
{
EWOL_WARNING("end area out of size");
return false;
}
*/
eventArea_ts newEvent;
newEvent.generateEventId = generateEventId;
newEvent.origin.x = origin.x + m_origin.x;
newEvent.origin.y = origin.y + m_origin.y;
newEvent.size = size;
newEvent.flags = flags;
m_inputAreaEvent.PushBack(newEvent);
//EWOL_DEBUG("Add an area event...");
return true;
}
bool ewol::Widget::AddEventShortCut(bool shift, bool control, bool alt, bool meta, uint32_t unicodeValue, const char * generateEventId)
{
eventShortCut_ts newEvent;

View File

@ -98,7 +98,7 @@ namespace ewol {
} eventKbMoveType_te;
char* GetCharTypeMoveEvent(eventKbMoveType_te type);
/*
enum {
FLAG_EVENT_INPUT_1 = 1 << 0,
FLAG_EVENT_INPUT_2 = 1 << 1,
@ -134,7 +134,7 @@ namespace ewol {
#define FLAG_EVENT_INPUT_BT_RIGHT (FLAG_EVENT_INPUT_3)
#define FLAG_EVENT_INPUT_BT_SCROOL_UP (FLAG_EVENT_INPUT_4)
#define FLAG_EVENT_INPUT_BT_SCROOL_DOWN (FLAG_EVENT_INPUT_5)
*/
#define UTF8_MAX_SIZE (8)
#define EWOL_EVENT_AREA (0)
@ -248,7 +248,6 @@ namespace ewol {
// -- Shortcut: (only for computer) ==> must be manage otherwise for tablette pc
// ----------------------------------------------------------------------------------------------------------------
private:
etk::VectorType<eventArea_ts> m_inputAreaEvent; //!< generic area event
etk::VectorType<eventShortCut_ts> m_inputShortCutEvent; //!< generic short-cut event
etk::VectorType<eventExtern_ts> m_externEvent; //!< Generic list of event generation for output link
etk::VectorType<const char*> m_ListEventAvaillable; //!< List of all event availlable for this widget
@ -263,8 +262,7 @@ namespace ewol {
m_ListEventAvaillable.PushBack(generateEventId);
}
}
void EventAreaRemoveAll(void) { m_inputAreaEvent.Clear();m_inputShortCutEvent.Clear(); };
bool AddEventArea(coord origin, coord size, uint64_t flags, const char * generateEventId);
//void EventAreaRemoveAll(void) { m_inputAreaEvent.Clear();m_inputShortCutEvent.Clear(); };
bool AddEventShortCut(bool shift, bool control, bool alt, bool pomme, uint32_t unicodeValue, const char * generateEventId);
bool AddEventShortCut(char * descriptiveString, const char * generateEventId);
public:
@ -272,9 +270,9 @@ namespace ewol {
bool ExternLinkOnEvent(const char * eventName, int32_t widgetId, const char * eventExternId = NULL);
protected:
virtual bool OnEventInput(int32_t IdInput, eventInputType_te typeEvent, etkFloat_t X, etkFloat_t Y) { return false; };
virtual bool OnEventArea(const char * generateEventId, etkFloat_t x, etkFloat_t y) { return false; };
public:
// when an event arrive from an other widget, it will arrive here:
// TODO : change name ...
virtual bool OnEventAreaExternal(int32_t widgetID, const char * generateEventId, const char * data, etkFloat_t x, etkFloat_t y) { return false; };
// ----------------------------------------------------------------------------------------------------------------

View File

@ -149,44 +149,21 @@ void ewol::Button::OnRegenerateDisplay(void)
AddOObject(tmpOObjects, "BouttonDecoration");
AddOObject(tmpText, "BouttonText");
// Regenerate the event Area:
EventAreaRemoveAll();
coord origin;
coord size;
origin.x = tmpOriginX;
origin.y = tmpOriginY;
size.x = tmpSizeX;
size.y = tmpSizeY;
AddEventArea(origin, size, FLAG_EVENT_INPUT_1 | FLAG_EVENT_INPUT_CLICKED_ALL, ewolEventButtonPressed);
AddEventArea(origin, size, FLAG_EVENT_INPUT_ENTER, ewolEventButtonEnter);
AddEventArea(origin, size, FLAG_EVENT_INPUT_LEAVE, ewolEventButtonLeave);
}
}
/*
bool ewol::Button::OnEventInput(int32_t IdInput, eventInputType_te typeEvent, etkFloat_t x, etkFloat_t y)
{
EWOL_DEBUG("Event on BT ...");
return true;
}
*/
bool ewol::Button::OnEventArea(const char * generateEventId, etkFloat_t x, etkFloat_t y)
{
//bool eventIsOK = false;
//EWOL_DEBUG("Receive event : \"" << generateEventId << "\"");
if(ewolEventButtonPressed == generateEventId) {
EWOL_INFO("BT pressed ... " << m_label);
//eventIsOK = true;
ewol::widgetManager::FocusKeep(this);
} else if(ewolEventButtonEnter == generateEventId) {
MarkToReedraw();
if (1 == IdInput) {
if (ewol::EVENT_INPUT_TYPE_SINGLE == typeEvent) {
// nothing to do ...
GenEventInputExternal(ewolEventButtonPressed, x, y);
return true;
}
}
//return eventIsOK;
// in every case this not stop the propagation of the event
return false;
// if overwrited... you can ...
}
@ -196,9 +173,8 @@ bool ewol::Button::OnEventKb(eventKbType_te typeEvent, char UTF8_data[UTF8_MAX_S
if( UTF8_data != NULL
&& typeEvent == ewol::EVENT_KB_TYPE_DOWN
&& UTF8_data[0] == '\r') {
return OnEventArea(ewolEventButtonPressed, -1, -1);
GenEventInputExternal(ewolEventButtonEnter, -1, -1);
}
return false;
}

View File

@ -57,8 +57,8 @@ namespace ewol {
public:
virtual void OnRegenerateDisplay(void);
public:
//virtual bool OnEventInput(int32_t IdInput, eventInputType_te typeEvent, etkFloat_t x, etkFloat_t y);
virtual bool OnEventArea(const char * generateEventId, etkFloat_t x, etkFloat_t y);
virtual bool OnEventInput(int32_t IdInput, eventInputType_te typeEvent, etkFloat_t x, etkFloat_t y);
//virtual bool OnEventArea(const char * generateEventId, etkFloat_t x, etkFloat_t y);
virtual bool OnEventKb(eventKbType_te typeEvent, char UTF8_data[UTF8_MAX_SIZE]);
};
};

View File

@ -132,45 +132,29 @@ void ewol::CheckBox::OnRegenerateDisplay(void)
AddOObject(tmpOObjects, "Decoration");
AddOObject(tmpText, "Text");
// Regenerate the event Area:
EventAreaRemoveAll();
coord origin;
coord size;
origin.x = 3.0;
origin.y = 3.0;
size.x = m_size.x-6;
size.y = m_size.y-6;
AddEventArea(origin, size, FLAG_EVENT_INPUT_1 | FLAG_EVENT_INPUT_CLICKED_ALL, ewolEventCheckBoxClicked);
}
}
/*
bool ewol::CheckBox::OnEventInput(int32_t IdInput, eventInputType_te typeEvent, etkFloat_t x, etkFloat_t y)
{
EWOL_DEBUG("Event on BT ...");
return true;
}
*/
bool ewol::CheckBox::OnEventArea(const char * generateEventId, etkFloat_t x, etkFloat_t y)
{
bool eventIsOK = false;
//EWOL_DEBUG("Receive event : \"" << generateEventId << "\"");
if(ewolEventCheckBoxClicked == generateEventId) {
ewol::widgetManager::FocusKeep(this);
EWOL_INFO("CB pressed ... " << m_label);
if(true == m_value) {
m_value = false;
} else {
m_value = true;
EWOL_DEBUG("Event on checkbox ...");
if (1 == IdInput) {
if (ewol::EVENT_INPUT_TYPE_SINGLE == typeEvent) {
if(true == m_value) {
m_value = false;
} else {
m_value = true;
}
GenEventInputExternal(ewolEventCheckBoxClicked, x, y);
ewol::widgetManager::FocusKeep(this);
return true;
}
MarkToReedraw();
eventIsOK = true;
}
return eventIsOK;
return false;
}
bool ewol::CheckBox::OnEventKb(eventKbType_te typeEvent, char UTF8_data[UTF8_MAX_SIZE])
{
//EWOL_DEBUG("BT PRESSED : \"" << UTF8_data << "\" size=" << strlen(UTF8_data));
@ -179,7 +163,12 @@ bool ewol::CheckBox::OnEventKb(eventKbType_te typeEvent, char UTF8_data[UTF8_MAX
&& ( UTF8_data[0] == '\r'
|| UTF8_data[0] == ' ')
) {
return OnEventArea(ewolEventCheckBoxClicked, -1, -1);
if(true == m_value) {
m_value = false;
} else {
m_value = true;
}
return GenEventInputExternal(ewolEventCheckBoxClicked, -1,-1);
}
return false;
}

View File

@ -51,8 +51,8 @@ namespace ewol {
public:
virtual void OnRegenerateDisplay(void);
public:
//virtual bool OnEventInput(int32_t IdInput, eventInputType_te typeEvent, etkFloat_t x, etkFloat_t y);
virtual bool OnEventArea(const char * generateEventId, etkFloat_t x, etkFloat_t y);
virtual bool OnEventInput(int32_t IdInput, eventInputType_te typeEvent, etkFloat_t x, etkFloat_t y);
//virtual bool OnEventArea(const char * generateEventId, etkFloat_t x, etkFloat_t y);
virtual bool OnEventKb(eventKbType_te typeEvent, char UTF8_data[UTF8_MAX_SIZE]);
};
};

View File

@ -152,38 +152,25 @@ void ewol::Entry::OnRegenerateDisplay(void)
int32_t XCursorPos = fontWidth + m_borderSize + 2*m_paddingSize;
tmpOObjects->Line(XCursorPos, tmpTextOriginY, XCursorPos, tmpTextOriginY + fontHeight, 1);
}
AddOObject(tmpOObjects, "BouttonDecoration");
AddOObject(tmpText, "BouttonText");
// Regenerate the event Area:
EventAreaRemoveAll();
coord origin;
coord size;
origin.x = tmpOriginX;
origin.y = tmpOriginY;
size.x = tmpSizeX;
size.y = tmpSizeY;
AddEventArea(origin, size, FLAG_EVENT_INPUT_1 | FLAG_EVENT_INPUT_CLICKED_ALL, ewolEventEntryClick);
AddEventArea(origin, size, FLAG_EVENT_INPUT_ENTER, ewolEventEntryEnter);
}
}
bool ewol::Entry::OnEventArea(const char * generateEventId, etkFloat_t x, etkFloat_t y)
bool ewol::Entry::OnEventInput(int32_t IdInput, eventInputType_te typeEvent, etkFloat_t x, etkFloat_t y)
{
bool eventIsOK = false;
//EWOL_DEBUG("Receive event : \"" << generateEventId << "\"");
if(ewolEventEntryClick == generateEventId) {
EWOL_INFO("Entry Clicked ... " << m_data);
eventIsOK = true;
ewol::widgetManager::FocusKeep(this);
ewol::KeyboardShow(KEYBOARD_MODE_CODE);
} else if(ewolEventEntryEnter == generateEventId) {
//MarkToReedraw();
EWOL_DEBUG("Event on Entry ...");
if (1 == IdInput) {
if (ewol::EVENT_INPUT_TYPE_SINGLE == typeEvent) {
// nothing to do ...
GenEventInputExternal(ewolEventEntryClick, x, y);
ewol::widgetManager::FocusKeep(this);
ewol::KeyboardShow(KEYBOARD_MODE_CODE);
return true;
}
}
return eventIsOK;
return false;
}
@ -192,7 +179,7 @@ bool ewol::Entry::OnEventKb(eventKbType_te typeEvent, char UTF8_data[UTF8_MAX_SI
if( UTF8_data != NULL
&& typeEvent == ewol::EVENT_KB_TYPE_DOWN) {
//EWOL_DEBUG("Entry input data ... : \"" << UTF8_data << "\" size=" << strlen(UTF8_data) << " data=" << (int32_t)UTF8_data[0] );
//return OnEventArea(ewolEventButtonPressed, -1, -1);
return GenEventInputExternal(ewolEventEntryEnter, -1, -1);
if (0x7F == UTF8_data[0]) {
if (m_data.Size() > 0) {
// SUPPR

View File

@ -61,8 +61,8 @@ namespace ewol {
public:
virtual void OnRegenerateDisplay(void);
public:
//virtual bool OnEventInput(int32_t IdInput, eventInputType_te typeEvent, etkFloat_t x, etkFloat_t y);
virtual bool OnEventArea(const char * generateEventId, etkFloat_t x, etkFloat_t y);
virtual bool OnEventInput(int32_t IdInput, eventInputType_te typeEvent, etkFloat_t x, etkFloat_t y);
//virtual bool OnEventArea(const char * generateEventId, etkFloat_t x, etkFloat_t y);
virtual bool OnEventKb(eventKbType_te typeEvent, char UTF8_data[UTF8_MAX_SIZE]);
protected:
virtual void OnGetFocus(void);

View File

@ -105,7 +105,7 @@ void ewol::Label::OnRegenerateDisplay(void)
tmpText->Text(tmpOriginX, tmpOriginY, m_label.c_str(), m_size.x - 2*paddingSize);
AddOObject(tmpText, "LabelText");
/*
// Regenerate the event Area:
EventAreaRemoveAll();
coord origin;
@ -115,9 +115,26 @@ void ewol::Label::OnRegenerateDisplay(void)
size.x = m_minSize.x;
size.y = m_minSize.y;
AddEventArea(origin, size, FLAG_EVENT_INPUT_1 | FLAG_EVENT_INPUT_CLICKED_ALL, ewolEventLabelPressed);
*/
}
}
bool ewol::Label::OnEventInput(int32_t IdInput, eventInputType_te typeEvent, etkFloat_t x, etkFloat_t y)
{
EWOL_DEBUG("Event on Label ...");
if (1 == IdInput) {
if (ewol::EVENT_INPUT_TYPE_SINGLE == typeEvent) {
// nothing to do ...
GenEventInputExternal(ewolEventLabelPressed, x, y);
return true;
}
}
return false;
}
/*
bool ewol::Label::OnEventArea(const char * generateEventId, etkFloat_t x, etkFloat_t y)
{
bool eventIsOK = false;
@ -128,5 +145,5 @@ bool ewol::Label::OnEventArea(const char * generateEventId, etkFloat_t x, etkFlo
}
return eventIsOK;
}
*/

View File

@ -47,8 +47,7 @@ namespace ewol {
public:
virtual void OnRegenerateDisplay(void);
public:
//virtual bool OnEventInput(int32_t IdInput, eventInputType_te typeEvent, etkFloat_t x, etkFloat_t y);
virtual bool OnEventArea(const char * generateEventId, etkFloat_t x, etkFloat_t y);
virtual bool OnEventInput(int32_t IdInput, eventInputType_te typeEvent, etkFloat_t x, etkFloat_t y);
};
};

View File

@ -143,30 +143,21 @@ void ewol::Test::OnRegenerateDisplay(void)
ewol::theme::Generate(0, 0, *tmpOObjects, 50, 50, m_size.x*0.75, m_size.y*0.75);
AddOObject(tmpOObjects, "themeObject");
*/
// Regenerate the event Area:
EventAreaRemoveAll();
coord origin;
coord size;
origin.x = 3.0;
origin.y = 3.0;
size.x = m_size.x-6;
size.y = m_size.y-6;
AddEventArea(origin, size, FLAG_EVENT_INPUT_1 | FLAG_EVENT_INPUT_CLICKED_ALL, ewolEventTestPressed);
}
}
bool ewol::Test::OnEventArea(const char * generateEventId, etkFloat_t x, etkFloat_t y)
bool ewol::Test::OnEventInput(int32_t IdInput, eventInputType_te typeEvent, etkFloat_t x, etkFloat_t y)
{
bool eventIsOK = false;
//EWOL_DEBUG("Receive event : \"" << generateEventId << "\"");
if(ewolEventTestPressed == generateEventId) {
m_elementID++;
if (m_elementID > 7 ) {
m_elementID = 0;
EWOL_DEBUG("Event on Test ...");
if (1 == IdInput) {
if (ewol::EVENT_INPUT_TYPE_SINGLE == typeEvent) {
m_elementID++;
if (m_elementID > 7 ) {
m_elementID = 0;
}
MarkToReedraw();
return true;
}
MarkToReedraw();
eventIsOK = true;
}
return eventIsOK;
return false;
}

View File

@ -39,7 +39,7 @@ namespace ewol {
public:
virtual void OnRegenerateDisplay(void);
public:
virtual bool OnEventArea(const char * generateEventId, etkFloat_t x, etkFloat_t y);
virtual bool OnEventInput(int32_t IdInput, eventInputType_te typeEvent, etkFloat_t x, etkFloat_t y);
private:
int32_t m_elementID;
};