From ac54987af92889b4281cd6406ccb7612577496ee Mon Sep 17 00:00:00 2001 From: Edouard Dupin Date: Thu, 5 Jan 2012 18:36:01 +0100 Subject: [PATCH] Update the File chooser widget --- .../libewol/ewol/widgetMeta/FileChooser.cpp | 100 ++++++++++++++++-- Sources/libewol/ewol/widgetMeta/FileChooser.h | 3 + tutorial.boo | 58 ++++++++++ 3 files changed, 155 insertions(+), 6 deletions(-) create mode 100644 tutorial.boo diff --git a/Sources/libewol/ewol/widgetMeta/FileChooser.cpp b/Sources/libewol/ewol/widgetMeta/FileChooser.cpp index 9bd53ed6..bad9fc1e 100644 --- a/Sources/libewol/ewol/widgetMeta/FileChooser.cpp +++ b/Sources/libewol/ewol/widgetMeta/FileChooser.cpp @@ -73,7 +73,7 @@ class FileChooserFolderList : public ewol::List ClearElements(); }; - void AddElement(etk::String &element) + void AddElement(etk::String element) { etk::String* tmpEmement = new etk::String(element); m_listDirectory.PushBack(tmpEmement); @@ -180,13 +180,20 @@ class FileChooserFolderList : public ewol::List #undef __class__ #define __class__ "ewol::FileChooser(FileList)" +const char * const ewolEventFileChooserSelectFile = "ewol event file chooser Select File"; +const char * const ewolEventFileChooserValidateFile = "ewol event file chooser Validate File"; + class FileChooserFileList : public ewol::List { private: etk::VectorType m_listFile; + int32_t m_selectedLine; public: FileChooserFileList(void) { + m_selectedLine = -1; + AddEventId(ewolEventFileChooserSelectFile); + AddEventId(ewolEventFileChooserValidateFile); }; ~FileChooserFileList(void) { @@ -200,7 +207,7 @@ class FileChooserFileList : public ewol::List bg.alpha = 1.0; return bg; } - void AddElement(etk::String &element) + void AddElement(etk::String element) { etk::String* tmpEmement = new etk::String(element); m_listFile.PushBack(tmpEmement); @@ -217,6 +224,15 @@ class FileChooserFileList : public ewol::List OnRegenerateDisplay(); } + etk::String GetSelectedLine(void) + { + etk::String tmpVal = ""; + if (m_selectedLine >= 0) { + tmpVal = *(m_listFile[m_selectedLine]); + } + return tmpVal; + } + uint32_t GetNuberOfColomn(void) { return 1; @@ -249,13 +265,43 @@ class FileChooserFileList : public ewol::List bg.blue = 0.7; bg.alpha = 1.0; } + if (m_selectedLine == raw) { + bg.red = 0.6; + bg.green = 0.6; + bg.blue = 1.0; + bg.alpha = 1.0; + } return true; }; bool OnItemEvent(int32_t IdInput, ewol::eventInputType_te typeEvent, int32_t colomn, int32_t raw, etkFloat_t x, etkFloat_t y) { if (typeEvent == ewol::EVENT_INPUT_TYPE_SINGLE) { EWOL_INFO("Event on List : IdInput=" << IdInput << " colomn=" << colomn << " raw=" << raw ); + if (1 == IdInput) { + if (raw > m_listFile.Size() ) { + m_selectedLine = -1; + } else { + m_selectedLine = raw; + } + // need to regenerate the display of the list : + OnRegenerateDisplay(); + if (m_selectedLine >=0 ) { + // generate event extern : + return GenEventInputExternal(ewolEventFileChooserSelectFile, x, y); + } + return true; + } } + if (typeEvent == ewol::EVENT_INPUT_TYPE_DOUBLE) { + EWOL_INFO("Event Double on List : IdInput=" << IdInput << " colomn=" << colomn << " raw=" << raw ); + if (1 == IdInput) { + if (m_selectedLine >=0 ) { + // generate event extern : + return GenEventInputExternal(ewolEventFileChooserValidateFile, x, y); + } + } + } + return false; return false; } @@ -281,7 +327,7 @@ ewol::FileChooser::FileChooser(void) m_widgetCurrentFolderId = -1; m_widgetListFolderId = -1; m_widgetListFileId = -1; - + m_hasSelectedFile = false; ewol::SizerVert * mySizerVert = NULL; ewol::SizerHori * mySizerHori = NULL; @@ -328,6 +374,8 @@ ewol::FileChooser::FileChooser(void) mySizerHori->SubWidgetAdd(mySpacer); myListFile = new FileChooserFileList(); m_widgetListFileId = myListFile->GetWidgetId(); + myListFile->ExternLinkOnEvent("ewol event file chooser Select File", GetWidgetId(), ewolEventFileChooserSelectFile); + myListFile->ExternLinkOnEvent("ewol event file chooser Validate File", GetWidgetId(), ewolEventFileChooserValidateFile); myListFile->SetExpendX(true); myListFile->SetFillX(true); myListFile->SetExpendY(true); @@ -407,9 +455,35 @@ bool ewol::FileChooser::OnEventAreaExternal(int32_t widgetID, const char * gener //==> this is an internal event ... FileChooserFolderList * myListFolder = (FileChooserFolderList *)ewol::widgetManager::Get(m_widgetListFolderId); etk::String tmpString = myListFolder->GetSelectedLine(); - m_folder = m_folder + "/" + tmpString; + m_folder = m_folder + tmpString; + char buf[MAX_FILE_NAME]; + memset(buf, 0, MAX_FILE_NAME); + char * ok; + ok = realpath(m_folder.c_str(), buf); + if (!ok) { + EWOL_ERROR("Error to get the real path"); + m_folder = "/"; + } else { + m_folder = buf; + } + if (m_folder != "/" ) { + m_folder += "/"; + } UpdateCurrentFolder(); + m_hasSelectedFile = false; return true; + } else if (ewolEventFileChooserSelectFile == eventExternId) { + m_hasSelectedFile = true; + FileChooserFileList * myListFile = (FileChooserFileList *)ewol::widgetManager::Get(m_widgetListFileId); + m_file = myListFile->GetSelectedLine(); + } else if (ewolEventFileChooserValidateFile == eventExternId) { + m_hasSelectedFile = true; + FileChooserFileList * myListFile = (FileChooserFileList *)ewol::widgetManager::Get(m_widgetListFileId); + m_file = myListFile->GetSelectedLine(); + // select the File ==> generate a validate + return GenEventInputExternal(ewolEventFileChooserValidate, x, y);; + } else if (ewolEventFileChooserValidate == eventExternId && false == m_hasSelectedFile) { + return false; } return GenEventInputExternal(eventExternId, x, y); }; @@ -426,7 +500,8 @@ void ewol::FileChooser::UpdateCurrentFolder(void) myListFolder->ClearElements(); myEntry->SetValue(m_folder); - + myListFolder->AddElement(etk::String(".")); + myListFolder->AddElement(etk::String("..")); DIR *dir; struct dirent *ent; dir = opendir(m_folder.c_str()); @@ -437,7 +512,9 @@ void ewol::FileChooser::UpdateCurrentFolder(void) if (DT_REG == ent->d_type) { myListFile->AddElement(tmpString); } else if (DT_DIR == ent->d_type) { - myListFolder->AddElement(tmpString); + if (tmpString != "." && tmpString != "..") { + myListFolder->AddElement(tmpString); + } } } closedir(dir); @@ -446,3 +523,14 @@ void ewol::FileChooser::UpdateCurrentFolder(void) } } + +etk::String ewol::FileChooser::GetCompleateFileName(void) +{ + + etk::String tmpString = m_folder; + tmpString += "/"; + tmpString += m_file; + return tmpString; +} + + diff --git a/Sources/libewol/ewol/widgetMeta/FileChooser.h b/Sources/libewol/ewol/widgetMeta/FileChooser.h index 0bcc0e9c..854fd244 100644 --- a/Sources/libewol/ewol/widgetMeta/FileChooser.h +++ b/Sources/libewol/ewol/widgetMeta/FileChooser.h @@ -40,6 +40,7 @@ namespace ewol { void SetValidateLabel(etk::String label); void SetCancelLabel(etk::String label); void SetFolder(etk::String folder); + etk::String GetCompleateFileName(void); void UpdateCurrentFolder(void); private: int32_t m_widgetTitleId; @@ -48,7 +49,9 @@ namespace ewol { int32_t m_widgetCurrentFolderId; int32_t m_widgetListFolderId; int32_t m_widgetListFileId; + bool m_hasSelectedFile; etk::String m_folder; + etk::String m_file; }; }; diff --git a/tutorial.boo b/tutorial.boo new file mode 100644 index 00000000..237d4819 --- /dev/null +++ b/tutorial.boo @@ -0,0 +1,58 @@ +## Build the NDK part ... +cd /home/edupin/progperso/android/ndk-r7/ +export NDK_PROJECT_PATH=/home/edupin/progperso/android/ndk-r7/samples/hello-jni/ +./ndk-build +## ==> now all is OK + + +# basic SDK folder : +export PATH=$PATH:/home/edupin/progperso/android/sdk-r15/tools/:/home/edupin/progperso/android/sdk-r15/platform-tools/ + +# configure angroide SDK : +# run : +android +# ==> add the SDK needed for android you will use like android 2.3.3 for xperia X10 +# ... wait download ... + +#Display list of target ... +android list targets + +# need to generate the application APK ... +cd /home/edupin/progperso/android/ndk-r7/samples/hello-jni/ +android update project -p . -s --target 1 + +#install ant with aptitude ... + +ant -Dsdk.dir=/home/edupin/progperso/android/sdk-r15/ release + +# pb : warning: 'includeantruntime' is not set +# solve with set : + +# missing javac +# solve : install openjdk + +# kill adb +adb kill-server +# install application +sudo /home/edupin/progperso/android/sdk-r15/platform-tools/adb install ./bin/HelloJni-release-unsigned.apk +# result : Failure [INSTALL_PARSE_FAILED_NO_CERTIFICATES] + + +export PATH=/usr/lib/lightdm/lightdm:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/home/edupin/.bin:/prog/prog/hexViewer:/home/edupin/progperso/android/sdk-r15/tools/:/home/edupin/progperso/android/sdk-r15/platform-tools/ + + +pb avec la table Sony S: + +Faire la manip : +The following procedure has confirmed that ubuntu 11.04. +1. Enable debug mode for sony tablet S +2. Add line /etc/udev/rules.d/51-android.rules +SUBSYSTEM=="usb", ATTR{idVendor}=="054c", MODE="0666", GROUP="plugdev" +3. Change file mode +sudo chmod a+r /etc/udev/rules.d/51-android.rules +4. Add line idVendor to ~/.android/adb_usb.ini +0x054C +5. adb kill-server ; sudo adb start-server + + +