{"id":541,"date":"2018-06-11T09:00:00","date_gmt":"2018-06-11T08:00:00","guid":{"rendered":"http:\/\/www.programaraciegas.net\/?p=541"},"modified":"2018-06-02T06:45:21","modified_gmt":"2018-06-02T05:45:21","slug":"cuadros-de-dialogo-en-applescript-para-comunicarnos-con-los-usuarios","status":"publish","type":"post","link":"https:\/\/programaraciegas.net\/?p=541","title":{"rendered":"Cuadros de di\u00e1logo en AppleScript para comunicarnos con los usuarios"},"content":{"rendered":"<p>La comunicaci\u00f3n con los usuarios es indispensable para que un programa o script pueda desempe\u00f1ar su funci\u00f3n en la mayor\u00eda de casos.<\/p>\n<p>Ya hemos visto en art\u00edculos anteriores el uso del comando <strong>say<\/strong> que permite verbalizar un texto a trav\u00e9s de la s\u00edntesis de voz de MacOS pero este m\u00e9todo de comunicaci\u00f3n con el usuario no es el m\u00e1s accesible para todos ya que puede que el usuario sea sordo o que en el momento de verbalizar el mensaje se est\u00e9 reproduciendo m\u00fasica, otro sonido u otro mensaje. Por esta raz\u00f3n es recomendable utilizar un m\u00e9todo que pueda mostrar en pantalla y de forma accesible los textos que necesitemos comunicar al usuario desde nuestros scripts.<\/p>\n<h2>Cuadros de di\u00e1logo accesibles para AppleScript<\/h2>\n<p>AppleScript nos proporciona el comando <strong>display dialog<\/strong> que nos permite mostrar un texto en un cuadro de di\u00e1logo. Este cuadro de di\u00e1logo es totalmente compatible con todos los productos de apoyo de MacOS.<\/p>\n<p>Veamos un ejemplo simple. Mostraremos el texto <em>Hola mundo!<\/em> por pantalla:<\/p>\n<p><code><br \/>\ndisplay dialog \"Hola mundo!\"<br \/>\n<\/code><\/p>\n<h3>Usando una notificaci\u00f3n del sistema en lugar de un cuadro de di\u00e1logo<\/h3>\n<p>El comando <strong>display<\/strong> nos permite mostrar di\u00e1logos, alertas y notificaciones del sistema. Por ejemplo, si en lugar de mostrar un cuadro de di\u00e1logo quisieramos mostrar una notificaci\u00f3n del sistema utilizar\u00edamos <strong>display notification<\/strong>. El ejemplo anterior quedar\u00eda as\u00ed:<\/p>\n<p><code><br \/>\ndisplay notification \"Hola mundo!\"<br \/>\n<\/code><\/p>\n<h3>Personalizaci\u00f3n de los botones por defecto en el cuadro de di\u00e1logo<\/h3>\n<p>Por defecto el comando <strong> display dialog<\/strong> incluye un bot\u00f3n de <em>cancelar<\/em> y un bot\u00f3n de <em>aceptar<\/em> pero gracias a que <strong>display dialog<\/strong> posee multitud de par\u00e1metros podemos personalizar su visualizaci\u00f3n para que se adapte a lo que necesitemos en cada momento.<\/p>\n<p>Por ejemplo, en nuestro caso anterior s\u00f3lo necesitar\u00edamos mostrar un bot\u00f3n de aceptar para que el usuario cerrase el cuadro de di\u00e1logo. El c\u00f3digo ser\u00eda el siguiente:<\/p>\n<p><code><br \/>\ndisplay dialog \"Hola mundo!\" buttons {\"Aceptar\"}<br \/>\n<\/code><\/p>\n<p>Hemos usado el par\u00e1metro <em>buttons<\/em> para indicar un listado de botones que se mostrar\u00e1n en el cuadro de di\u00e1logo. Para ello creamos una variable de tipo <a href=\"http:\/\/www.programaraciegas.net\/?p=477\">lista de AppleScript<\/a>.<\/p>\n<p>En otras situaciones quiz\u00e1s necesitemos ofrecer al usuario varias opciones posibles. Por ejemplo, vamos a cambiar el texto de los botones cancelar y aceptar por las posibles respuestas a una pregunta.<\/p>\n<p><code><br \/>\ndisplay dialog \"\u00bfQuiere borrar la informaci\u00f3n de su disco duro?\" buttons {\"Si, no hay nada de inter\u00e9s\", \"No, quiero demasiado a mis datos\"} default button \"Si, no hay nada de inter\u00e9s\" cancel button \"No, quiero demasiado a mis datos\"<br \/>\n<\/code><\/p>\n<p>Con el par\u00e1metro <em>default button<\/em> indicamos cu\u00e1l ser\u00e1 el bot\u00f3n seleccionado por defecto y que se pulsar\u00e1 autom\u00e1ticamente si pulsamos la tecla enter en el cuadro de di\u00e1logo.<\/p>\n<p>Con el par\u00e1metro <em>cancel button<\/em> indicamos cual ser\u00e1 el bot\u00f3n de cancelar.<\/p>\n<p>Los valores para default button y cancel button deber\u00e1 ser el texto exacto de uno de los botones incluidos en la lista que hemos utilizado para el par\u00e1metro buttons. Si indicamos un valor inapropiado el editor de AppleScript nos indicar\u00e1 un error.<\/p>\n<p>El problema de usar <strong>display dialog<\/strong> es que s\u00f3lo podemos mostrar un m\u00e1ximo de 3 botones mediante el uso de estos par\u00e1metros. Si intentasemos ejecutar el siguiente script nos saldr\u00eda un error indicando el mensaje de error de <em>Maximo 3 botones permitidos<\/em>.<\/p>\n<p><code><br \/>\ndisplay dialog \"\u00bfQuiere borrar la informaci\u00f3n de su disco duro?\" buttons {\"Si, no hay nada de inter\u00e9s\", \"No, quiero demasiado a mis datos\", \"No estoy seguro, preguntame ma\u00f1ana\", \"A\u00fan me lo estoy pensando\"} default button \"Si, no hay nada de inter\u00e9s\" cancel button \"No, quiero demasiado a mis datos\"<br \/>\n<\/code><\/p>\n<p>M\u00e1s adelante veremos otro m\u00e9todo para que el usuario pueda elegir entre m\u00e1s de tres opciones.<\/p>\n<h3>Utilizando un lenguaje m\u00e1s visual y accesible<\/h3>\n<p>Para el ejemplo anterior en el que consultamos si el usuario desea borrar el disco duro es muy aconsejable que este tipo de preguntas vengan acompa\u00f1adas de un icono indicando si es un error, un aviso de seguridad, una pregunta, etc. Podemos a\u00f1adir iconos a nuestro cuadro de di\u00e1logo incluyendo <strong>with icon<\/strong> al final de nuestro comando para mostrar la pregunta. El c\u00f3digo de nuestro ejemplo quedar\u00eda as\u00ed:<\/p>\n<p><code><br \/>\ndisplay dialog \"\u00bfQuiere borrar la informaci\u00f3n de su disco duro?\" buttons {\"Si, no hay nada de inter\u00e9s\", \"No, quiero demasiado a mis datos\"} default button \"Si, no hay nada de inter\u00e9s\" cancel button \"No, quiero demasiado a mis datos\" with icon caution<br \/>\n<\/code><\/p>\n<p>Los valores por defecto para el par\u00e1metro <strong>icon<\/strong> son stop, note y caution. Tambi\u00e9n podemos utilizar un icono personalizado por nosotros pero no veremos esta posibilidad en este art\u00edculo.<\/p>\n<h3>Tiempo l\u00edmite para nuestros mensajes y di\u00e1logos<\/h3>\n<p>Por alguna raz\u00f3n podr\u00edamos estar interesados en que nuestro di\u00e1logo s\u00f3lo se muestre un n\u00famero determinado de segundos. Con el par\u00e1metro <strong>giving up after<\/strong> podemos indicar el n\u00famero de segundos que el usuario tendr\u00e1 para poder visualizar e interactuar con el cuadro de di\u00e1logo.<\/p>\n<p>Un ejemplo podr\u00eda ser el siguiente:<\/p>\n<p><code><br \/>\ndisplay dialog \"\u00a1R\u00e1pido, conteste en menos de 5 segundos! \u00bfQuiere borrar la informaci\u00f3n de su disco duro?\" buttons {\"Si, no hay nada de inter\u00e9s\", \"No, quiero demasiado a mis datos\"} default button \"Si, no hay nada de inter\u00e9s\" cancel button \"No, quiero demasiado a mis datos\" with icon caution giving up after 5<br \/>\n<\/code><\/p>\n<h3>A\u00f1adiendo un t\u00edtulo a nuestro cuadro de di\u00e1logo<\/h3>\n<p>Un t\u00edtulo para nuestro cuadro de di\u00e1logo puede ser necesario para que el usuario se ponga en contexto con lo que le estamos preguntando.<\/p>\n<p>Para indicar un t\u00edtulo en nuestro cuadro de di\u00e1logo podemos utilizar el par\u00e1metro <strong>with title<\/strong>. Nuestro ejemplo quedar\u00eda as\u00ed:<\/p>\n<p><code><br \/>\ndisplay dialog \"\u00a1R\u00e1pido, conteste en menos de 5 segundos! \u00bfQuiere borrar la informaci\u00f3n de su disco duro?\" buttons {\"Si, no hay nada de inter\u00e9s\", \"No, quiero demasiado a mis datos\"} default button \"Si, no hay nada de inter\u00e9s\" cancel button \"No, quiero demasiado a mis datos\" with icon caution with title \"Pregunta para borrado del disco\" giving up after 5<br \/>\n<\/code><\/p>\n<p>Con lo visto en este art\u00edculo ya podemos comunicarnos con nuestros futuros usuarios de forma m\u00e1s accesible.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>La comunicaci\u00f3n con los usuarios es indispensable para que un programa o script pueda desempe\u00f1ar su funci\u00f3n en la mayor\u00eda de casos. Ya hemos visto en art\u00edculos anteriores el uso del comando say que permite verbalizar un texto a trav\u00e9s de la s\u00edntesis de voz de MacOS pero este m\u00e9todo de comunicaci\u00f3n con el usuario &hellip; <\/p>\n<p class=\"link-more\"><a href=\"https:\/\/programaraciegas.net\/?p=541\" class=\"more-link\">Continuar leyendo<span class=\"screen-reader-text\"> \u00abCuadros de di\u00e1logo en AppleScript para comunicarnos con los usuarios\u00bb<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[80,6],"tags":[],"class_list":["post-541","post","type-post","status-publish","format-standard","hentry","category-applescript","category-programacion"],"jetpack_featured_media_url":"","_links":{"self":[{"href":"https:\/\/programaraciegas.net\/index.php?rest_route=\/wp\/v2\/posts\/541","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/programaraciegas.net\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/programaraciegas.net\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/programaraciegas.net\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/programaraciegas.net\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=541"}],"version-history":[{"count":0,"href":"https:\/\/programaraciegas.net\/index.php?rest_route=\/wp\/v2\/posts\/541\/revisions"}],"wp:attachment":[{"href":"https:\/\/programaraciegas.net\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=541"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/programaraciegas.net\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=541"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/programaraciegas.net\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=541"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}