OpenSave Dialog Box v. 1
''''''''''''''''''''''

¿Qué es?

Es un tipo de cuadro de cuadro de diálogo usado para elegir el nombre de un archivo, similar al cuadro de diálogo
mostrado por MS Windows, pero compatible con otros entornos que no son Windows.

Algunos parámetros son configurables, como el tipo de cuadro de diálogo, el título y las extensiones de los archivos.


Entrada: Acepta parámetros de similares a la función de cuadro de diálogo de la API de Windows.
Salida: ruta+nombre de archivo+extensión (o una cadena vacía si se cancela o no se elige ningún nobre de archivo)

Se ha probado en entornos Windows y Linux y parece que funciona correctamente, sin fallos importantes.

No ha sido probado en Mac OS.

Algunas rutinas están inspiradas en la aplicación "Inform" de Fellipe Heitor.



Descripción del interfaz:

	Lista de directorios (carpetas) y archivos en el directorio actual.
	Permite moverse por la lista de directorios y la de archivos.
	Permite seleccionar cualquier directorio o archivo con un simple click de ratón.
	Si se selecciona el nombre de un archivo, éste se muestra en el recuadro de texto.
	Si se selecciona el nombre de un directorio/carpeta, se cambia la ruta y se actualiza la lista de archivos.
	Si se pulsa el botón Accept, el programa devuelve el nombre del archivo seleccionado y termina.
	Si se pulsa el botón Cancel se devuelve una cadena vacía.
	En el modo New, Save o Save as, si se elige el nombre de un archivo que ya existe, un mensaje preguntará
	si se desea sobreescribir.



¿Qué se necesita?

Este cuadro de diálogo no puede funcionar como un programa por sí mismo. Necesita unos parámetros para funcionar
correctamente.
Sin estos parámetros, el programa no funcionará o lo hará de forma errática.
Debe ser llamado desde otro programa, (llamémosle Programa Principal), que prepare los parámetros adecuados
y lo arranque.
También se puede arrancar desde una línea de comando, pasando los parámetros.

Se incluyen estos 2 programas:

	OpenSaveDialog.bas + OpenSaveDialog.frm
	OpenSaveDialog_HostForm.bas + OpenSaveDialog_HostForm.frm

OpenSaveDialog.bas - Es el principal para correr el cuadro de diálogo.

OpenSaveDialog_HostForm.bas - Es un programa de ejemplo para arrancar correctamente OpenSavedialog

Se necesitan QB64 e Inform (UiEditor) para compilar ambos programas.



¿Cómo funciona?

OpenSaveDialog se mostrará como una ventana emergente. El programa desde el que se llama deberá quedar
congelado, a la espera de que termine éste.
Entonces, el usuario podrá elegir un directorio/carpeta y/o un archivo del directorio.
Se pueden filtrar los archivos según el tipo (extensión del archivo).
Para aceptar el nombre del fichero elegido, pulsar el botón Accept. Para cancelar, pulsar el botón Cancel o
cerrar la ventana.

Se puede mandejar con el ratón o con el teclado.

OpenSaveDialog usa comandos de consola (shell) para leer la lista de directorios (carpetas) y los archivos.

Se creará un archivo temporal ("__OpenSaveDialog__.tmp") en el mismo directorio donde esté el ejecutable.
Asegurarse de que el directorio/carpeta tiene permiso de escritura.

Los archivos ocultos y de sistema no se deberían mostrar por defecto. Esto no se puede cambiar. Será una
opción en próximas versiones.

El programa no comprueba la sintáxis de los parámetros en profundidad. Asegurarse de que mantienen 
la sintáxis correcta.
No hay parámetros opcionales. Se deben pasar todos.

Una vez que se muestra el cuadro de diálogo, el usuario puede elegir un nombre de archivo o teclearlo en el
cuadro de texto y pulsar el botón Accept.
Una vez hecho, la ruta (path) y el nombre el archivo se guardan en el archivo "__OpenSaveDialog__.tmp",
para que el programa principal pueda recuperarlo.

Luego, el programa principal debe leer la primera línea del archivo temporal para recuperar la ruta y el
nombre del archivo.

Si se pulsa el botón Cancel o se cierra la ventana, en el archivo temporal se escribirá un espacio en blanco,
en lugar de la ruta y el nombre del archvo elegido.

Cuando se elige un archivo, ni se crea ni se sobreescribe pero, cuando se usa la opción
"New", "Save" o "Save as", si un archivo ya existe, se advierte de ello para que el usuario pueda elegir
si continuar o elegir otro.



Como se usa:

Necesitarás QB64 e Inform instalado.

Compila OpenSaveDialog.bas en MS Windows, Linux o Mac OS.
También compila OpenSaveDialog_HostForm.bas si quieres probar el programa de ejemplo.

OBLIGATORIO: Si estás compilando en Linux, despues de crear el archivo ejecutable, renómbralo "OpenSaveDialog.linux".

Esta versión no soporta el doble click. Esto es para evitar un bug en los controles "list box" y "drop-down list box".
Esto será corregido en próximas versiones.
El doble click no se filtra, se tomará como 2 clicks separados.

Si quieres arrancar el cuadro desde tu propio programa, puedes hacerlo así:

	Consola de comandos de Windows (ejemplo):

		OpenSaveDialog 1 "New Project" "Project (*.mpr)|*.mpr|Jpeg files (*.jpg)|*.jpg|AS files (*.as)|*.as|All files (*.*)|*.*"


	Windows:

	    Shell Chr$(34) + ExePath$ + "OpenSaveDialog" + Chr$(34) + Str$(Mode%%) + " " + Chr$(34) + Title$ + Chr$(34) + " " + Chr$(34) + Filters$ + Chr$(34)

    
	Linux:

	    Shell Chr$(34) + ExePath$ + "./OpenSaveDialog.linux" + Chr$(34) + Str$(Mode%%) + " " + Chr$(34) + Title$ + Chr$(34) + " " + Chr$(34) + Filters$ + Chr$(34)


	Windows o Linux:

		$If WIN Then
			Shell Chr$(34) + ExePath$ + "OpenSaveDialog" + Chr$(34) + Str$(Mode%%) + " " + Chr$(34) + Title$ + Chr$(34) + " " + Chr$(34) + Filters$ + Chr$(34)
		$Else
			Shell Chr$(34) + ExePath$ + "./OpenSaveDialog.linux" + Chr$(34) + Str$(Mode%%) + " " + Chr$(34) + Title$ + Chr$(34) + " " + Chr$(34) + Filters$ + Chr$(34)
		$End If


	Explicación:

		ExePath$ = _StartDir$	>>> Aqui es donde está el programa ejecutable. Es para evitar crear archivos temporales en cada directorio.

		Mode%% = Modo del cuadro de diálogo (1="New", 2="Open", 3="Save", 4="Save as")

		* Los modos New, Save y Save as, funcionan exactamente igual.

		Title$ = Texto para el título de la ventana del cuadro.

		Filters$ = Texto con la descripción de los tipos de archivo y los comodines de sus extensiones.

		* Primero vá la descripción, seguida por un carácter pipe "|" y luego la extensión (siempre *.ext)
		  Se permiten múltiples tipos de archivo, separados por el carácter "|"
		  Las extensiones son de 3 caracteres obligatoriamente.

		Ejemplo:
		
			"Project (*.mpr)|*.mpr|Jpeg files (*.jpg)|*.jpg|AS files (*.as)|*.as|All files (*.*)|*.*"


Después de elegir el nombre del archivo o cancelar, la ruta y el nombre del archivo se guardan en el archivo temporal
"__OpenSaveDialog__.tmp", en el mismo directorio donde está el ejecutable.

Para recuperar el nombre del archivo elegido, se debe abrir el archivo temporal y leer la primera línea.
Se debe usar siempre LINE INPUT # para leer el archivo, porque tanto la ruta como el nombre del archivo
pueden contener espacios.

Si se pulsó el botón Cancel o se cierró el cuadro de diálogo, entonces se leerá una línea en blanco.



Fallos conocidos:

A veces, si el cuadro de diálogo se cierra antes de elegir algún nombre de archivo, se puede pasar un nombre
incorrecto en "__OpenSaveDialog__.tmp" o incluso puede que no sea creado.

Este fallo no está arreglado, ya que la intención de este programa es que sea ligero y rápido.

En la versión de Windows, el usuario no puede cambiar de unidad.
Esta opción no se ha implementado en esta versión, para no sobrecargar el programa.
Se arreglará en futuras versiones.
