// Barra estado // (c) 2025 DASOTA // Script para Directory Opus function OnInit(initData) { initData.name = "Barra estado"; initData.version = "1.3"; initData.copyright = "(c) 2025 DASOTA"; initData.desc = ""; initData.min_version = "13.16"; initData.config_desc = DOpus.Create.Map(); initData.config_desc("idioma") = "Idioma predeterminado"; initData.config.idioma = DOpus.Create.Vector(0, "Español", "English"); // 0 = Español, 1 = English } function OnAddCommands(addCmdData) { var cmd = addCmdData.AddCommand(); cmd.name = 'BarraEstado'; cmd.method = 'BarraEstado'; cmd.desc = ""; cmd.label = 'Barra Estado'; cmd.flags = 'f'; cmd.icon = "script"; } function BarraEstado(scriptCmdData) { var tab = scriptCmdData.func.sourcetab; if (!tab) return; DOpus.ClearOutput(); var dlg = {}; dlg.main = scriptCmdData.func.Dlg(); dlg.main.singleton = 'WatchTab - Directory Opus'; dlg.main.template = 'dialog1'; if (!dlg.main.Create()) { DOpus.Output('Barra estado ya abierta!'); return; } // DIMENSIONES DEL MONITOR var sysinfo = DOpus.Create.SysInfo(); var monitor = sysinfo.Monitors(0); var ancho_monitor = monitor.width; // Ancho del monitor (era para que el ancho del diálogo fuera automáticamente, el ancho del monitor, pero no lo conseguí) var alto_monitor = monitor.height; // Alto del monitor // POSICIÓN DEL DIÁLOGO function posicion () { dlg.main.x = -6; // Posición horizontal dlg.main.y = 800; // Posición vertical } posicion(); dlg.watch_tab = ''; dlg.main.WatchTab(tab, 'select,navigate,activate,srcdst'); // Detectar cambios en pestañas dlg.main.Show(); // Mostrar el diálogo var idioma = Script.config.idioma; // Necesária para traducir barra de Título en "cargarArchivo ()" traduccion(dlg); // Traducción var item = null; var rutasImagenes = []; // Guardar rutas de las imágenes al procesar "carpetas con imágenes" para al hacer clic sobre las miniaturas, abrir el visor en ellas var imagenesCarpeta = null; cargarArchivo(); // Cargar archivo // ========================================================================================================================================= // FUNCIÓN CARGAR ARCHIVO // ========================================================================================================================================= function cargarArchivo() { var seleccion = tab.selected; // Elementos seleccionados seleccion.Update(); // Actualizar elementos seleccionados if (seleccion.count > 0) { // Si existen elementos seleccionados... item = seleccion(0); // Cargar los valores del primero DOpus.Output('Seleccionado: ' + item.name); // TÍTULO DE BARRA DE TÍTULO =========================================================================================================== // Simple dlg.main.title = item.name; // Nombre del elemento sin prefijos "Arhivo" o "Carpeta" /* // Elaborado: Nombre del elemento con prefijos "Arhivo" o "Carpeta" dlg.main.title = (idioma === 1 ? (item.is_dir ? "Folder ''" : "File ''") : (item.is_dir ? "Carpeta ''" : "Archivo ''")) + item.name + "''"; */ // DETECTAR Y CONTAR IMÁGENES EN CARPETAS ============================================================================================== function imagenesEnCarpeta(carpeta) { var fso = DOpus.FSUtil.ReadDir(carpeta, false); var imagenes = []; var total = 0; var extensiones = [".jpg", ".jpeg", ".png", ".bmp", ".gif", ".tif", ".tiff", ".webp"]; while (!fso.complete) { var entry = fso.Next(); if (!entry || entry.is_dir) continue; var ext = (entry.ext || "").toLowerCase(); var esImagen = false; for (var i = 0; i < extensiones.length; i++) { if (ext == extensiones[i]) { esImagen = true; break; } } if (esImagen) { if (imagenes.length < 6) imagenes.push(entry); // Ruta de las 6 primeras imágenes, si existen total++; } } //DOpus.Output('Imágenes encontradas: ' + total); return { imagenes: imagenes, total: total }; // total = número de imágenes en la carpeta, si existen } // ACTIVAR/DESACTIVAR BOTONES: ABRIR CARPETA Y ABRIR ARCHIVO =========================================================================== // BOTÓN ABRIR CARPETA dlg.main.Control("btn_abrir_carpeta").enabled = item.is_dir; // Activar si lo seleccionado es una carpeta // BOTÓN ABRIR ARCHIVO var habilitarVisor = !item.is_dir; // Activar si lo seleccionado es un archivo... if (item.is_dir) { var imagenes = imagenesEnCarpeta(item.realpath); if (imagenes.total > 0) { habilitarVisor = true; // O si es una carpeta con imágenes } } dlg.main.Control("btn_abrir_archivo").enabled = habilitarVisor; // ===================================================================================================================================== // CONTROLES A CARGAR // ===================================================================================================================================== // DETERMINAR PREFIJO DE CONTROLES A MOSTRAR =========================================================================================== var prefijos = ["gen_"]; // Siempre mostrar controles generales if (item.is_dir) { var imagenesCarpeta = imagenesEnCarpeta(item.realpath); if (imagenesCarpeta.total > 0) { prefijos.push("carIma_"); // Carpeta con imágenes } } else { var tipo = String(item.metadata); // Forzar metadato a string var mapaPrefijos = { "image": "ima_", "audio": "aud_", "video": "vid_", "doc": "doc_", "exe": "exe_" }; if (mapaPrefijos[tipo]) { prefijos.push(mapaPrefijos[tipo]); } } mostrarSolo(dlg, prefijos); // Lista de prefijos a mostrar //DOpus.Output('Metadato: ' + item.metadata); //DOpus.Output('Prefijos a mostrar: ' + prefijos.join(", ")); // DETERMINAR LOS OTROS CONTROLES A MOSTRAR ============================================================================================ function mostrarSolo(dlg, prefijos) { if (typeof prefijos === "string") prefijos = [prefijos]; var grupo = [ "gen_tipo_archivo_t", "gen_tipo_archivo", "gen_nombre_t", "gen_nombre", "gen_extension_t", "gen_extension", "gen_tamano_t", "gen_tamano", "gen_atributos_t", "gen_atributos", "gen_fecha_creacion_t", "gen_fecha_creacion", "gen_fecha_modificacion_t", "gen_fecha_modificacion", "gen_fecha_ultimo_acceso_t", "gen_fecha_ultimo_acceso", "carIma_imagen1", "carIma_imagen2", "carIma_imagen3", "carIma_imagen4", "carIma_imagen5", "carIma_imagen6", "carIma_nombre1", "carIma_nombre2", "carIma_nombre3", "carIma_nombre4", "carIma_nombre5", "carIma_nombre6", "ima_fecha_captura_t", "ima_fecha_captura", "ima_resolucion_t", "ima_resolucion", "ima_dimensiones_t", "ima_dimensiones", "ima_ppp_t", "ima_ppp", "ima_color_t", "ima_color", "ima_relacion_aspecto_t", "ima_relacion_aspecto", "ima_orientacion_t", "ima_orientacion", "ima_escala_t", "ima_escala", "ima_miniatura", "aud_codec_audio_t", "aud_codec_audio", "aud_modo_t", "aud_modo", "aud_tasa_bits_t", "aud_tasa_bits", "aud_tasa_muestreo_t", "aud_tasa_muestreo", "aud_duracion_t", "aud_duracion", "aud_miniatura", "vid_codec_audio_t", "vid_codec_audio", "vid_codec_video_t", "vid_codec_video", "vid_dimensiones_t", "vid_dimensiones", "vid_fotogramas_t", "vid_fotogramas", "vid_relacion_t", "vid_relacion", "vid_modo_t", "vid_modo", "vid_tasa_muestreo_t", "vid_tasa_muestreo", "vid_duracion_t", "vid_duracion", "vid_tasa_bits_audio_t", "vid_tasa_bits_audio", "vid_tasa_bits_video_t", "vid_tasa_bits_video", "vid_miniatura", "doc_paginas_t", "doc_paginas", "doc_autor_t", "doc_autor", "doc_comentario_t", "doc_comentario", "doc_miniatura", "exe_producto_t", "exe_producto", "exe_version_t", "exe_version", "exe_empresa_t", "exe_empresa", "exe_firma_t", "exe_firma", "exe_copyright_t", "exe_copyright", "exe_descripcion_t", "exe_descripcion", "exe_miniatura" ]; for (var i = 0; i < grupo.length; i++) { var ctrl = dlg.main.Control(grupo[i]); if (ctrl) { var visible = false; for (var j = 0; j < prefijos.length; j++) { if (grupo[i].indexOf(prefijos[j]) === 0) { visible = true; break; } } ctrl.visible = visible; } } } // ===================================================================================================================================== // CONTROLES GENERALES // ===================================================================================================================================== // TIPO DE ARCHIVO ===================================================================================================================== var tipoTexto = ""; var imagenesCarpeta = null; // Variable para almacenar imágenes si es carpeta if (item.is_dir) { // Obtener imágenes en la carpeta y su total imagenesCarpeta = imagenesEnCarpeta(item.realpath); var num = imagenesCarpeta.total; var palabra = idioma === 1 ? (num === 1 ? " image" : " images") : (num === 1 ? " imagen" : " imágenes"); // Construir texto tipo Carpeta (X imágenes) si tiene imágenes tipoTexto = (idioma === 2 ? "Folder" : "Carpeta") + (num > 0 ? " (" + num + palabra + ")" : ""); // Mostrar hasta 6 miniaturas si hay imágenes if (num > 0) { for (var i = 0; i < 6; i++) { var imgCtrl = dlg.main.Control("carIma_imagen" + (i + 1)); var nameCtrl = dlg.main.Control("carIma_nombre" + (i + 1)); if (i < imagenesCarpeta.imagenes.length) { var img = imagenesCarpeta.imagenes[i]; imgCtrl.visible = nameCtrl.visible = true; imgCtrl.label = DOpus.LoadThumbnail(img.realpath); // Miniatura nameCtrl.label = img.name; // Nombre rutasImagenes[i] = img.realpath; // Guardar rutas de imágenes para abrirlas en el visor si clic sobre ellas } else { imgCtrl.visible = nameCtrl.visible = false; imgCtrl.label = nameCtrl.label = ""; rutasImagenes[i] = null; // Limpiar } } } } else { // Texto para otros tipos de archivo var tipos = { "image": idioma === 1 ? "Image" : "Imagen", "audio": idioma === 1 ? "Audio" : "Audio", "video": idioma === 1 ? "Video" : "Video", "doc": idioma === 1 ? "Document" : "Documento", "exe": idioma === 1 ? "Executable" : "Ejecutable", "default": idioma === 1 ? "Other" : "Otros" }; tipoTexto = tipos[item.metadata] || tipos["default"]; } dlg.main.Control("gen_tipo_archivo").title = tipoTexto; // Valor final del campo Tipo de archivo. Ejemplo: "Carpeta (11 imágenes)" //DOpus.Output('Tipo de archivo: ' + tipoTexto); // NOMBRE ============================================================================================================================== dlg.main.Control("gen_nombre").title = item.name_stem; // Nombre sin extensión (item.name = Nombre con extensión) (item.ext = Extensión con punto) // EXTENSIÓN =========================================================================================================================== dlg.main.Control("gen_extension").title = (item.ext || "").substr(1); // Extensión sin el punto. Insertar al final: .toUpperCase() para convertir en mayúsculas // TAMAÑO ============================================================================================================================== dlg.main.Control("gen_tamano").title = item.size.fmt; // Tamaño en formato real // ATRIBUTOS =========================================================================================================================== var attr = item.attr; var attrStr = (attr & 1 ? "R, " : "") + // Read-only (solo lectura) (attr & 2 ? "H, " : "") + // Hidden (oculto) (attr & 4 ? "S, " : "") + // System (Sistema) (attr & 16 ? "D, " : "") + // Directory (carpeta) (attr & 32 ? "A, " : "") + // Archive (archivo) (attr & 1024 ? "I, " : "") + // Not indexed (no indixado) (attr & 2048 ? "C, " : "") + // Compressed (comprimido) (attr & 16384 ? "E, " : ""); // Encrypted (encriptado) attrStr = attrStr.replace(/, $/, ""); // Eliminar la última coma y espacio si existe dlg.main.Control("gen_atributos").title = attrStr; // Atributos // FECHAS ============================================================================================================================== dlg.main.Control("gen_fecha_creacion").title = item.create; // Fecha de creación dlg.main.Control("gen_fecha_modificacion").title = item.modify; // Fecha de modificación dlg.main.Control("gen_fecha_ultimo_acceso").title = item.access; // Fecha de último acceso // MINIATURA =========================================================================================================================== var miniaturaGeneral = (item.is_dir && imagenesCarpeta.total === 0) || (!item.is_dir && !mapaPrefijos[tipo]); // Si carpeta sin imágenes u "Otros archivos"... if (miniaturaGeneral) { dlg.main.Control("miniatura").label = DOpus.LoadThumbnail(item.realpath); // Mostrar esta miniatura (general) dlg.main.Control("miniatura").visible = true; } else { dlg.main.Control("miniatura").visible = false; // Si no, ocultarla para que en su lugar se muestre la específica del archivo: imagen, audio, etc.) } // ===================================================================================================================================== // IMÁGENES // ===================================================================================================================================== var escala_mensaje = ""; if (item.metadata && item.metadata.image && item.metadata.image_text) { // Comprobación inicial para ver si el archivo tiene metadatos para que no se genrean errores si algun valor nulo o indefinido // FECHA DE CAPTURA dlg.main.Control("ima_fecha_captura").label = item.metadata.image.datetaken || ""; // Fecha de captura // RESOLUCIÓN dlg.main.Control("ima_resolucion").label = item.metadata.image_text.picsize || ""; // Resolución (ancho x alto x profundidad) // DIMENSIONES var dimensiones_cm = ""; if (item.metadata.image.picphysx && item.metadata.image.picphysy) { // Verificar si la imagen tiene dimensiones físicas (picphysx y picphysy). Si no las tienes, el código de este bucle no se ejecuta y se evita que se genere error var ancho_fisico_str = item.metadata.image.picphysx.split("\"")[0]; // Eliminarle las comillas a dimensiones (Ej: 14.8" > 14.8) var alto_fisico_str = item.metadata.image.picphysy.split("\"")[0]; var ancho_cm = (parseFloat(ancho_fisico_str) * 2.54).toFixed(2).replace('.', ','); // Convertir el texto "14.8" a número usando parseFloat(...), luego lo convierte a centímetros (* 2.54) y lo redondea a 2 cifras decimales ( .toFixed(2) ) y se reemplaza "." por "," (sistema latino) var alto_cm = (parseFloat(alto_fisico_str) * 2.54).toFixed(2).replace('.', ','); dimensiones_cm += ancho_cm + " x " + alto_cm + " cm"; } dlg.main.Control("ima_dimensiones").label = dimensiones_cm || ""; // Dimensiones en cm // PUNTOS POR PULGADA var resolucion = item.metadata.image.picresx || ""; // Puntos por pulgada original (dpi) dlg.main.Control("ima_ppp").label = resolucion.toString().replace("dpi", "ppp"); // Reemplazar "dpi" por "ppp" // MODELO DE COLOR dlg.main.Control("ima_color").label = item.metadata.image.colorspace || ""; // Modo de color // RELACIÓN DE ASPECTO var relacion = item.metadata.image.aspectratio; dlg.main.Control("ima_relacion_aspecto").label = (relacion != null) ? // Relación de aspecto parseFloat(relacion).toFixed(2).replace('.', ',') : // Redondeada a 2 números decimales y cambiar . por , ""; // ORIENTACIÓN dlg.main.Control("ima_orientacion").label = (relacion < 1) ? (idioma === 1 ? "Vertical" : "Vertical") : (relacion > 1) ? (idioma === 1 ? "Horizontal" : "Horizontal") : (idioma === 1 ? "Neutral" : "Neutra"); // ESCALA EN PANTALLA var sysinfo = DOpus.Create.SysInfo(); var monitor = sysinfo.Monitors(0); var ancho_pantalla = monitor.width; // Ancho del monitor (Ej. 1920) var alto_pantalla = monitor.height; // Alto del monitor (Ej. 1080) var ancho_imagen = item.metadata.image.picwidth; // Ancho de la imagen var alto_imagen = item.metadata.image.picheight; // Alto de la imagen var escala_ancho = ancho_pantalla / ancho_imagen; // Escala del ancho (<1 ) var escala_alto = alto_pantalla / alto_imagen; // Escala del alto // Escalas < 1 = La imagen es más grande que la pantalla, necesita reducirse para caber. // Escalas = 1 = La imagen es del mismo tamaño de la pantalla, no necesita modificarse para caber. // Escalas > 1 = La imagen es menor que la pantalla, no necesita modificarse para caber. var escala_inicial = Math.min(escala_ancho, escala_alto, 1.0); // Usar la menor escala (ancho o alto) que quepa. No usar valores > 1.0, pues la imagen es menor que la pantalla y cabe var escala_final = Math.round(escala_inicial * 100) + "%"; // Expresar la escala en por ciento (%) y redondeada dlg.main.Control("ima_escala").label = escala_final; // Valor del control // MINIATURA dlg.main.Control("ima_miniatura").label = DOpus.LoadThumbnail(item.realpath); } else { dlg.main.Control("ima_relacion_aspecto").label = ""; dlg.main.Control("ima_orientacion").label = ""; } // ===================================================================================================================================== // AUDIO // ===================================================================================================================================== if (item.metadata && item.metadata.audio) { dlg.main.Control("aud_codec_audio").label = item.metadata.audio.audiocodec || ""; // Códec de audio dlg.main.Control("aud_modo").label = item.metadata.audio.mp3mode || ""; // Modo de audio (estéreo, mono, etc.) dlg.main.Control("aud_tasa_bits").label = item.metadata.audio_text.mp3bitrate || ""; // Tasa de bits (bitrate) dlg.main.Control("aud_tasa_muestreo").label = item.metadata.audio_text.mp3samplerate || ""; // Tasa de muestreo (frecuencia) dlg.main.Control("aud_duracion").label = item.metadata.audio_text.duration || ""; // Duración dlg.main.Control("aud_miniatura").label = DOpus.LoadThumbnail(item.realpath); // Miniatura } // ===================================================================================================================================== // VIDEO // ===================================================================================================================================== if (item.metadata && item.metadata.video) { dlg.main.Control("vid_codec_audio").label = item.metadata.audio.audiocodec || ""; // Códec de audio dlg.main.Control("vid_codec_video").label = item.metadata.video.videocodec || ""; // Códec de video dlg.main.Control("vid_dimensiones").label = item.metadata.video_text.picsize || ""; // Resolución (ancho x alto x profundidad) dlg.main.Control("vid_fotogramas").label = item.metadata.video.framerate || ""; // Fotogramas dlg.main.Control("vid_relacion").label = item.metadata.video_text.aspectratio || ""; // Relación de aspecto dlg.main.Control("vid_modo").label = item.metadata.audio.mp3mode || ""; // Modo de audio (estéreo, mono, etc.) dlg.main.Control("vid_tasa_muestreo").label = item.metadata.audio_text.mp3samplerate || ""; // Tasa de muestreo (frecuencia) dlg.main.Control("vid_duracion").label = item.metadata.video_text.duration || ""; // Duración dlg.main.Control("vid_tasa_bits_audio").label = item.metadata.audio_text.mp3bitrate || ""; // Tasa de bits (bitrate) de audio dlg.main.Control("vid_tasa_bits_video").label = item.metadata.video_text.datarate || ""; // Tasa de bits (bitrate) de video dlg.main.Control("vid_miniatura").label = DOpus.LoadThumbnail(item.realpath); // Miniatura } // ===================================================================================================================================== // DOCUMENTOS // ===================================================================================================================================== if (item.metadata && item.metadata.doc) { //dlg.main.Control("doc_paginas").label = item.metadata.doc.pages || ""; // Número de páginas (solo documentos, no PDFs) dlg.main.Control("doc_paginas").label = item.shellprop("system.document.pagecount") || ""; // Número de páginas de todo tipo de documentos, incluyendo PDFs, pero se necesita tener instalado PDF-XChange dlg.main.Control("doc_autor").label = item.metadata.doc.author || ""; // Autor dlg.main.Control("doc_comentario").label = item.metadata.other.usercomment || ""; // Comentarios dlg.main.Control("doc_miniatura").label = DOpus.LoadThumbnail(item.realpath); // Miniatura } // ===================================================================================================================================== // EJECUTABLES // ===================================================================================================================================== if (item.metadata && item.metadata.exe) { var exe = item.metadata.exe; dlg.main.Control("exe_producto").label = item.metadata.exe.prodname || ""; // Nombre de la aplicación dlg.main.Control("exe_version").label = item.metadata.exe.modversion || ""; // Versión dlg.main.Control("exe_empresa").label = item.metadata.exe.companyname || ""; // Nombre del fabricante (compañía) dlg.main.Control("exe_copyright").label = item.metadata.exe.copyright || ""; // Derechos de autor // FIRMA DIGITAL //dlg.main.Control("exe_firma").label = item.metadata.exe.signer || ""; // De esta forma no funciona en estos campos var ruta = item.realpath; // Ruta del archivo var firma = DOpus.FSUtil.GetSignature(ruta, true); // Extrae y comprueba (si no expiró, no se modificó, etc.) todas las propiedades del objeto firma, si existe. No avalia propiedades que no existan, solo analiza y extrae lo que existe var textoFirma = (firma && firma.valid && firma.certsigner && firma.certsigner.subject) || ""; // Comprobamos de forma manual, todas las propidades del objeto firma, que pueden no estar todas presentes en el archivo, y por tanto no analizadas en "firma = DOpus.FSUtil.GetSignature(ruta, true);". Ejemplo: firma = true = está firmado ** firma.valid = true = firma válida *** firma.certsigner = true = nombre de quien firmó *** firma.certsigner.subject = true = El nombre del firmante se puede mostrar como cadena de texto dlg.main.Control("exe_firma").label = textoFirma; // Muestra la firma en el control // DESCRIPCIÓN dlg.main.Control("exe_descripcion").label = item.metadata.exe.moddesc || ""; // Descripción del ejecutable // MINIATURA dlg.main.Control("exe_miniatura").label = DOpus.LoadThumbnail(item.realpath); // Miniatura } // ======================================================================================================================================= // LIMPIAR DIÁLOGO // ======================================================================================================================================= } else { dlg.main.title = (idioma === 1) ? "< no file/folder selected >" : "< ningún archivo/carpeta seleccionado >"; // Título de la barra Título mostrarSolo(dlg, "limp_"); // Como no existen controles con este prefijo, se limpia el diálogo DOpus.Output('Ningún archivo/carpeta seleccionado'); // Mensaje en consola dlg.main.Control("miniatura").visible = false; // Ocultar el control "miniatura" dlg.main.Control("btn_abrir_carpeta").enabled = false; // Desactivar el botón abrir carpeta dlg.main.Control("btn_abrir_archivo").enabled = false; // Desactivar el botón abrir archivo } } // Fin cargarArchivo() // ========================================================================================================================================== // BUCLE DE DE EVENTOS // ========================================================================================================================================== var msg, newtab, lister = tab.lister; main: while (true) { msg = dlg.main.GetMsg(); if (!msg.result) break; // ========================================================================================================================================== // EVENTOS CLIC // ========================================================================================================================================== // CLIC EN MINIATURAS ====================================================================================================================== // MINIATURAS DE CARPETAS CON IMÁGENES if ((msg.event === "click" || msg.event === "click_up") && msg.control) { if (msg.control.indexOf("carIma_imagen") === 0) { var index = parseInt(msg.control.substr("carIma_imagen".length)) - 1; if (index >= 0 && rutasImagenes[index]) { // rutasImagenes[index] = Ruta de cada una de las imágenes var cmd = DOpus.Create.Command(); cmd.RunCommand('Show AUTOFILELIST "' + rutasImagenes[index] + '"'); // Show = Abrir con el visor de Opus. AUTOFILELIST = Obtener rutas de imágenes aledañas para poder navegar a través de ellas si se desea } } } // MINIATURA DE IMAGEN if ((msg.event === "click" || msg.event === "click_up") && msg.control) { if (msg.control === "ima_miniatura") { var cmd = DOpus.Create.Command(); cmd.RunCommand("Show AUTOFILELIST"); // Show = Abrir con el visor de Opus. AUTOFILELIST = Obtener rutas de imágenes aledañas para poder navegar a través de ellas si se desea } } // MINIATURAS DE AUDIO, VIDEOS, DOCUMENTOS Y EJECUTABLES if ((msg.event === "click" || msg.event === "click_up") && msg.control) { if (msg.control === "aud_miniatura" || msg.control === "vid_miniatura" || msg.control === "doc_miniatura" || msg.control === "exe_miniatura") { var cmd = DOpus.Create.Command(); cmd.RunCommand("FileType ACTION=dblclk"); // Abrir los archivos con el programa predeterminado (se simula un doble clic sobre los archivos) } } // MINIATURAS DE CARPETAS SIN IMÁGENES E OUTROS ARCHIVOS if ((msg.event === "click" || msg.event === "click_up") && msg.control) { if (msg.control === "miniatura") { var cmd = DOpus.Create.Command(); if (item.is_dir) { cmd.RunCommand('Go "' + item.realpath + '"'); // Si carpeta, abrirla con el explorador } else { cmd.RunCommand('FileType ACTION=dblclk'); // Si archivo (otros), abrirlo con el programa predeterminado } } } // CLIC EN BOTONES ========================================================================================================================= if (msg.event == "click") { switch (msg.control) { case "btn_subir": var cmd = DOpus.Create.Command(); cmd.RunCommand('Go UP BACK'); cargarArchivo(); break; case "btn_atras": var cmd = DOpus.Create.Command(); cmd.RunCommand('Select PREV'); cargarArchivo(); break; case "btn_adelante": var cmd = DOpus.Create.Command(); cmd.RunCommand('Select NEXT'); cargarArchivo(); break; case "btn_abrir_carpeta": var cmd = DOpus.CreateCommand(); cmd.RunCommand('Go "' + item.realpath + '"'); break; case "btn_abrir_archivo": var cmd = DOpus.CreateCommand(); if (item.is_dir && imagenesCarpeta && imagenesCarpeta.imagenes.length > 0) { var primera = imagenesCarpeta.imagenes[0]; cmd.RunCommand('Show "' + primera.realpath + '" AUTOFILELIST'); // Si es una carpeta con imágenes, abrir la primera imagen } else if (item.metadata && item.metadata.image) { cmd.RunCommand('Show "' + item.realpath + '" AUTOFILELIST'); // Si es una imagen, abrirla } else { cmd.RunCommand('FileType ACTION=dblclk "' + item.realpath + '"'); // Si es cualquier otro archivo, abrirlo con el programa predeterminado } break; case "btn_posicion": posicion(); break; } } // ========================================================================================================================================== // EVENTOS DE LISTADO // ========================================================================================================================================== if (msg.event === 'tab') { dlg.watch_tab = msg.value; dlg.main.SetTimer(5, 'watchtab_timer', true); // Temporizador } else if (msg.event === 'timer' && msg.name === 'watchtab_timer') { //DOpus.Output('Evento Tab: ' + dlg.watch_tab); // Tipo de evento switch (dlg.watch_tab) { case 'select': cargarArchivo(); break; case 'navigate': tab.Update(); // Actualizar pestaña cargarArchivo(); break; case 'activate': case 'srcdst': case 'close': try { dlg.main.WatchTab(tab, 'stop'); // Detener el monitoreo de pestaña actual } catch (err) { // Probablemente falla porque la pestaña ya está cerrada }; lister.Update(); DOpus.Delay(5); // Darle un pequeño descanso a Opus porque a veces no consigue obtener la nueva pestaña tab = lister.activetab; // Obtener pestaña activa //DOpus.Output('Nueva pestaña: ' + tab.path); if (tab) { selected = tab.selected; dlg.main.WatchTab(tab, 'select,navigate,activate,srcdst'); // Crear nuevo evento Watchtab cargarArchivo(); } else { //DOpus.Output('No se puede abrir la nueva pestaña. Cerrando el diálogo...'); break main; } break; } // Fin de "switch" } // Fin de "else if" } // Fin de "main: while" } // FIN DE BARRA ESTADO // ========================================================================================================================================= // FUNCIÓN TRADUCCIÓN // ========================================================================================================================================= function traduccion(dlg) { // DICIONARIO var idiomas = { 1: { // Inglés gen_tipo_archivo_t: "File type:", gen_nombre_t: "Name:", gen_extension_t: "Extension:", gen_tamano_t: "Size:", gen_atributos_t: "Attributes:", gen_fecha_creacion_t: "Created:", gen_fecha_modificacion_t: "Modified:", gen_fecha_ultimo_acceso_t: "Last access:", ima_fecha_captura_t: "Date taken:", ima_resolucion_t: "Resolution:", ima_dimensiones_t: "Dimensions:", ima_ppp_t: "DPI:", ima_color_t: "Color model:", ima_relacion_aspecto_t: "Aspect ratio:", ima_orientacion_t: "Orientation:", ima_escala_t: "Screen scale:", aud_codec_audio_t: "Audio codec:", aud_modo_t: "Audio mode:", aud_tasa_bits_t: "Bitrate:", aud_tasa_muestreo_t: "Sample rate:", aud_duracion_t: "Duration:", vid_codec_audio_t: "Audio codec:", vid_codec_video_t: "Video codec:", vid_dimensiones_t: "Resolution:", vid_fotogramas_t: "Frames:", vid_relacion_t: "Aspect ratio:", vid_modo_t: "Audio mode:", vid_tasa_muestreo_t: "Sample rate:", vid_duracion_t: "Duration:", vid_tasa_bits_audio_t: "Audio bitrate:", vid_tasa_bits_video_t: "Video bitrate:", doc_paginas_t: "Pages:", doc_autor_t: "Author:", doc_comentario_t: "Comment:", exe_producto_t: "Product:", exe_version_t: "Version:", exe_empresa_t: "Company:", exe_firma_t: "Digital signature:", exe_copyright_t: "Copyright:", exe_descripcion_t: "Description:", btn_subir: "Up", btn_abrir_carpeta: "Open folder", btn_abrir_archivo: "Open file", btn_posicion: "Reset position" } }; // TRADUCCIÓN DE CONTROLES var idioma = Script.config.idioma; // idioma = 0, si Español; idioma = 1, si English if (idioma != 1) return; // Solo aplica la traducción en caso de idioma = 1 var tra = idiomas[idioma]; // En este caso aplica el diccionario idiomas [1] (English) for (var clave in tra) { var control = dlg.main.Control(clave); if (control) { control.label = tra[clave]; } } } ==SCRIPT RESOURCES