<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Luis Adrián Rosas Wiedfeldt &#187; Interfaz gráfica</title>
	<atom:link href="http://www.nomeva.com/tag/interfaz-grafica/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.nomeva.com</link>
	<description>Pon un lego en tu vida</description>
	<lastBuildDate>Wed, 20 Jan 2010 08:34:04 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.1</generator>
		<item>
		<title>Tutorial JSFL &#8211; Comandos con interfaz gráfica II</title>
		<link>http://www.nomeva.com/2008/11/09/tutorial-jsfl-comandos-con-interfaz-grafica-ii/</link>
		<comments>http://www.nomeva.com/2008/11/09/tutorial-jsfl-comandos-con-interfaz-grafica-ii/#comments</comments>
		<pubDate>Sun, 09 Nov 2008 14:19:37 +0000</pubDate>
		<dc:creator>Luis Adrián</dc:creator>
				<category><![CDATA[Flash]]></category>
		<category><![CDATA[JSFL]]></category>
		<category><![CDATA[Tutoriales]]></category>
		<category><![CDATA[comandos]]></category>
		<category><![CDATA[FLfile]]></category>
		<category><![CDATA[Interfaz gráfica]]></category>

		<guid isPermaLink="false">http://www.nomeva.com/?p=238</guid>
		<description><![CDATA[Este tutorial continua la serie de tutoriales de JSFL que empecé a escribir en este post, no es el tercero sino la segunda parte del segundo tutorial de Comandos con interfaz gráfica. En esta ocasión vamos a crear un comando que nos ayude a crear un XML con el listado de ficheros jpg que se [...]]]></description>
			<content:encoded><![CDATA[<p style="text-align: center;"><img class="aligncenter" title="Comando Crea XML de imágenes" src="http://www.nomeva.com/imagenes/crea_xml_imagenes.jpg" alt="" width="370" height="230" /></p>
<p>Este tutorial continua la serie de <a href="../../../../../category/tutoriales/">tutoriales</a> de <strong><a href="../../../../../category/jsfl/">JSFL</a></strong> que empecé a escribir en este <a href="../../../../../2008/09/26/tutorial-jsfl-introduccion-a-comando/">post</a>, no es el tercero sino la segunda parte del <a href="../../../../../2008/10/12/tutorial-jsfl-comandos-con-interfaz-grafica/">segundo tutorial</a> de <strong>Comandos con interfaz gráfica</strong>.</p>
<p>En esta ocasión vamos a crear un comando que nos ayude a crear un <strong><a href="http://es.wikipedia.org/wiki/XML">XML</a></strong> con el listado de ficheros <strong><a href="http://es.wikipedia.org/wiki/JPEG">jpg</a></strong> que se encuentran en un directorio que indicaremos mediante un cuadro de diálogo <strong>Buscar carpeta</strong>.</p>
<p>En este tutorial veremos lo siguiente:</p>
<ul class="unIndentedList">
<li> Interfaz gráfica basada en una película <strong><a href="http://es.wikipedia.org/wiki/Animaciones_Flash">swf</a></strong>.</li>
<li> Uso de <strong><em>Función <a href="http://www.google.es/url?sa=t&amp;source=web&amp;ct=res&amp;cd=1&amp;url=http%3A%2F%2Flivedocs.adobe.com%2Fflash%2F9.0_es%2Fmain%2F00001194.html&amp;ei=18EWSezKMoyE0QTmra2GCw&amp;usg=AFQjCNGeMJW8TlQO508U7T9HIBBGU_JpJw&amp;sig2=nn9mSHwSlkNoQUYeaD58DQ">MMExecute</a></em></strong>.</li>
<li> Uso de cuadro de diálogo <strong>Buscar carpeta</strong>.</li>
<li> Introducción al <strong><em>objeto <a href="http://www.google.es/url?sa=t&amp;source=web&amp;ct=res&amp;cd=1&amp;url=http%3A%2F%2Flivedocs.adobe.com%2Fflash%2F9.0_es%2Fmain%2F00004188.html&amp;ei=CsYWSeKsCY760QSDxezsCg&amp;usg=AFQjCNHaJDEYD_sTq3YGM3k1gA83JVKerQ&amp;sig2=x5DKiU9q9skRq3U6oOGspg">FLfile</a></em></strong>.</li>
</ul>
<h3><strong>Interfaz gráfica basada en una película swf</strong></h3>
<p>Lo primero que debemos hacer es indicar en el fichero JSFL el uso de un xmlPanel mediante el siguiente código:</p>
<pre lang="javascript">fl.getDocumentDOM().xmlPanel(fl.configURI + "panel.xml");</pre>
<p>Lo siguiente que debemos hacer es indicar en el fichero xml de configuración de interfaz gráfica del comando el uso de una película Flash, mediante el siguiente código:</p>
<pre lang="xml"><flash src="panel.swf" width="370"   height="230"  id="settings" /></pre>
<p>Listo, con esto ya tenemos un comando que utiliza un fichero xml para configurar su interfaz gráfica y esta interfaz muestra una película swf.</p>
<h3><strong>Uso de <em>Función MMExecute</em></strong></h3>
<p>La función <strong><a href="http://www.google.es/url?sa=t&amp;source=web&amp;ct=res&amp;cd=1&amp;url=http%3A%2F%2Flivedocs.adobe.com%2Fflash%2F9.0_es%2Fmain%2F00001194.html&amp;ei=18EWSezKMoyE0QTmra2GCw&amp;usg=AFQjCNGeMJW8TlQO508U7T9HIBBGU_JpJw&amp;sig2=nn9mSHwSlkNoQUYeaD58DQ">MMExecute</a></strong> sirve para ejecutar scripts JSFL desde una película swf, esto lo vamos a necesitar en este tutorial para ejecutar las siguientes acciones:</p>
<ul class="unIndentedList">
<li> Aceptar
<pre lang="javascript">MMExecute(‘fl.xmlui.accept();');</pre>
</li>
<li> Cancelar
<pre lang="javascript">MMExecute(‘fl.xmlui.cancel();');</pre>
</li>
<li> Asignar valor
<pre lang="javascript">MMExecute(‘fl.xmlui.set("variable", "valor");');</pre>
</li>
<li> Abrir cuadro de diálogo <strong>Buscar carpeta</strong>
<pre lang="javascript">MMExecute(‘fl.browseForFolderURL("Mensaje");‘);</pre>
</li>
</ul>
<p>Este código lo podemos ejecutar en eventos de botones como onClick, onRelease, etcétera desde nuestra interfaz de usuario.</p>
<p>La función <strong><a href="http://www.google.es/url?sa=t&amp;source=web&amp;ct=res&amp;cd=1&amp;url=http%3A%2F%2Flivedocs.adobe.com%2Fflash%2F9.0_es%2Fmain%2F00001194.html&amp;ei=18EWSezKMoyE0QTmra2GCw&amp;usg=AFQjCNGeMJW8TlQO508U7T9HIBBGU_JpJw&amp;sig2=nn9mSHwSlkNoQUYeaD58DQ">MMExecute</a></strong> devuelve una cadena cuando la ejecución del script JSFL devuelve algo. <strong>NOTA importante</strong>, el resultado de MMExecute siempre será una cadena.</p>
<h3><strong>Uso de cuadro de diálogo Buscar Carpeta</strong></h3>
<p>Para abrir un cuadro de diálogo <strong>Buscar carpeta</strong> debemos ejecutar el siguiente código:</p>
<pre lang="javascript">var ruta:String = fl.browseForFolderURL("Mensaje");</pre>
<p>Este nos devolverá la ruta hasta la carpeta expresada como <strong><em>archivo:///URI </em></strong>que es el formato que utiliza JSFL para trabajar con el sistema de ficheros. Por ejemplo, en Windows para la carpeta <strong>D:\Fotos</strong> sería <strong>file:///D|/Fotos</strong>.</p>
<h3><strong>Introducción al objeto FLfile</strong></h3>
<p>El objeto <strong><a href="http://www.google.es/url?sa=t&amp;source=web&amp;ct=res&amp;cd=1&amp;url=http%3A%2F%2Flivedocs.adobe.com%2Fflash%2F9.0_es%2Fmain%2F00004188.html&amp;ei=CsYWSeKsCY760QSDxezsCg&amp;usg=AFQjCNHaJDEYD_sTq3YGM3k1gA83JVKerQ&amp;sig2=x5DKiU9q9skRq3U6oOGspg">FLfile</a></strong> nos proporciona una <strong><a href="http://es.wikipedia.org/wiki/API">API</a></strong> de comunicación con el sistema de ficheros del sistema operativo poder <em>crear</em>, <em>modificar</em> o <em>eliminar</em> entre otras cosas<strong> ficheros</strong> o <strong>directorios</strong>. Este objeto lo vamos a utilizar en este tutorial para ejecutar las siguientes acciones:</p>
<ul class="unIndentedList">
<li> Listar el contenido de un directorio
<pre lang="javascript">FLfile.listFolder("path", "files");</pre>
</li>
<li> Crear un fichero
<pre lang="javascript">FLfile.write("fileURI", "contenido fichero");</pre>
</li>
</ul>
<p>El método FLfile.<strong>listFolder</strong> nos permite aplicar un filtro de búsqueda de tal forma que el resultado sólo incluya ficheros de cierto tipo, para nuestro ejemplo aplicamos el filtro de búsqueda para fichero de tipo <strong><a href="http://es.wikipedia.org/wiki/JPEG">jpg</a></strong>, esto lo conseguimos con el siguiente código:</p>
<pre lang="javascript">FLfile.listFolder(path + "/*.jpg", "files");</pre>
<p>Este método devuelve un array con los resultados de la búsqueda.</p>
<p>El método FLfile.<strong>write</strong> nos permite crear un fichero, este método devuelve un valor de tipo booleano que indica el éxito de la operación al crear el fichero. Para nuestro ejemplo utilizamos este método para <strong>crear</strong> el fichero XML con el listado de los ficheros jpg del directorio indicado mediante el cuadro de diálogo <strong>Buscar carpeta</strong>.</p>
<p>Listo, ahora si ya hemos hablado sobre los puntos importantes que trata este comando, sobre todo de las nuevas funciones y los nuevos métodos que utilizamos. A continuación pongo el código de de los distintas partes que componen este comando.</p>
<p><strong>Fichero JSFL</strong> de nombre Crea XML de imágenes.jsfl</p>
<pre lang="javascript">//Declaración de variables
var oDoc;
var oCfg;
var sDirPath;
var sNameFile;

//Llamadas al método de configuración
this.config();

/**
 * @method	config
 * Método encargado de la configuración del comando
 * @return	Void
 */
function config()
{
	//Limpiamos el panel de salida
	fl.outputPanel.clear();

	//Obtenemos las referencias al documento
	this.oDoc = fl.getDocumentDOM();
	if(this.oDoc)
	{
		//Obtenemos una referencia al objeto de configuración de la interfaz gráfica
		this.oCfg = this.oDoc.xmlPanel(fl.configURI + "Commands/XML/Crea XML de imágenes.xml");

		//Asignamos el valor de la variable del path para listar las imágenes y el nombre del fichero xml
		this.sDirPath = this.oCfg.sDirPath;
		this.sNameFile = this.oCfg.sNameFile;
	}
	else
	{
		alert("Debes tener un documento abierto.");
	}
}

//Comprobación de la respuesta del usuario sobre la ventana de introducción de datos
if ((this.oCfg) &#038;&#038; (this.oCfg.dismiss == "accept"))
{
	this.init();
}
else
{
	//El usuario ha cancelado la operación
}

/**
 * @method	init
 * Método encargado de la inicialización del comando
 * @return	Void
 */
function init()
{
	if(this.sDirPath != "")
	{
		//Obtenemos la ruta del fichero XML y el contenido del fichero XML.
		var sXmlPath = this.getUrlXmlFile();
		var sXmlContent = this.getContentXml();

		//Creamos el fichero e informamos al usuario el resultado de la operación.
		var bSuccess = FLfile.write(sXmlPath, sXmlContent);
		if(bSuccess)
		{
			alert("Se ha creado correctamente el fichero:\n " + sXmlPath);
		}
		else
		{
			alert("No se ha podido crear el fichero:\n " + sXmlPath);
		}
	}
	else
	{
		alert("Debes seleccionar un directorio.");
	}
}

/**
 * @method	getUrlXmlFile
 * Método encargado de obtener la ruta del fichero XML que se generará, lo hace a partir del path del documento y realiza las conversiones pertinentes.
 * @return	String	Cadena con la ruta del fichero XML que se generará.
 */
function getUrlXmlFile()
{
	var ret = "";

	//A partir del path del documento abierto componemos la ruta del fichero XML que será hermano del documento abierto.
	var aTmp = this.oDoc.path.split("\\");
	aTmp.pop();
	var sUnidad = aTmp.shift();
	var aTmp2 = sUnidad.split(":");
	sUnidad = aTmp2.shift();
	ret = "file:///" + sUnidad + "|" + aTmp.join("/") + "/" + this.sNameFile;

	return ret;
}

/**
 * @method	getContentXml
 * Método encargado de obtener el contenido del XML, lo hace a través de listar el directorio configurado, filtrando por tipo de fichero jpg.
 * @return	String	Cadena con el contenido del fichero XML que se generará.
 */
function getContentXml()
{
	var ret = '';

	var aListFiles = FLfile.listFolder(this.sDirPath + "/*.jpg", "files");

	ret += '<?xml version="1.0" encoding="utf-8" ?>\n';
	ret += '<data>\n';
	var nTotal = aListFiles.length;
	for (var i = 0; i < nTotal; i++)
	{
		ret += '\t<imagen src="' + aListFiles[i] + '"/>\n';
	}

	ret += '</data>\n';

	return ret;
}</pre>
<p><strong>Fichero XML</strong> para la interfaz gráfica de nombre Crea XML de imágenes.xml</p>
<pre lang="xml"><dialog title="Crea XML de imágenes"  >
	<flash src="../SWF/Crea XML de imágenes.swf" width="370"   height="230"  id="settings" />
<property id="sDirPath" value=""/>
<property id="sNameFile" value=""/>
</dialog></pre>
<p><strong>Código de la película SWF</strong> de la interfaz gráfica de nombre Crea XML de imágenes.swf</p>
<pre lang="actionscript">import mx.utils.Delegate;

//Asignamos el Foco al botón Aceptar
Selection.setFocus(this.aceptarBTN);
//Asignamos el Tema de color Azul
_global.style.setStyle("themeColor", "haloBlue");

this.browsePathBTN.onRelease = Delegate.create(this, onClickBrowserPath);
this.aceptarBTN.addEventListener("click", this);
this.cancelarBTN.addEventListener("click", this);

/**
 * @method	onClickBrowserPath
 * Método encargado de abrir el cuadro de diálogo de selección de directorio.
 * @return	Void
 */
function onClickBrowserPath():Void
{
	var jsflCode:String = "fl.browseForFolderURL('Selecciona el directorio que deseas listar.');";
	var sDirPath:String = MMExecute(jsflCode);
	pathImagenesTI.text = (sDirPath == "null") ? pathImagenesTI.text : sDirPath;

	jsflCode = "fl.xmlui.set('sDirPath', '" + sDirPath + "');";
	MMExecute(jsflCode);
}

/**
 * @method	click
 * Método encargado de ejecutar las acciones para aceptar el comando y asignar el valor a la variable sDirPath.
 * @param	_oEvent		Object		Objeto de configuración asociada al evento click del botón.
 * @return	Void
 */
function click(_oEvent:Object):Void
{
	switch(_oEvent.target._name)
	{
		case "aceptarBTN":
			onClickAceptar(_oEvent);
			break;

		case "cancelarBTN":
			onClickCancelar(_oEvent);
			break;
	}
}

/**
 * @method	onClickAceptar
 * Método encargado de ejecutar las acciones para aceptar el comando y asignar el valor a la variable sDirPath.
 * @param	_oEvent		Object		Objeto de configuración asociada al evento click del botón.
 * @return	Void
 */
function onClickAceptar(_oEvent:Object):Void
{
	var jsflCode:String = "fl.xmlui.set('sDirPath', '" + _oEvent.target._parent.pathImagenesTI.text + "');";
	MMExecute(jsflCode);

	jsflCode = "fl.xmlui.set('sNameFile', '" + _oEvent.target._parent.nombreFicheroTI.text + "');";
	MMExecute(jsflCode);

	jsflCode = "fl.xmlui.accept();";
	MMExecute(jsflCode);
}

/**
 * @method	onClickCancelar
 * Método encargado de ejecutar las acciones para cerrar la ventana del comando.
 * @param	_oEvent		Object		Objeto de configuración asociada al evento click del botón.
 * @return	Void
 */
function onClickCancelar(_oEvent:Object):Void
{
	var jsflCode:String = "fl.xmlui.cancel();";
	MMExecute(jsflCode);
}</pre>
<p>Los ficheros de este tutorial los pueden descargar de <a href="../../../../../tutoriales/jsfl/Tutorial_JSFL_Comando_con_interfaz_grafica_II.zip">aquí</a>.<br />
Para cualquier duda, sugerencia o comentario aquí estaré atento a vuestros comentarios.</p>
<p>Saludos!!!</p>
<p>Entradas relacionadas:</p>
<ul>
<li><a title="Permanent Link: Recursos JSFL" href="../../../../../2008/08/24/recursos-jsfl/">Recursos JSFL</a></li>
<li><a title="Permanent Link: Tutorial JSFL, Introducción a comandos" href="../../../../../2008/09/26/tutorial-jsfl-introduccion-a-comando/">Tutorial JSFL &#8211; Introducción a comandos</a></li>
<li><a title="Permanent Link: Tutorial JSFL - Comandos con interfaz gráfica" href="../../../../../2008/10/12/tutorial-jsfl-comandos-con-interfaz-grafica/">Tutorial JSFL &#8211; Comandos con interfaz gráfica</a></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://www.nomeva.com/2008/11/09/tutorial-jsfl-comandos-con-interfaz-grafica-ii/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
	</channel>
</rss>

