Select file upgraded and entry upgraded
This commit is contained in:
parent
ed50654058
commit
03972e6d7a
@ -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;
|
||||
|
@ -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
|
||||
|
@ -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);
|
||||
|
@ -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);
|
||||
|
@ -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;
|
||||
};
|
||||
|
@ -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;
|
||||
};
|
||||
|
Loading…
x
Reference in New Issue
Block a user