Select file upgraded and entry upgraded

This commit is contained in:
Edouard Dupin 2012-07-10 12:27:57 +02:00
parent ed50654058
commit 03972e6d7a
6 changed files with 107 additions and 55 deletions

View File

@ -82,6 +82,7 @@ char* ewol::GetCharTypeMoveEvent(eventKbMoveType_te type)
*/
ewol::Widget::Widget(void)
{
m_limitMouseEvent = 3;
m_needRegenerateDisplay = true;
m_currentDrawId = 0;
m_currentCreateId = 1;

View File

@ -338,6 +338,29 @@ namespace ewol {
* @return ---
*/
virtual void OnLostFocus(void) {};
// ----------------------------------------------------------------------------------------------------------------
// -- Mouse event properties Area
// ----------------------------------------------------------------------------------------------------------------
private:
int32_t m_limitMouseEvent; //!< this is to limit the number of mouse event that the widget can supported
public:
/**
* @brief Get the number of mouse event supported
* @param ---
* @return return the number of event that the mouse supported [0..3]
*/
int32_t GetMouseLimit(void) { return m_limitMouseEvent; };
/**
* @brief Get the number of mouse event supported
* @param[in] numberState The number of event that the mouse supported [0..3]
* @return ---
*/
void SetMouseLimit(int32_t numberState) { m_limitMouseEvent = numberState; };
// ----------------------------------------------------------------------------------------------------------------
// -- Periodic call Area
// ----------------------------------------------------------------------------------------------------------------
protected:
/**
* @brief Request that the current widegt have a periodic call

View File

@ -350,17 +350,23 @@ void ewol::eventInput::State(ewol::inputType_te type, int pointerID, bool isDown
eventTable[pointerID].downStart = pos;
// save start time
eventTable[pointerID].lastTimeEvent = currentTime;
if (eventTable[pointerID].nbClickEvent == 0) {
if( eventTable[pointerID].nbClickEvent == 0
&& eventTable[pointerID].curentWidgetEvent != NULL
&& eventTable[pointerID].curentWidgetEvent->GetMouseLimit()>0 ) {
// generate event SINGLE :
eventTable[pointerID].nbClickEvent++;
EWOL_VERBOSE("GUI : Input ID=" << pointerID << "==>" << eventTable[pointerID].destinationInputId << " [SINGLE] " << pos);
localEventInput(type, eventTable[pointerID].curentWidgetEvent, eventTable[pointerID].destinationInputId, ewol::EVENT_INPUT_TYPE_SINGLE, pos);
} else if (eventTable[pointerID].nbClickEvent == 1) {
} else if( eventTable[pointerID].nbClickEvent == 1
&& eventTable[pointerID].curentWidgetEvent != NULL
&& eventTable[pointerID].curentWidgetEvent->GetMouseLimit()>1 ) {
// generate event DOUBLE :
eventTable[pointerID].nbClickEvent++;
EWOL_VERBOSE("GUI : Input ID=" << pointerID << "==>" << eventTable[pointerID].destinationInputId << " [DOUBLE] " << pos);
localEventInput(type, eventTable[pointerID].curentWidgetEvent, eventTable[pointerID].destinationInputId, ewol::EVENT_INPUT_TYPE_DOUBLE, pos);
} else if (eventTable[pointerID].nbClickEvent == 2) {
} else if( eventTable[pointerID].nbClickEvent == 2
&& eventTable[pointerID].curentWidgetEvent != NULL
&& eventTable[pointerID].curentWidgetEvent->GetMouseLimit()>2 ) {
// generate event TRIPLE :
eventTable[pointerID].nbClickEvent++;
EWOL_VERBOSE("GUI : Input ID=" << pointerID << "==>" << eventTable[pointerID].destinationInputId << " [TRIPLE] " << pos);

View File

@ -221,11 +221,34 @@ bool ewol::Entry::OnEventInput(ewol::inputType_te type, int32_t IdInput, eventIn
//EWOL_DEBUG("Event on Entry ...");
if (1 == IdInput) {
if (ewol::EVENT_INPUT_TYPE_SINGLE == typeEvent) {
// nothing to do ...
GenerateEventId(ewolEventEntryClick);
ewol::widgetManager::FocusKeep(this);
KeepFocus();
MarkToReedraw();
Vector2D<float> relPos = RelativePosition(pos);
// try to find the new cursor position :
int32_t fontId = GetDefaultFontId();
etk::UString tmpDisplay = m_data.Extract(0, m_displayStartPosition);
int32_t displayHidenSize = ewol::GetWidth(fontId, tmpDisplay);
//EWOL_DEBUG("hidenSize : " << displayHidenSize);
int32_t newCursorPosition = -1;
int32_t tmpTextOriginX = m_borderSize + 2*m_paddingSize;
for (int32_t iii=0; iii<m_data.Size(); iii++) {
tmpDisplay = m_data.Extract(0, iii);
int32_t tmpWidth = ewol::GetWidth(fontId, tmpDisplay) - displayHidenSize;
if (tmpWidth>=relPos.x-tmpTextOriginX) {
newCursorPosition = iii;
break;
}
}
if (newCursorPosition == -1) {
newCursorPosition = m_data.Size();
}
m_displayCursorPos = newCursorPosition;
return true;
} else if (ewol::EVENT_INPUT_TYPE_DOUBLE == typeEvent) {
// TODO : selected area ...
} else if (ewol::EVENT_INPUT_TYPE_TRIPLE == typeEvent) {
// TODO : select all the line
}
}
return false;
@ -244,7 +267,11 @@ bool ewol::Entry::OnEventKb(eventKbType_te typeEvent, uniChar_t unicodeData)
if( typeEvent == ewol::EVENT_KB_TYPE_DOWN) {
//EWOL_DEBUG("Entry input data ... : \"" << unicodeData << "\" " );
//return GenEventInputExternal(ewolEventEntryEnter, -1, -1);
if (0x7F == unicodeData) {
if( '\n' == unicodeData
|| '\r' == unicodeData) {
GenerateEventId(ewolEventEntryEnter, m_data);
return true;
} else if (0x7F == unicodeData) {
// SUPPR :
if (m_data.Size() > 0 && m_displayCursorPos<m_data.Size()) {
m_data.Remove(m_displayCursorPos, 1);

View File

@ -77,6 +77,7 @@ class FileChooserFolderList : public ewol::List
{
AddEventId(ewolEventFileChooserSelectFolder);
m_selectedLine = -1;
SetMouseLimit(2);
};
~FileChooserFolderList(void)
{
@ -118,11 +119,7 @@ class FileChooserFolderList : public ewol::List
virtual color_ts GetBasicBG(void) {
color_ts bg;
bg.red = 0;
bg.green = 0;
bg.blue = 0;
bg.alpha = 0x30;
color_ts bg(0x00000010);
return bg;
}
@ -144,18 +141,12 @@ class FileChooserFolderList : public ewol::List
}
fg = etk::color::color_Black;
if (raw % 2) {
bg = etk::color::color_White;
bg = 0xFFFFFF00;
} else {
bg.red = 0x7F;
bg.green = 0x7F;
bg.blue = 0x7F;
bg.alpha = 0xFF;
bg = 0xBFBFBFFF;
}
if (m_selectedLine == raw) {
bg.red = 0x8F;
bg.green = 0x8F;
bg.blue = 0xFF;
bg.alpha = 0xFF;
bg = 0x8F8FFFFF;
}
return true;
};
@ -243,17 +234,14 @@ class FileChooserFileList : public ewol::List
m_selectedLine = -1;
AddEventId(ewolEventFileChooserSelectFile);
AddEventId(ewolEventFileChooserValidateFile);
SetMouseLimit(2);
};
~FileChooserFileList(void)
{
ClearElements();
};
virtual color_ts GetBasicBG(void) {
color_ts bg;
bg.red = 0;
bg.green = 0;
bg.blue = 0;
bg.alpha = 0x30;
color_ts bg(0x00000010);
return bg;
}
void AddElement(etk::UString element)
@ -287,7 +275,22 @@ class FileChooserFileList : public ewol::List
}
return tmpVal;
}
// select the specific file
void SelectFile( etk::UString data) {
// remove selected line
m_selectedLine = -1;
// search the coresponding file :
for (int32_t iii=0; iii<m_listFile.Size(); iii++) {
if (NULL!=m_listFile[iii]) {
if (*m_listFile[iii] == data) {
// we find the line :
m_selectedLine = iii;
break;
}
}
}
MarkToReedraw();
}
uint32_t GetNuberOfColomn(void) {
return 1;
@ -307,21 +310,12 @@ class FileChooserFileList : public ewol::List
}
fg = etk::color::color_Black;
if (raw % 2) {
bg.red = 0xCF;
bg.green = 0xFF;
bg.blue = 0xFF;
bg.alpha = 0xFF;
bg = 0xFFFFFF00;
} else {
bg.red = 0x9F;
bg.green = 0x9F;
bg.blue = 0x9F;
bg.alpha = 0xFF;
bg = 0xBFBFBFFF;
}
if (m_selectedLine == raw) {
bg.red = 0x8F;
bg.green = 0x8F;
bg.blue = 0xFF;
bg.alpha = 0xFF;
bg = 0x8F8FFFFF;
}
return true;
};
@ -402,12 +396,14 @@ class FileChooserFileList : public ewol::List
#define __class__ "FileChooser"
extern const char * const ewolEventFileChooserCancel = "ewol-event-file-chooser-cancel";
extern const char * const ewolEventFileChooserValidate = "ewol-event-file-chooser-validate";
extern const char * const ewolEventFileChooserHidenFileChange = "ewol-event-file-chooser-Show/Hide-hiden-Files";
extern const char * const ewolEventFileChooserEntryFolder = "ewol-event-file-chooser-modify-entry-folder";
extern const char * const ewolEventFileChooserEntryFile = "ewol-event-file-chooser-modify-entry-file";
extern const char * const ewolEventFileChooserHome = "ewol-event-file-chooser-home";
extern const char * const ewolEventFileChooserCancel = "ewol-event-file-chooser-cancel";
extern const char * const ewolEventFileChooserValidate = "ewol-event-file-chooser-validate";
extern const char * const ewolEventFileChooserHidenFileChange = "ewol-event-file-chooser-Show/Hide-hiden-Files";
extern const char * const ewolEventFileChooserEntryFolder = "ewol-event-file-chooser-modify-entry-folder";
extern const char * const ewolEventFileChooserEntryFolderEnter = "ewol-event-file-chooser-modify-entry-folder-enter";
extern const char * const ewolEventFileChooserEntryFile = "ewol-event-file-chooser-modify-entry-file";
extern const char * const ewolEventFileChooserEntryFileEnter = "ewol-event-file-chooser-modify-entry-file-enter";
extern const char * const ewolEventFileChooserHome = "ewol-event-file-chooser-home";
ewol::FileChooser::FileChooser(void)
@ -415,8 +411,6 @@ ewol::FileChooser::FileChooser(void)
AddEventId(ewolEventFileChooserCancel);
AddEventId(ewolEventFileChooserValidate);
m_hasSelectedFile = false;
m_widgetTitle = NULL;
m_widgetValidate = NULL;
m_widgetCancel = NULL;
@ -458,6 +452,7 @@ ewol::FileChooser::FileChooser(void)
m_widgetCurrentFolder = new ewol::Entry(m_folder);
m_widgetCurrentFolder->RegisterOnEvent(this, ewolEventEntryModify, ewolEventFileChooserEntryFolder);
m_widgetCurrentFolder->RegisterOnEvent(this, ewolEventEntryEnter, ewolEventFileChooserEntryFolderEnter);
m_widgetCurrentFolder->SetExpendX(true);
m_widgetCurrentFolder->SetFillX(true);
m_widgetCurrentFolder->SetWidth(200);
@ -474,6 +469,7 @@ ewol::FileChooser::FileChooser(void)
mySizerHori->SubWidgetAdd(myImage);
m_widgetCurrentFileName = new ewol::Entry(m_file);
m_widgetCurrentFileName->RegisterOnEvent(this, ewolEventEntryModify, ewolEventFileChooserEntryFile);
m_widgetCurrentFileName->RegisterOnEvent(this, ewolEventEntryEnter, ewolEventFileChooserEntryFileEnter);
m_widgetCurrentFileName->SetExpendX(true);
m_widgetCurrentFileName->SetFillX(true);
m_widgetCurrentFileName->SetWidth(200);
@ -629,10 +625,12 @@ void ewol::FileChooser::OnReceiveMessage(ewol::EObject * CallerObject, const cha
// TODO : Change the folder, if it exit ...
} else if (ewolEventFileChooserEntryFile == eventId) {
//==> change the file name
if (NULL != m_widgetCurrentFileName) {
m_file = m_widgetCurrentFileName->GetValue();
m_file = data;
// Update the selected file in the list :
FileChooserFileList * myListFile = EWOL_CAST_WIDGET_FILE_LIST(m_widgetListFile);
if (myListFile != NULL) {
myListFile->SelectFile(m_file);
}
// TODO : Remove file selection
} else if (ewolEventFileChooserCancel == eventId) {
//==> Auto remove ...
GenerateEventId(eventId);
@ -663,15 +661,14 @@ void ewol::FileChooser::OnReceiveMessage(ewol::EObject * CallerObject, const cha
}
SetFileName("");
UpdateCurrentFolder();
m_hasSelectedFile = false;
} else if (ewolEventFileChooserSelectFile == eventId) {
m_hasSelectedFile = true;
FileChooserFileList * myListFile = EWOL_CAST_WIDGET_FILE_LIST(m_widgetListFile);
etk::UString file = myListFile->GetSelectedLine();
SetFileName(file);
GenerateEventId(eventId);
} else if( ewolEventFileChooserValidateFile == eventId
|| (ewolEventFileChooserValidate == eventId && true == m_hasSelectedFile) ) {
} else if( eventId == ewolEventFileChooserValidateFile
|| (eventId == ewolEventFileChooserValidate && m_file != "" )
|| (eventId == ewolEventFileChooserEntryFileEnter && m_file != "" ) ) {
// select the File ==> generate a validate
GenerateEventId(ewolEventFileChooserValidate);
MarkToRemove();
@ -694,7 +691,6 @@ void ewol::FileChooser::OnReceiveMessage(ewol::EObject * CallerObject, const cha
}
SetFileName("");
UpdateCurrentFolder();
m_hasSelectedFile = false;
}
return;
};

View File

@ -88,7 +88,6 @@ namespace ewol {
ewol::Widget* m_widgetListFolder;
ewol::Widget* m_widgetListFile;
ewol::CheckBox* m_widgetCheckBox;
bool m_hasSelectedFile;
etk::UString m_folder;
etk::UString m_file;
};