start of the shortcut coding

This commit is contained in:
Edouard Dupin 2012-02-22 18:18:29 +01:00
parent 8989a3dea0
commit 11d9925409
7 changed files with 194 additions and 174 deletions

View File

@ -0,0 +1,143 @@
/**
*******************************************************************************
* @file ewol/ShortCutManager.cpp
* @brief ewol shortCut manager (Sources)
* @author Edouard DUPIN
* @date 22/02/2012
* @par Project
* ewol
*
* @par Copyright
* Copyright 2011 Edouard DUPIN, all right reserved
*
* This software is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY.
*
* Licence summary :
* You can modify and redistribute the sources code and binaries.
* You can send me the bug-fix
*
* Term of the licence in in the file licence.txt.
*
*******************************************************************************
*/
#include <ewol/ShortCutManager.h>
#include <ewol/WidgetMessageMultiCast.h>
#include <ewol/ewol.h>
class EventShortCut {
public:
const char * generateEventId; // event generate ID (to be unique it was pointer on the string name)
etk::UString eventData;
bool shift;
bool control;
bool alt;
bool meta;
uniChar_t UnicodeValue;
};
static etk::VectorType<EventShortCut *> l_inputShortCutEvent; //!< generic short-cut event
void ewol::shortCut::Add(bool shift, bool control, bool alt, bool meta, uniChar_t unicodeValue, const char * generateEventId, etk::UString& data)
{
EventShortCut * newEvent = new EventShortCut();
if (NULL == newEvent) {
EWOL_ERROR("Allocation Error on the shortcut ...");
return;
}
newEvent->generateEventId = generateEventId;
newEvent->shift = shift;
newEvent->control = control;
newEvent->alt = alt;
newEvent->meta = meta;
newEvent->UnicodeValue = unicodeValue;
newEvent->eventData = data;
l_inputShortCutEvent.PushBack(newEvent);
return;
}
void ewol::shortCut::Add(char * descriptiveString, const char * generateEventId, etk::UString& data)
{
if( NULL==descriptiveString
|| 0==strlen(descriptiveString))
{
return;
}
bool shift = false;
bool control = false;
bool alt = false;
bool meta = false;
uint32_t UnicodeValue = 0;
// parsing of the string :
//"ctrl+shift+alt+meta+s"
char * tmp = strstr(descriptiveString, "ctrl");
if(NULL != tmp) {
control = true;
}
tmp = strstr(descriptiveString, "shift");
if(NULL != tmp) {
shift = true;
}
tmp = strstr(descriptiveString, "alt");
if(NULL != tmp) {
alt = true;
}
tmp = strstr(descriptiveString, "meta");
if(NULL != tmp) {
meta = true;
}
UnicodeValue = descriptiveString[strlen(descriptiveString) -1];
// add with generic Adding function ...
ewol::shortCut::Add(shift, control, alt, meta, UnicodeValue, generateEventId, data);
}
void ewol::shortCut::Init(void)
{
if (l_inputShortCutEvent.Size()>0) {
EWOL_WARNING("Old element error in the shortCut system");
for(int32_t iii=0; iii< l_inputShortCutEvent.Size(); iii++) {
delete(l_inputShortCutEvent[iii]);
l_inputShortCutEvent[iii] = NULL;
}
}
l_inputShortCutEvent.Clear();
}
void ewol::shortCut::UnInit(void)
{
if (l_inputShortCutEvent.Size()>0) {
for(int32_t iii=0; iii< l_inputShortCutEvent.Size(); iii++) {
delete(l_inputShortCutEvent[iii]);
l_inputShortCutEvent[iii] = NULL;
}
}
l_inputShortCutEvent.Clear();
}
bool ewol::shortCut::Process(bool shift, bool control, bool alt, bool meta, uniChar_t unicodeValue)
{
//EWOL_INFO("Try to find generic shortcut ...");
for(int32_t iii=l_inputShortCutEvent.Size()-1; iii>=0; iii--) {
if( l_inputShortCutEvent[iii]->shift == shift
&& l_inputShortCutEvent[iii]->control == control
&& l_inputShortCutEvent[iii]->alt == alt
&& l_inputShortCutEvent[iii]->meta == meta
&& l_inputShortCutEvent[iii]->UnicodeValue == unicodeValue)
{
ewol::widgetMessageMultiCast::Send(-1, l_inputShortCutEvent[iii]->generateEventId, l_inputShortCutEvent[iii]->eventData);
return true;
}
}
return false;
}

