[DEV] better integration of the file chooser
This commit is contained in:
parent
9c8a3513a6
commit
3acf0bd148
50
data/ewol-gui-file-chooser.xml
Normal file
50
data/ewol-gui-file-chooser.xml
Normal file
@ -0,0 +1,50 @@
|
|||||||
|
<popup>
|
||||||
|
<sizer mode="vert" lock="true" fill="true" expand="true">
|
||||||
|
<sizer mode="hori">
|
||||||
|
<checkbox name="[{ID}]file-shooser:show-hiden-file">
|
||||||
|
<label>_T{ShowHiddenFiles}</label>
|
||||||
|
</checkbox>
|
||||||
|
<spacer expand="true,false"/>
|
||||||
|
<button name="[{ID}]file-shooser:button-validate">
|
||||||
|
<sizer mode="hori">
|
||||||
|
<image src="{ewol}THEME:GUI:Load.edf" fill="true" size="7,7mm" distance-field="true"/>
|
||||||
|
<label name="[{ID}]file-shooser:validate-label">_T{Validate}</label>
|
||||||
|
</sizer>
|
||||||
|
</button>
|
||||||
|
<button name="[{ID}]file-shooser:button-cancel">
|
||||||
|
<sizer mode="hori">
|
||||||
|
<image src="{ewol}THEME:GUI:Remove.edf" fill="true" size="7,7mm" distance-field="true"/>
|
||||||
|
<label name="[{ID}]file-shooser:cancel-label">_T{Cancel}</label>
|
||||||
|
</sizer>
|
||||||
|
</button>
|
||||||
|
</sizer>
|
||||||
|
<sizer mode="hori">
|
||||||
|
<spacer min-size="2,2mm"/>
|
||||||
|
<ListFileSystem name="[{ID}]file-shooser:list-folder"
|
||||||
|
min-size="20,0%"
|
||||||
|
expand="false,true"
|
||||||
|
show-hidden="false"
|
||||||
|
show-file="false"
|
||||||
|
show-folder="true"
|
||||||
|
show-temporary="false"/>
|
||||||
|
<spacer min-size="2,2mm"/>
|
||||||
|
<ListFileSystem name="[{ID}]file-shooser:list-files"
|
||||||
|
expand="true,true"
|
||||||
|
show-hidden="false"
|
||||||
|
show-file="true"
|
||||||
|
show-folder="false"
|
||||||
|
show-temporary="false"/>
|
||||||
|
<spacer min-size="2,2mm"/>
|
||||||
|
</sizer>
|
||||||
|
<sizer mode="hori">
|
||||||
|
<image name="[{ID}]file-shooser:img-file" src="{ewol}THEME:GUI:File.edf" expand="false" size="8,8mm" distance-field="true"/>
|
||||||
|
<entry name="[{ID}]file-shooser:entry-file" expand="true,false" fill="true,false"/>
|
||||||
|
</sizer>
|
||||||
|
<sizer mode="hori">
|
||||||
|
<image name="[{ID}]file-shooser:img-folder" src="{ewol}THEME:GUI:Folder.edf" expand="false" size="8,8mm" distance-field="true"/>
|
||||||
|
<entry name="[{ID}]file-shooser:entry-folder" expand="true,false" fill="true,false"/>
|
||||||
|
<image name="[{ID}]file-shooser:img-home" src="{ewol}THEME:GUI:Home.edf" expand="false" size="8,8mm" distance-field="true"/>
|
||||||
|
</sizer>
|
||||||
|
<label name="[{ID}]file-shooser:title-label">_T{Title}</label>
|
||||||
|
</sizer>
|
||||||
|
</popup>
|
@ -17,19 +17,29 @@ ewol::widget::Composer::Composer() :
|
|||||||
// nothing to do ...
|
// nothing to do ...
|
||||||
}
|
}
|
||||||
|
|
||||||
static ewol::WidgetShared composerGenerate(bool _modeFile, const std::string& _data) {
|
static ewol::WidgetShared composerGenerate(bool _modeFile, const std::string& _data, uint64_t _id) {
|
||||||
ewol::widget::Manager& widgetManager = ewol::getContext().getWidgetManager();
|
ewol::widget::Manager& widgetManager = ewol::getContext().getWidgetManager();
|
||||||
if (_data == "") {
|
if (_data == "") {
|
||||||
return nullptr;
|
return nullptr;
|
||||||
}
|
}
|
||||||
exml::Document doc;
|
exml::Document doc;
|
||||||
if (_modeFile == true) {
|
if (_modeFile == true) {
|
||||||
if (doc.load(_data) == false) {
|
std::string tmpData = etk::FSNodeReadAllData(_data);
|
||||||
|
// replace all elements:
|
||||||
|
if (_id != 0) {
|
||||||
|
tmpData = etk::replace(tmpData, "{ID}", etk::to_string(_id));
|
||||||
|
}
|
||||||
|
if (doc.parse(tmpData) == false) {
|
||||||
EWOL_ERROR(" can not load file XML : " << _data);
|
EWOL_ERROR(" can not load file XML : " << _data);
|
||||||
return nullptr;
|
return nullptr;
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
if (doc.parse(_data) == false) {
|
std::string tmpData = _data;
|
||||||
|
// replace all elements:
|
||||||
|
if (_id != 0) {
|
||||||
|
tmpData = etk::replace(tmpData, "{ID}", etk::to_string(_id));
|
||||||
|
}
|
||||||
|
if (doc.parse(tmpData) == false) {
|
||||||
EWOL_ERROR(" can not load file XML string...");
|
EWOL_ERROR(" can not load file XML string...");
|
||||||
return nullptr;
|
return nullptr;
|
||||||
}
|
}
|
||||||
@ -64,21 +74,26 @@ static ewol::WidgetShared composerGenerate(bool _modeFile, const std::string& _d
|
|||||||
return tmpWidget;
|
return tmpWidget;
|
||||||
}
|
}
|
||||||
|
|
||||||
ewol::WidgetShared ewol::widget::composerGenerateFile(const std::string& _data) {
|
ewol::WidgetShared ewol::widget::composerGenerateFile(const std::string& _data, uint64_t _id) {
|
||||||
return composerGenerate(true, _data);
|
return composerGenerate(true, _data, _id);
|
||||||
}
|
}
|
||||||
|
|
||||||
ewol::WidgetShared ewol::widget::composerGenerateString(const std::string& _data) {
|
ewol::WidgetShared ewol::widget::composerGenerateString(const std::string& _data, uint64_t _id) {
|
||||||
return composerGenerate(false, _data);
|
return composerGenerate(false, _data, _id);
|
||||||
}
|
}
|
||||||
|
|
||||||
ewol::widget::Composer::~Composer() {
|
ewol::widget::Composer::~Composer() {
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
bool ewol::widget::Composer::loadFromFile(const std::string& _fileName) {
|
bool ewol::widget::Composer::loadFromFile(const std::string& _fileName, uint64_t _id) {
|
||||||
exml::Document doc;
|
exml::Document doc;
|
||||||
if (doc.load(_fileName) == false) {
|
std::string tmpData = etk::FSNodeReadAllData(_fileName);
|
||||||
|
// replace all elements:
|
||||||
|
if (_id != 0) {
|
||||||
|
tmpData = etk::replace(tmpData, "{ID}", etk::to_string(_id));
|
||||||
|
}
|
||||||
|
if (doc.parse(tmpData) == false) {
|
||||||
EWOL_ERROR(" can not load file XML : " << _fileName);
|
EWOL_ERROR(" can not load file XML : " << _fileName);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
@ -101,9 +116,14 @@ bool ewol::widget::Composer::loadFromFile(const std::string& _fileName) {
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool ewol::widget::Composer::loadFromString(const std::string& _composerXmlString) {
|
bool ewol::widget::Composer::loadFromString(const std::string& _composerXmlString, uint64_t _id) {
|
||||||
exml::Document doc;
|
exml::Document doc;
|
||||||
if (doc.parse(_composerXmlString) == false) {
|
std::string tmpData = _composerXmlString;
|
||||||
|
// replace all elements:
|
||||||
|
if (_id != 0) {
|
||||||
|
tmpData = etk::replace(tmpData, "{ID}", etk::to_string(_id));
|
||||||
|
}
|
||||||
|
if (doc.parse(tmpData) == false) {
|
||||||
EWOL_ERROR(" can not load file XML string...");
|
EWOL_ERROR(" can not load file XML string...");
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
@ -35,21 +35,23 @@ namespace ewol {
|
|||||||
/**
|
/**
|
||||||
* @brief load a composition with a file
|
* @brief load a composition with a file
|
||||||
* @param[in] _fileName Name of the file
|
* @param[in] _fileName Name of the file
|
||||||
|
* @param[in] _id Unique ID that is used in replacing the balise "{ID}" inside the File (do nothing if == 0)
|
||||||
* @return true == > all done OK
|
* @return true == > all done OK
|
||||||
* @return false == > some error occured
|
* @return false == > some error occured
|
||||||
*/
|
*/
|
||||||
bool loadFromFile(const std::string& _fileName);
|
bool loadFromFile(const std::string& _fileName, uint64_t _id=0);
|
||||||
/**
|
/**
|
||||||
* @brief load a composition with a file
|
* @brief load a composition with a file
|
||||||
* @param[in] _composerXmlString xml to parse directly
|
* @param[in] _composerXmlString xml to parse directly
|
||||||
|
* @param[in] _id Unique ID that is used in replacing the balise "{ID}" inside the String (do nothing if == 0)
|
||||||
* @return true == > all done OK
|
* @return true == > all done OK
|
||||||
* @return false == > some error occured
|
* @return false == > some error occured
|
||||||
*/
|
*/
|
||||||
bool loadFromString(const std::string& _composerXmlString);
|
bool loadFromString(const std::string& _composerXmlString, uint64_t _id=0);
|
||||||
private:
|
private:
|
||||||
void requestDestroyFromChild(const ewol::ObjectShared& _child) override;
|
void requestDestroyFromChild(const ewol::ObjectShared& _child) override;
|
||||||
};
|
};
|
||||||
ewol::WidgetShared composerGenerateString(const std::string& _data = "");
|
ewol::WidgetShared composerGenerateString(const std::string& _data = "", uint64_t _id=0);
|
||||||
ewol::WidgetShared composerGenerateFile(const std::string& _data = "");
|
ewol::WidgetShared composerGenerateFile(const std::string& _data = "", uint64_t _id=0);
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
@ -56,58 +56,13 @@ ewol::widget::FileChooser::FileChooser() :
|
|||||||
|
|
||||||
void ewol::widget::FileChooser::init() {
|
void ewol::widget::FileChooser::init() {
|
||||||
ewol::widget::Composer::init();
|
ewol::widget::Composer::init();
|
||||||
std::string myDescription = std::string("")
|
// Load file with replacing the "{ID}" with the local ID of the widget ==> obtain unique ID
|
||||||
+ "<popup >\n"
|
loadFromFile("{ewol}DATA:ewol-gui-file-chooser.xml", getId());
|
||||||
+ " <sizer mode='vert' lock='true' fill='true' expand='true'>\n"
|
// Basic replacement of labels
|
||||||
+ " <sizer mode='hori'>\n"
|
propertySetOnWidgetNamed("[" + etk::to_string(getId()) + "]file-shooser:title-label", "value", propertyLabelTitle);
|
||||||
+ " <checkbox name='[" + etk::to_string(getId()) + "]file-shooser:show-hiden-file'>\n"
|
propertySetOnWidgetNamed("[" + etk::to_string(getId()) + "]file-shooser:validate-label", "value", propertyLabelValidate);
|
||||||
+ " <label>_T{ShowHiddenFiles}</label>\n"
|
propertySetOnWidgetNamed("[" + etk::to_string(getId()) + "]file-shooser:cancel-label", "value", propertyLabelCancel);
|
||||||
+ " </checkbox>\n"
|
|
||||||
+ " <spacer expand='true,false'/>\n"
|
|
||||||
+ " <button name='[" + etk::to_string(getId()) + "]file-shooser:button-validate'>\n"
|
|
||||||
+ " <sizer mode='hori'>\n"
|
|
||||||
+ " <image src='{ewol}THEME:GUI:Load.edf' fill='true' size='7,7mm' distance-field='true'/>\n"
|
|
||||||
+ " <label name='[" + etk::to_string(getId()) + "]file-shooser:validate-label'>" + *propertyLabelValidate + "</label>\n"
|
|
||||||
+ " </sizer>\n"
|
|
||||||
+ " </button>\n"
|
|
||||||
+ " <button name='[" + etk::to_string(getId()) + "]file-shooser:button-cancel'>\n"
|
|
||||||
+ " <sizer mode='hori'>\n"
|
|
||||||
+ " <image src='{ewol}THEME:GUI:Remove.edf' fill='true' size='7,7mm' distance-field='true'/>\n"
|
|
||||||
+ " <label name='[" + etk::to_string(getId()) + "]file-shooser:cancel-label'>" + *propertyLabelCancel + "</label>\n"
|
|
||||||
+ " </sizer>\n"
|
|
||||||
+ " </button>\n"
|
|
||||||
+ " </sizer>\n"
|
|
||||||
+ " <sizer mode='hori'>\n"
|
|
||||||
+ " <spacer min-size='2,2mm'/>\n"
|
|
||||||
+ " <ListFileSystem name='[" + etk::to_string(getId()) + "]file-shooser:list-folder'\n"
|
|
||||||
+ " min-size='20,0%'\n"
|
|
||||||
+ " expand='false,true'\n"
|
|
||||||
+ " show-hidden='false'\n"
|
|
||||||
+ " show-file='false'\n"
|
|
||||||
+ " show-folder='true'\n"
|
|
||||||
+ " show-temporary='false'/>\n"
|
|
||||||
+ " <spacer min-size='2,2mm'/>\n"
|
|
||||||
+ " <ListFileSystem name='[" + etk::to_string(getId()) + "]file-shooser:list-files'\n"
|
|
||||||
+ " expand='true,true'\n"
|
|
||||||
+ " show-hidden='false'\n"
|
|
||||||
+ " show-file='true'\n"
|
|
||||||
+ " show-folder='false'\n"
|
|
||||||
+ " show-temporary='false'/>\n"
|
|
||||||
+ " <spacer min-size='2,2mm'/>\n"
|
|
||||||
+ " </sizer>\n"
|
|
||||||
+ " <sizer mode='hori'>\n"
|
|
||||||
+ " <image name='[" + etk::to_string(getId()) + "]file-shooser:img-file' src='{ewol}THEME:GUI:File.edf' expand='false' size='8,8mm' distance-field='true'/>\n"
|
|
||||||
+ " <entry name='[" + etk::to_string(getId()) + "]file-shooser:entry-file' expand='true,false' fill='true,false'/>\n"
|
|
||||||
+ " </sizer>\n"
|
|
||||||
+ " <sizer mode='hori'>\n"
|
|
||||||
+ " <image name='[" + etk::to_string(getId()) + "]file-shooser:img-folder' src='{ewol}THEME:GUI:Folder.edf' expand='false' size='8,8mm' distance-field='true'/>\n"
|
|
||||||
+ " <entry name='[" + etk::to_string(getId()) + "]file-shooser:entry-folder' expand='true,false' fill='true,false'/>\n"
|
|
||||||
+ " <image name='[" + etk::to_string(getId()) + "]file-shooser:img-home' src='{ewol}THEME:GUI:Home.edf' expand='false' size='8,8mm' distance-field='true'/>\n"
|
|
||||||
+ " </sizer>\n"
|
|
||||||
+ " <label name='[" + etk::to_string(getId()) + "]file-shooser:title-label'>" + *propertyLabelTitle + "</label>\n"
|
|
||||||
+ " </sizer>\n"
|
|
||||||
+ "</popup>";
|
|
||||||
loadFromString(myDescription);
|
|
||||||
subBind(ewol::widget::CheckBox, "[" + etk::to_string(getId()) + "]file-shooser:show-hiden-file", signalValue, sharedFromThis(), &ewol::widget::FileChooser::onCallbackHidenFileChangeChangeValue);
|
subBind(ewol::widget::CheckBox, "[" + etk::to_string(getId()) + "]file-shooser:show-hiden-file", signalValue, sharedFromThis(), &ewol::widget::FileChooser::onCallbackHidenFileChangeChangeValue);
|
||||||
subBind(ewol::widget::Button, "[" + etk::to_string(getId()) + "]file-shooser:button-validate", signalPressed, sharedFromThis(), &ewol::widget::FileChooser::onCallbackListValidate);
|
subBind(ewol::widget::Button, "[" + etk::to_string(getId()) + "]file-shooser:button-validate", signalPressed, sharedFromThis(), &ewol::widget::FileChooser::onCallbackListValidate);
|
||||||
subBind(ewol::widget::Button, "[" + etk::to_string(getId()) + "]file-shooser:button-cancel", signalPressed, sharedFromThis(), &ewol::widget::FileChooser::onCallbackButtonCancelPressed);
|
subBind(ewol::widget::Button, "[" + etk::to_string(getId()) + "]file-shooser:button-cancel", signalPressed, sharedFromThis(), &ewol::widget::FileChooser::onCallbackButtonCancelPressed);
|
||||||
|
@ -236,6 +236,7 @@ def configure(target, my_module):
|
|||||||
my_module.copy_path('data/texturedDF.*','')
|
my_module.copy_path('data/texturedDF.*','')
|
||||||
my_module.copy_path('data/fontDistanceField/*','fontDistanceField')
|
my_module.copy_path('data/fontDistanceField/*','fontDistanceField')
|
||||||
my_module.copy_path('data/translate/*','translate/ewol')
|
my_module.copy_path('data/translate/*','translate/ewol')
|
||||||
|
my_module.copy_path('data/ewol-gui-*.xml')
|
||||||
|
|
||||||
# name of the dependency
|
# name of the dependency
|
||||||
my_module.add_depend([
|
my_module.add_depend([
|
||||||
|
Loading…
x
Reference in New Issue
Block a user