bonjour les codeurs , je me suis lancé dans l'écriture de petit outils
utilisant les nouvelles propriété de l'objet FileReference ( data,
save ) , très pratique , mais avants d'arriver jusqu'a ces deux
methodes, je me suis retrouvé face a ce que je pourrais appeler un
bug !
je vous explique mais en code :
package local.file {
import flash.events.Event;
import flash.events.IEventDispatcher;
import flash.net.FileFilter;
import flash.net.FileReference;
import flash.net.FileReferenceList;
/**
* @author goabonga
*/
public class AsFileSelector{
//
public static const TextFile : FileFilter = new
FileFilter('Texte',
'*.txt');
public static const CsvFile : FileFilter = new FileFilter('Csv',
'*.txt;*.csv');
public static const JpgFile : FileFilter = new FileFilter('Image
jpeg (*.jpg,*.jpeg)', '*.jpg;*.jpeg');
public static const GifFile : FileFilter = new FileFilter('Image
gif', '*.gif');
public static const SwfFile : FileFilter = new FileFilter('Flash
movie', '*.swf');
public static const FlvFile : FileFilter = new FileFilter('Video
flv', '*.flv');
/**
* AsFileSelector
*/
public function AsFileSelector() {
}
/**
*
*/
public function select(multi : Boolean = false,filter : Array =
null) : Boolean {
var o : Boolean;
if(multi) {
trace('mode multi');
o = multi_selector(filter);
} else {
trace('mode single');
o = single_selector(filter);
}
return o;
}
/**
*
*/
private function single_selector(filter : Array ) : Boolean {
var o : Boolean;
if(filter != null) {
trace('with filter : ' + filter);
}
var selector : FileReference = new FileReference();
configureListeners(selector);
o = selector.browse(filter);
return o;
}
/**
*
*/
private function multi_selector(filter : Array ) : Boolean {
var o : Boolean;
if(filter != null) {
trace('with filter : ' + filter);
}
var selector : FileReferenceList = new
FileReferenceList();
configureListeners(selector);
o = selector.browse(filter);
return o;
}
/**
*
*/
private function configureListeners(dispatcher :
IEventDispatcher) :
void {
dispatcher.addEventListener(Event.SELECT,
selectHandler);
dispatcher.addEventListener(Event.CANCEL,
cancelHandler);
}
/**
*
*/
private function cancelHandler(event : Event) : void {
trace("cancelHandler: " + event);
}
/**
*
*/
private function selectHandler(event : Event) : void {
trace('e : ' + event);
if(event.target is FileReference) {
var file : FileReference =
FileReference(event.target);
trace("selectHandler: name=" + file.name);
} else {
var files : FileReferenceList =
FileReferenceList(event.target);
trace("selectHandler: length=" +
files.fileList.length);
}
}
}
}
puis pour tester :
package test {
import local.file.AsFileSelector;
import flash.display.Sprite;
import flash.events.Event;
import flash.events.KeyboardEvent;
import flash.net.FileReferenceList;
/**
* @author goabonga
*/
public class TestFileSelector extends Sprite {
public function TestFileSelector() {
var selector : AsFileSelector = new AsFileSelector();
trace();
var on_keydown : Function = function(e :
KeyboardEvent):void {
//press s
if(e.keyCode == 83 ) {
trace(selector.select());
/**
* mode single
* true
* e : [Event type="select"
bubbles=false cancelable=false
eventPhase=2]
* selectHandler: name=Chris.jpg
*/
}
//press i
if(e.keyCode == 73) {
trace(selector.select(false,
[AsFileSelector.JpgFile]));
/**
* mode single
* with filter : [object FileFilter]
* true
* e : [Event type="select"
bubbles=false cancelable=false
eventPhase=2]
* selectHandler: name=Chris.jpg
*/
}
//press m
if(e.keyCode == 77 ) {
trace(selector.select(true,
[AsFileSelector.JpgFile]));
/**
* mode multi
* with filter : [object FileFilter]
* true
*/
}
//press t
if(e.keyCode == 84 ) {
var files : FileReferenceList = new
FileReferenceList();
var f : Function = function(e :
Event):void {
trace('e:' + e);
trace('e:' + (e.target as
FileReferenceList).fileList);
/**
* e:[Event type="select"
bubbles=false cancelable=false
eventPhase=2]
*/
};
files.addEventListener(Event.SELECT, f);
files.browse([AsFileSelector.JpgFile]);
}
//press n
if(e.keyCode == 78 ) {
trace(selector.select(true));
/**
* mode multi
* true
*/
}
};
stage.addEventListener(KeyboardEvent.KEY_DOWN,
on_keydown);
}
}
}
le truc que je ne comprend pas ? c'est que lorsque j'appelle m'a
function :
select(true pour le mode multiple , ...) ben je n'arrive pas a ecouter
le Event.Select pourtant quand on regarde dans ma class permettant
d'effectuer mes test si je lance un simple :
var files : FileReferenceList = new FileReferenceList();
var f : Function = function(e : Event):void {
trace('e:' + e);
trace('e:' + (e.target as FileReferenceList).fileList);
/**
* e:[Event type="select" bubbles=false cancelable=false eventPhase=2]
*/
};
files.addEventListener(Event.SELECT, f);
files.browse([AsFileSelector.JpgFile]);
tout fonctionne à merveille ?
Voila j'espère que je n'ai pas dis n'importe quoi et que vous
arriverez a me comprendre .
@chris
--~--~---------~--~----~------------~-------~--~----~
Vous avez reçu ce message, car vous êtes abonné au groupe Groupe "FCNG" de
Google Groupes.
Pour transmettre des messages à ce groupe, envoyez un e-mail à
l'adresse [email protected]
Pour résilier votre abonnement à ce groupe, envoyez un e-mail à
l'adresse [email protected]
Pour afficher d'autres options, visitez ce groupe à l'adresse
http://groups.google.com/group/FCNG?hl=fr
-~----------~----~----~----~------~----~------~--~---