Update the File chooser widget

This commit is contained in:
Edouard Dupin 2012-01-05 18:36:01 +01:00
parent 56926c5f96
commit ac54987af9
3 changed files with 155 additions and 6 deletions

View File

@ -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<etk::String *> 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;
}

View File

@ -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;
};
};

58
tutorial.boo Normal file
View File

@ -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 : <javac .... includeantruntime="false" .../>
# 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