View File

@ -0,0 +1,42 @@
/**
*******************************************************************************
* @file ewol/ShortCutManager.h
* @brief ewol shortCut manager (Header)
* @author Edouard DUPIN
* @date 22/02/2012
* @par Project
* ewol
*
* @par Copyright
* Copyright 2011 Edouard DUPIN, all right reserved
*
* This software is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY.
*
* Licence summary :
* You can modify and redistribute the sources code and binaries.
* You can send me the bug-fix
*
* Term of the licence in in the file licence.txt.
*
*******************************************************************************
*/
#ifndef __EWOL_SHORT_CUT_MANAGER_H__
#define __EWOL_SHORT_CUT_MANAGER_H__
#include <etk/Types.h>
#include <etk/UString.h>
namespace ewol {
namespace shortCut {
void Init(void);
void UnInit(void);
bool Process(bool shift, bool control, bool alt, bool meta, uniChar_t unicodeValue);
};
};
#endif

View File

@ -31,6 +31,7 @@
#include <ewol/Texture.h>
#include <ewol/WidgetManager.h>
#include <ewol/themeManager.h>
#include <ewol/ShortCutManager.h>
@ -89,8 +90,6 @@ void EWOL_NativeEventInputState(int pointerID, bool isUp, float x, float y );
void EWOL_NativeResize(int w, int h );
void EWOL_NativeRegenerateDisplay(void);
static void* BaseAppEntry(void* param)
{
bool requestEndProcessing = false;
@ -118,6 +117,7 @@ static void* BaseAppEntry(void* param)
ewol::texture::Init();
ewol::theme::Init();
ewol::InitFont();
ewol::shortCut::Init();
APP_Init();
int32_t countNbEvent = 0;
EWOL_DEBUG("==> Init BThread (END)");
@ -161,6 +161,7 @@ static void* BaseAppEntry(void* param)
{
eventKeyboardKey_ts * tmpData = (eventKeyboardKey_ts*)data.data;
guiAbstraction::SendKeyboardEvent(tmpData->isDown, tmpData->myChar);
//if (false==ewol::shortCut::Process(bool shift, bool control, bool alt, bool meta, uniChar_t unicodeValue)) { ... }
}
break;
case THREAD_KEYBORAD_MOVE:
@ -201,6 +202,7 @@ static void* BaseAppEntry(void* param)
// call application to uninit
APP_UnInit();
ewol::shortCut::UnInit();
ewol::texture::UnInit();
ewol::UnInitFont();
ewol::widgetManager::UnInit();

View File

@ -55,6 +55,10 @@ namespace ewol {
bool IsSetAltGr(void);
bool IsSetVerNum(void);
bool IsSetInsert(void);
namespace shortCut {
void Add(bool shift, bool control, bool alt, bool meta, uniChar_t unicodeValue, const char * generateEventId, etk::UString& data);
void Add(char * descriptiveString, const char * generateEventId, etk::UString& data);
};
};
int64_t GetCurrentTime(void);

View File

@ -1,113 +0,0 @@
/**
*******************************************************************************
* @file ewol/widget/WidgetShortCut.cpp
* @brief basic ewol short Cut widget (Sources)
* @author Edouard DUPIN
* @date 19/02/2012
* @par Project
* ewol
*
* @par Copyright
* Copyright 2011 Edouard DUPIN, all right reserved
*
* This software is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY.
*
* Licence summary :
* You can modify and redistribute the sources code and binaries.
* You can send me the bug-fix
*
* Term of the licence in in the file licence.txt.
*
*******************************************************************************
*/
#include <ewol/widget/WidgetShortCut.h>
ewol::WidgetShortCut::WidgetShortCut(void)
{
// nothing to do ...
}
ewol::WidgetShortCut::~WidgetShortCut(void)
{
//clean all the object
m_inputShortCutEvent.Clear();
}
bool ewol::WidgetShortCut::AddEventShortCut(bool shift, bool control, bool alt, bool meta, uint32_t unicodeValue, const char * generateEventId)
{
eventShortCut_ts newEvent;
newEvent.generateEventId = generateEventId;
newEvent.shift = shift;
newEvent.control = control;
newEvent.alt = alt;
newEvent.meta = meta;
newEvent.UnicodeValue = unicodeValue;
m_inputShortCutEvent.PushBack(newEvent);
return true;
}
bool ewol::WidgetShortCut::AddEventShortCut(char * descriptiveString, const char * generateEventId)
{
if( NULL==descriptiveString
|| 0==strlen(descriptiveString))
{
return false;
}
bool shift = false;
bool control = false;
bool alt = false;
bool meta = false;
uint32_t UnicodeValue = 0;
// parsing of the string :
//"ctrl+shift+alt+meta+s"
char * tmp = strstr(descriptiveString, "ctrl");
if(NULL != tmp) {
control = true;
}
tmp = strstr(descriptiveString, "shift");
if(NULL != tmp) {
shift = true;
}
tmp = strstr(descriptiveString, "alt");
if(NULL != tmp) {
alt = true;
}
tmp = strstr(descriptiveString, "meta");
if(NULL != tmp) {
meta = true;
}
UnicodeValue = descriptiveString[strlen(descriptiveString) -1];
// add with generic Adding function ...
return AddEventShortCut(shift, control, alt, meta, UnicodeValue, generateEventId);
}
bool ewol::WidgetShortCut::GenEventShortCut(bool shift, bool control, bool alt, bool meta, uint32_t unicodeValue)
{
bool ended = false;
//EWOL_WARNING("Input event : " << IdInput << " pos(" << x << "," << y << ")");
for(int32_t iii=m_inputShortCutEvent.Size()-1; iii>=0; iii--) {
if( m_inputShortCutEvent[iii].shift == shift
&& m_inputShortCutEvent[iii].control == control
&& m_inputShortCutEvent[iii].alt == alt
&& m_inputShortCutEvent[iii].meta == meta
&& m_inputShortCutEvent[iii].UnicodeValue == unicodeValue)
{
if (true == GenEventInputExternal(m_inputShortCutEvent[iii].generateEventId, -1, -1)) {
ended = true;
break;
}
}
}
return ended;
}

View File

@ -1,58 +0,0 @@
/**
*******************************************************************************
* @file ewol/widget/WidgetShortCut.h
* @brief basic ewol shortCut widget (header)
* @author Edouard DUPIN
* @date 19/02/2012
* @par Project
* ewol
*
* @par Copyright
* Copyright 2011 Edouard DUPIN, all right reserved
*
* This software is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY.
*
* Licence summary :
* You can modify and redistribute the sources code and binaries.
* You can send me the bug-fix
*
* Term of the licence in in the file licence.txt.
*
*******************************************************************************
*/
#ifndef __EWOL_WIDGET_SHORT_CUT_H__
#define __EWOL_WIDGET_SHORT_CUT_H__
#include <ewol/Widget.h>
namespace ewol {
typedef struct {
const char * generateEventId; // event generate ID (to be unique it was pointer on the string name)
bool shift;
bool control;
bool alt;
bool meta;
uint32_t UnicodeValue;
} eventShortCut_ts;
class WidgetShortCut : virtual public ewol::Widget {
public:
WidgetShortCut(void);
virtual ~WidgetShortCut(void);
private:
etk::VectorType<eventShortCut_ts> m_inputShortCutEvent; //!< generic short-cut event
protected:
bool AddEventShortCut(bool shift, bool control, bool alt, bool pomme, uint32_t unicodeValue, const char * generateEventId);
bool AddEventShortCut(char * descriptiveString, const char * generateEventId);
public:
virtual bool GenEventShortCut(bool shift, bool control, bool alt, bool meta, uint32_t unicodeValue);
};
};
#endif

View File

@ -17,8 +17,8 @@ FILE_LIST = ewol/ewol.cpp \
ewol/WidgetManager.cpp \
ewol/WidgetMessageMultiCast.cpp \
ewol/Windows.cpp \
ewol/ShortCutManager.cpp \
ewol/widget/WidgetScrolled.cpp \
ewol/widget/WidgetShortCut.cpp \
ewol/widget/Drawable.cpp \
ewol/widget/Button.cpp \
ewol/widget/Label.cpp \