Jump to content
APB

Generador de código QR

Recommended Posts

Necesité/quise crear un QR para la configuración de la wifi y terminé creándolo en pure JS WiFi QR Code Generator. Aunque no tengo nada malo que decir de esta página no me gustó hacerlo vía web y busqué otra manera.

He encontrado esta web iworkautomation con un AppleScript disponible que genera QR.

Me he limitado a modificarlo para que en lugar colocarlo en un documento Keynote, guarde el QR generado en el Escritorio y lo abra. También le he añadido la opción de generar códigos para la wifi, copiando la forma de hacerlo de la primera web citada.

No he detectado ninguna instrucción sospechosa pero contadlo si veis alguna.

No he pedido permiso a nadie para hacerlo por lo que desconozco si infrinjo su copyright. Si la administración lo considera oportuno que elimine el hilo.

Tanto el QR de una dirección web como el de la configuración de la wifi son detectados y leídos sin problemas por la cámara del iPhone, último iOS, desde la pantalla del Mac.

-- ************************
-- ************************
-- Tot el codi important correspon a la web https://iworkautomation.com/keynote/examples-QR-code.html el dia 20/02/2019
-- La cadena de text per la configuració de la wifi està extreta de la web https://qifi.org/
-- ************************
-- ************************

-- Genera 2 tipus de QR: per accedir a webs i per configurar la wifi.
-- Guarda l'arxiu QR en l'escriptori.


use framework "Foundation"
use framework "CoreImage"
use framework "AppKit"
use framework "CoreGraphics"
use scripting additions

property targetMinimumDimension : 400



on ajustar_Text(text_brut)
	repeat with caracterExtra in ["\\", ";", ",", ":"]
		set AppleScript's text item delimiters to the caracterExtra
		set a to text items of (text_brut as string)
		set AppleScript's text item delimiters to the "\\" & caracterExtra
		set text_brut to a as string
	end repeat
	return text_brut
end ajustar_Text


try
	
	display dialog "Seleccionar QR desitjat" buttons {"QR d'una Web", "QR d'una wifi"} default button 1 with title "Generador de QR"
	if button returned of result is "QR d'una Web" then
		--opció crear adreça
		set textQR to ""
		repeat while textQR = ""
			set textQR to text returned of (display dialog "Escriu la URL" default answer "")
		end repeat
	else
		--opció crear QR de la wifi
		set wifiNom to ""
		repeat while wifiNom = ""
			set wifiNom to my ajustar_Text(text returned of (display dialog "Nom de la wifi" default answer ""))
		end repeat
		set wifiClau to my ajustar_Text(text returned of (display dialog "Contrasenya de la wifi" default answer ""))
		if wifiClau = "" then
			set wifiCodif to "nopass"
		else
			set laLlista to {"WPA/WPA2", "WEP", "Cap"}
			choose from list laLlista with prompt "Escull una codificació" default items {"WPA/WPA2"}
			set wifiCodif to result as text
			if wifiCodif = "Cap" then
				set wifiCodif to "nopass"
				set wifiClau to ""
			end if
		end if
		set textQR to "WIFI:S:" & wifiNom & ";T:" & wifiCodif & ";P:" & wifiClau & ";"
	end if
	
	-- derive a file path for the created image file
	set nomArxiu to (short date string of (current date) & " - " & (time of (current date))) -- meu
	tell application "Finder" to set theURL to (path to desktop folder) --meu
	
	set the targetItemHFSPath to (theURL as string) & nomArxiu & ".jpg"
	set targetItemPOSIXPath to POSIX path of targetItemHFSPath
	set thisImageObject to my createFullSizeQRCodeImageObjectForString(textQR)
	my writeNSImageObjectToFileAsJPEG(thisImageObject, targetItemPOSIXPath, false)
	
	set the targetFile to targetItemHFSPath as alias
	
	tell application "Finder" to open file targetFile --meu
	
	--say "Fet"
on error errorMessage number errorNumber
	if errorNumber is not -128 then
		set spokenErrorTitle to "I was unable to complete your request: "
		set cfgutil to "/usr/bin/say"
		set theTask to (current application's NSTask's launchedTaskWithLaunchPath:cfgutil arguments:{(spokenErrorTitle & errorMessage)})
		tell application (POSIX path of (path to frontmost application))
			activate
			display alert "Unable to Complete Request:" message errorMessage buttons {"Cancel"} default button 1
		end tell
		theTask's terminate()
	end if
end try

on createFullSizeQRCodeImageObjectForString(thisString)
	-- returns a full-size NSImage object
	set thisString to current application's NSString's stringWithString:thisString
	set thisData to thisString's dataUsingEncoding:(current application's NSUTF8StringEncoding)
	set anImageFilter to current application's CIFilter's filterWithName:"CIQRCodeGenerator"
	anImageFilter's setDefaults()
	anImageFilter's setValue:thisData forKey:"inputMessage"
	anImageFilter's setValue:"L" forKey:"inputCorrectionLevel"
	
	set baseImage to anImageFilter's outputImage()
	set aTransform to current application's CGAffineTransform's CGAffineTransformMakeScale(100.0, 100.0)
	set outputImage to baseImage's imageByApplyingTransform:aTransform
	set imageRepresentation to current application's NSCIImageRep's imageRepWithCIImage:outputImage
	set resultingImageObject to current application's NSImage's alloc()'s initWithSize:(imageRepresentation's |size|())
	
	resultingImageObject's addRepresentation:imageRepresentation
	
	return resultingImageObject
end createFullSizeQRCodeImageObjectForString

on writeNSImageObjectToFileAsJPEG(thisImageObject, targetImageFilePath, shouldRevealInFinder)
	-- create JPEG data for the image object
	set tiffData to thisImageObject's TIFFRepresentation()
	set imageRep to current application's NSBitmapImageRep's imageRepWithData:tiffData
	set theProps to current application's NSDictionary's dictionaryWithObject:1.0 forKey:(current application's NSImageCompressionFactor)
	set imageData to (imageRep's representationUsingType:(current application's NSJPEGFileType) |properties|:theProps)
	
	-- write the JPEG data to file
	set theResult to (imageData's writeToFile:targetImageFilePath atomically:true |error|:(missing value)) as boolean
	if theResult is true then
		if shouldRevealInFinder is true then
			set theseURLs to {}
			set the end of theseURLs to (current application's NSURL's fileURLWithPath:targetImageFilePath)
			-- reveal items in file viewer
			tell current application's NSWorkspace to set theWorkspace to sharedWorkspace()
			tell theWorkspace to activateFileViewerSelectingURLs:theseURLs
		end if
		return true
	else
		error "There was a problem writing the image object to file."
	end if
end writeNSImageObjectToFileAsJPEG

Como todos los scripts, abrid el Editor de Scripts y pegad el código en un documento nuevo. Lo podéis guardar como aplicación para que no se abra el editor cada vez.

 

Para probarlo antes de descargar, una muestra del resultado. En exclusiva el nuevo servicio de Macu, aún en su versión alfa. 🤐🤐😉 

1161768147_21219-40421.thumb.jpg.f58bb9cc60f612ce922e72e0eef5e917.jpg

 

Si tenéis Android podrías comprobar si os funciona, creo que necesitáis una app lectora de QR. 

Edited by APB
  • Me gusta 1
  • Gracias 2

Share this post


Link to post
Share on other sites
Posted (edited)

Uno más completo, genera QR para todas las opciones que encontré: Texto, Web, Teléfono, Email, Evento, SMS, Geoposición, para configurar la Wifi i para crear un contacto (V-CARD). 

Al final he necesitado crear dos versiones por incompatibilidad con versiones viejas del macOS.

Versión para macOS High Sierra y superior:

-- ************************
-- ************************
-- Tot el codi de creació del QR correspon a la web https://iworkautomation.com/keynote/examples-QR-code.html el dia 20/02/2019
-- La cadena de text per la configuració de la wifi està extreta de la web https://qifi.org/
-- Per altres consultes sobre posibilitats dels QR: https://www.nilovelez.com/2012/08/guia-de-formatos-de-contenido-para-codigos-qr/
-- ************************
-- ************************

-- Genera diversos tipus de QR: Text, Web, Telèfon, Email, Esdeveniment, SMS, Geoposició, per configurar la Wifi i per crear un contacte (V-CARD).
-- Guarda l'arxiu QR en l'escriptori.


use framework "Foundation"
use framework "CoreImage"
use framework "AppKit"
use framework "CoreGraphics"
use scripting additions

property targetMinimumDimension : 400
property errorFaltaDades : ""

property finestraPrincipal : class "NSWindow"
property NSWindowController : class "NSWindowController"
property finestraController : missing value
property tabView1 : class "NSTabView"

property botoWeb1 : class "NSButton"
property botoWeb2 : class "NSButton"
property nomTexteWeb : class "NSTextField"
property texteWeb : class "NSTextField"

property botoEmail1 : class "NSButton"
property nomTexteEmail1 : class "NSTextField"
property nomTexteEmail2 : class "NSTextField"
property nomTexteEmail3 : class "NSTextField"
property nomTexteEmail4 : class "NSTextField"
property nomTexteEmail5 : class "NSTextField"
property texteEmail1 : class "NSTextField"
property texteEmail2 : class "NSTextField"
property texteEmail3 : class "NSTextField"
property texteEmail4 : class "NSTextField"
property texteEmail5 : class "NSTextField"

property botoSMS1 : class "NSButton"
property nomTexteSMS1 : class "NSTextField"
property nomTexteSMS2 : class "NSTextField"
property texteSMS1 : class "NSTextField"
property texteSMS2 : class "NSTextField"

property nomWifi : class "NSTextField"
property contWifi : class "NSTextField"
property codifWifi : class "NSPopButton"

property nomCont : class "NSTextField"
property cognomCont : class "NSTextField"
property mobilCont : class "NSTextField"
property fixeCont : class "NSTextField"
property adrezaCont : class "NSTextField"
property ciutatCont : class "NSTextField"
property estatCont : class "NSTextField"
property codiCont : class "NSTextField"
property paisCont : class "NSTextField"
property correuCont : class "NSTextField"


tell application "Finder" to set nomScript to name of me

-- FINESTRA
set finestraAlzada to 500
set finestraAmplada to 640
set finestraRect to current application's NSMakeRect(0, 0, finestraAmplada, finestraAlzada)
set finestraPrincipal to current application's NSWindow's alloc's initWithContentRect:finestraRect styleMask:3 backing:2 defer:yes
set finestraController to NSWindowController's alloc's initWithWindow:finestraPrincipal
--finestraPrincipal's setFrameOrigin:{150, 600} -- Posicionar la finestra dins la pantalla
finestraPrincipal's setTitle:nomScript -- Títol de la finestra
finestraPrincipal's setFrameAutosaveName:nomScript -- Per recordar el lloc la propera vegada
--finestraController's |window|'s makeKeyAndOrderFront:me -- Posat al final es visualitza la finestra correctament.


--TABView
set valorFrame to current application's NSMakeRect(20, (finestraAlzada - 460), 600, 450) --origin ,x,y ,size width,height
set tabView1 to current application's NSTabView's alloc's initWithFrame:valorFrame
--tabView1's setDelegate:me -- No sembla necesari

finestraPrincipal's contentView's addSubview:tabView1

-- TabViewItems
set tabViewWeb to current application's NSTabViewItem's alloc's initWithIdentifier:""
tabViewWeb's setLabel:"Text, Web o Telèfon"
set tabViewMail to current application's NSTabViewItem's alloc's initWithIdentifier:""
tabViewMail's setLabel:"Email o Esdeveniment"
set tabViewSMS to current application's NSTabViewItem's alloc's initWithIdentifier:""
tabViewSMS's setLabel:"SMS o Geoposició"
set tabViewWifi to current application's NSTabViewItem's alloc's initWithIdentifier:""
tabViewWifi's setLabel:"Wifi"
set tabViewCont to current application's NSTabViewItem's alloc's initWithIdentifier:""
tabViewCont's setLabel:"Contacte"

tabView1's addTabViewItem:tabViewWeb
tabView1's addTabViewItem:tabViewMail
tabView1's addTabViewItem:tabViewSMS
tabView1's addTabViewItem:tabViewWifi
tabView1's addTabViewItem:tabViewCont

--Obtenir mida de la tabViewItemView (Sols després d'afegir el tabViewItem en el tabView)
set rectValor to tabViewWeb's view's frame

set tabViewItemAmplada to current application's NSWidth(rectValor)
set tabViewItemAlzada to current application's NSHeight(rectValor)

-- TabViewWeb  "Text, Web o Telèfon"
set valorFrame to current application's NSMakeRect(20, (tabViewItemAlzada - 60), 300, 25) --origin ,x,y ,size width,height
set nomTexteWeb to current application's NSTextField's labelWithString:"Adreça Web"
nomTexteWeb's setFrame:valorFrame

set valorFrame to current application's NSMakeRect(20, tabViewItemAlzada - 80, 400, 25) --origin ,x,y ,size width,heigh
set texteWeb to current application's NSTextField's alloc's initWithFrame:valorFrame
texteWeb's cell's setPlaceholderString:"https://www.apple.com/es/" -- Text de mostra en gris

set valorFrame to current application's NSMakeRect(20, tabViewItemAlzada - 110, 100, 25) -- button rect origin ,x,y ,size width,height
set botoWeb1 to current application's NSButton's alloc's initWithFrame:valorFrame -- init button

botoWeb1's setTitle:"Text"
botoWeb1's setButtonType:4 --NSButtonTypeRadio
botoWeb1's setState:0
botoWeb1's setTarget:me
botoWeb1's setAction:"accioRadioWeb:"

set valorFrame to current application's NSMakeRect(120, tabViewItemAlzada - 110, 100, 25) -- button rect origin ,x,y ,size width,height
set botoWeb2 to current application's NSButton's alloc's initWithFrame:valorFrame -- init button

botoWeb2's setTitle:"Web"
botoWeb2's setButtonType:4 --NSButtonTypeRadio
botoWeb2's setState:1
botoWeb2's setTarget:me
botoWeb2's setAction:"accioRadioWeb:"

set valorFrame to current application's NSMakeRect(220, tabViewItemAlzada - 110, 100, 25) -- button rect origin ,x,y ,size width,height
set botoWeb3 to current application's NSButton's alloc's initWithFrame:valorFrame -- init button

botoWeb3's setTitle:"Telèfon"
botoWeb3's setButtonType:4 --NSButtonTypeRadio
botoWeb3's setState:0
botoWeb3's setTarget:me
botoWeb3's setAction:"accioRadioWeb:"

tabViewWeb's view's addSubview:nomTexteWeb
tabViewWeb's view's addSubview:texteWeb
tabViewWeb's view's addSubview:botoWeb1
tabViewWeb's view's addSubview:botoWeb2
tabViewWeb's view's addSubview:botoWeb3

-- TabViewMail  "Email o Esdeveniment"
set valorFrame to current application's NSMakeRect(20, (tabViewItemAlzada - 60), 300, 25) --origin ,x,y ,size width,height
set nomTexteEmail1 to current application's NSTextField's labelWithString:"Adreça del Email"
nomTexteEmail1's setFrame:valorFrame

set valorFrame to current application's NSMakeRect(20, tabViewItemAlzada - 80, 400, 25) --origin ,x,y ,size width,heigh
set texteEmail1 to current application's NSTextField's alloc's initWithFrame:valorFrame

set valorFrame to current application's NSMakeRect(20, (tabViewItemAlzada - 120), 300, 25) --origin ,x,y ,size width,height
set nomTexteEmail2 to current application's NSTextField's labelWithString:"Assumpte"
nomTexteEmail2's setFrame:valorFrame

set valorFrame to current application's NSMakeRect(20, tabViewItemAlzada - 140, 400, 25) --origin ,x,y ,size width,heigh
set texteEmail2 to current application's NSTextField's alloc's initWithFrame:valorFrame

set valorFrame to current application's NSMakeRect(20, (tabViewItemAlzada - 180), 300, 25) --origin ,x,y ,size width,height
set nomTexteEmail3 to current application's NSTextField's labelWithString:"Contingut"
nomTexteEmail3's setFrame:valorFrame

set valorFrame to current application's NSMakeRect(20, tabViewItemAlzada - 200, 400, 25) --origin ,x,y ,size width,heigh
set texteEmail3 to current application's NSTextField's alloc's initWithFrame:valorFrame

set valorFrame to current application's NSMakeRect(20, (tabViewItemAlzada - 240), 300, 25) --origin ,x,y ,size width,height
set nomTexteEmail4 to current application's NSTextField's labelWithString:"Adreça amb copia visible"
nomTexteEmail4's setFrame:valorFrame

set valorFrame to current application's NSMakeRect(20, tabViewItemAlzada - 260, 400, 25) --origin ,x,y ,size width,heigh
set texteEmail4 to current application's NSTextField's alloc's initWithFrame:valorFrame

set valorFrame to current application's NSMakeRect(20, (tabViewItemAlzada - 300), 300, 25) --origin ,x,y ,size width,height
set nomTexteEmail5 to current application's NSTextField's labelWithString:"Adreça amb copia oculta"
nomTexteEmail5's setFrame:valorFrame

set valorFrame to current application's NSMakeRect(20, tabViewItemAlzada - 320, 400, 25) --origin ,x,y ,size width,heigh
set texteEmail5 to current application's NSTextField's alloc's initWithFrame:valorFrame

set valorFrame to current application's NSMakeRect(20, tabViewItemAlzada - 360, 100, 25) -- button rect origin ,x,y ,size width,height
set botoEmail1 to current application's NSButton's alloc's initWithFrame:valorFrame -- init button

botoEmail1's setTitle:"Email"
botoEmail1's setButtonType:4 --NSButtonTypeRadio
botoEmail1's setState:1
botoEmail1's setTarget:me
botoEmail1's setAction:"accioRadioEmail:"

set valorFrame to current application's NSMakeRect(120, tabViewItemAlzada - 360, 100, 25) -- button rect origin ,x,y ,size width,height
set botoEmail2 to current application's NSButton's alloc's initWithFrame:valorFrame -- init button

botoEmail2's setTitle:"Esdeveniment"
botoEmail2's setButtonType:4 --NSButtonTypeRadio
botoEmail2's setState:0
botoEmail2's setTarget:me
botoEmail2's setAction:"accioRadioEmail:"

tabViewMail's view's addSubview:nomTexteEmail1
tabViewMail's view's addSubview:texteEmail1
tabViewMail's view's addSubview:nomTexteEmail2
tabViewMail's view's addSubview:texteEmail2
tabViewMail's view's addSubview:nomTexteEmail3
tabViewMail's view's addSubview:texteEmail3
tabViewMail's view's addSubview:nomTexteEmail4
tabViewMail's view's addSubview:texteEmail4
tabViewMail's view's addSubview:nomTexteEmail5
tabViewMail's view's addSubview:texteEmail5
tabViewMail's view's addSubview:botoEmail1
tabViewMail's view's addSubview:botoEmail2

-- TabViewSMS "SMS o Geoposició"
set valorFrame to current application's NSMakeRect(20, (tabViewItemAlzada - 60), 300, 25) --origin ,x,y ,size width,height
set nomTexteSMS1 to current application's NSTextField's labelWithString:"Telèfon amb el codi del país."
nomTexteSMS1's setFrame:valorFrame

set valorFrame to current application's NSMakeRect(20, tabViewItemAlzada - 80, 400, 25) --origin ,x,y ,size width,heigh
set texteSMS1 to current application's NSTextField's alloc's initWithFrame:valorFrame
texteSMS1's cell's setPlaceholderString:"+34931234567" -- Text de mostra en gris

set valorFrame to current application's NSMakeRect(20, (tabViewItemAlzada - 120), 300, 25) --origin ,x,y ,size width,height
set nomTexteSMS2 to current application's NSTextField's labelWithString:"Text del SMS"
nomTexteSMS2's setFrame:valorFrame

set valorFrame to current application's NSMakeRect(20, tabViewItemAlzada - 140, 400, 25) --origin ,x,y ,size width,heigh
set texteSMS2 to current application's NSTextField's alloc's initWithFrame:valorFrame

set valorFrame to current application's NSMakeRect(20, tabViewItemAlzada - 360, 100, 25) -- button rect origin ,x,y ,size width,height
set botoSMS1 to current application's NSButton's alloc's initWithFrame:valorFrame -- init button

botoSMS1's setTitle:"SMS"
botoSMS1's setButtonType:4 --NSButtonTypeRadio
botoSMS1's setState:1
botoSMS1's setTarget:me
botoSMS1's setAction:"accioRadioSMS:"

set valorFrame to current application's NSMakeRect(120, tabViewItemAlzada - 360, 100, 25) -- button rect origin ,x,y ,size width,height
set botoSMS2 to current application's NSButton's alloc's initWithFrame:valorFrame -- init button

botoSMS2's setTitle:"Geoposició"
botoSMS2's setButtonType:4 --NSButtonTypeRadio
botoSMS2's setState:0
botoSMS2's setTarget:me
botoSMS2's setAction:"accioRadioSMS:"

tabViewSMS's view's addSubview:nomTexteSMS1
tabViewSMS's view's addSubview:texteSMS1
tabViewSMS's view's addSubview:nomTexteSMS2
tabViewSMS's view's addSubview:texteSMS2
tabViewSMS's view's addSubview:botoSMS1
tabViewSMS's view's addSubview:botoSMS2

-- TabViewWifi
set valorFrame to current application's NSMakeRect(20, (tabViewItemAlzada - 60), 150, 25) --origin ,x,y ,size width,height
set nomTexteWifi to current application's NSTextField's labelWithString:"Nom de la Wifi"
nomTexteWifi's setFrame:valorFrame

set valorFrame to current application's NSMakeRect(20, tabViewItemAlzada - 80, 400, 25) --origin ,x,y ,size width,heigh
set nomWifi to current application's NSTextField's alloc's initWithFrame:valorFrame

set valorFrame to current application's NSMakeRect(20, (tabViewItemAlzada - 120), 150, 25) --origin ,x,y ,size width,height
set contTexteWifi to current application's NSTextField's labelWithString:"Contrasenya de la Wifi"
contTexteWifi's setFrame:valorFrame

set valorFrame to current application's NSMakeRect(20, tabViewItemAlzada - 140, 200, 25) --origin ,x,y ,size width,heigh
set contWifi to current application's NSSecureTextField's alloc's initWithFrame:valorFrame

set valorFrame to current application's NSMakeRect(20, (tabViewItemAlzada - 180), 150, 25) --origin ,x,y ,size width,height
set codifTexteWifi to current application's NSTextField's labelWithString:"Codificació de la Wifi"
codifTexteWifi's setFrame:valorFrame

set valorFrame to current application's NSMakeRect(25, (tabViewItemAlzada - 200), 150, 25) -- button rect origin ,x,y ,size width,height
set codifWifi to current application's NSPopUpButton's alloc's initWithFrame:valorFrame pullsDown:no -- init button

codifWifi's addItemsWithTitles:{"WPA/WPA2", "WEP", "Cap"}

tabViewWifi's view's addSubview:nomTexteWifi
tabViewWifi's view's addSubview:nomWifi
tabViewWifi's view's addSubview:contTexteWifi
tabViewWifi's view's addSubview:contWifi
tabViewWifi's view's addSubview:codifTexteWifi
tabViewWifi's view's addSubview:codifWifi

-- TabViewCont
set valorFrame to current application's NSMakeRect(20, (tabViewItemAlzada - 60), 150, 25) --origin ,x,y ,size width,height
set nomTexteCont to current application's NSTextField's labelWithString:"Nom"
nomTexteCont's setFrame:valorFrame
nomTexteCont's setAlignment:1

set valorFrame to current application's NSMakeRect(180, tabViewItemAlzada - 60, 150, 25) --origin ,x,y ,size width,heigh
set nomCont to current application's NSTextField's alloc's initWithFrame:valorFrame

set valorFrame to current application's NSMakeRect(20, (tabViewItemAlzada - 90), 150, 25) --origin ,x,y ,size width,height
set cognomTexteCont to current application's NSTextField's labelWithString:"Cognoms"
cognomTexteCont's setFrame:valorFrame
cognomTexteCont's setAlignment:1

set valorFrame to current application's NSMakeRect(180, tabViewItemAlzada - 90, 250, 25) --origin ,x,y ,size width,heigh
set cognomCont to current application's NSTextField's alloc's initWithFrame:valorFrame

set valorFrame to current application's NSMakeRect(20, (tabViewItemAlzada - 120), 150, 25) --origin ,x,y ,size width,height
set mobilTexteCont to current application's NSTextField's labelWithString:"Número de mòbil"
mobilTexteCont's setFrame:valorFrame
mobilTexteCont's setAlignment:1

set valorFrame to current application's NSMakeRect(180, tabViewItemAlzada - 120, 100, 25) --origin ,x,y ,size width,heigh
set mobilCont to current application's NSTextField's alloc's initWithFrame:valorFrame

set valorFrame to current application's NSMakeRect(20, (tabViewItemAlzada - 150), 150, 25) --origin ,x,y ,size width,height
set fixeTexteCont to current application's NSTextField's labelWithString:"Número del fixe"
fixeTexteCont's setFrame:valorFrame
fixeTexteCont's setAlignment:1

set valorFrame to current application's NSMakeRect(180, tabViewItemAlzada - 150, 100, 25) --origin ,x,y ,size width,heigh
set fixeCont to current application's NSTextField's alloc's initWithFrame:valorFrame


set valorFrame to current application's NSMakeRect(20, (tabViewItemAlzada - 180), 150, 25) --origin ,x,y ,size width,height
set adrezaTexteCont to current application's NSTextField's labelWithString:"Carrer, número i pis"
adrezaTexteCont's setFrame:valorFrame
adrezaTexteCont's setAlignment:1

set valorFrame to current application's NSMakeRect(180, tabViewItemAlzada - 180, 350, 25) --origin ,x,y ,size width,heigh
set adrezaCont to current application's NSTextField's alloc's initWithFrame:valorFrame

set valorFrame to current application's NSMakeRect(20, (tabViewItemAlzada - 210), 150, 25) --origin ,x,y ,size width,height
set ciutatTexteCont to current application's NSTextField's labelWithString:"Ciutat"
ciutatTexteCont's setFrame:valorFrame
ciutatTexteCont's setAlignment:1

set valorFrame to current application's NSMakeRect(180, tabViewItemAlzada - 210, 150, 25) --origin ,x,y ,size width,heigh
set ciutatCont to current application's NSTextField's alloc's initWithFrame:valorFrame

set valorFrame to current application's NSMakeRect(20, (tabViewItemAlzada - 240), 150, 25) --origin ,x,y ,size width,height
set estatTexteCont to current application's NSTextField's labelWithString:"Provincia"
estatTexteCont's setFrame:valorFrame
estatTexteCont's setAlignment:1

set valorFrame to current application's NSMakeRect(180, tabViewItemAlzada - 240, 150, 25) --origin ,x,y ,size width,heigh
set estatCont to current application's NSTextField's alloc's initWithFrame:valorFrame

set valorFrame to current application's NSMakeRect(20, (tabViewItemAlzada - 270), 150, 25) --origin ,x,y ,size width,height
set codiTexteCont to current application's NSTextField's labelWithString:"Codi Postal"
codiTexteCont's setFrame:valorFrame
codiTexteCont's setAlignment:1

set valorFrame to current application's NSMakeRect(180, tabViewItemAlzada - 270, 100, 25) --origin ,x,y ,size width,heigh
set codiCont to current application's NSTextField's alloc's initWithFrame:valorFrame

set valorFrame to current application's NSMakeRect(20, (tabViewItemAlzada - 300), 150, 25) --origin ,x,y ,size width,height
set paisTexteCont to current application's NSTextField's labelWithString:"Pais"
paisTexteCont's setFrame:valorFrame
paisTexteCont's setAlignment:1

set valorFrame to current application's NSMakeRect(180, tabViewItemAlzada - 300, 200, 25) --origin ,x,y ,size width,heigh
set paisCont to current application's NSTextField's alloc's initWithFrame:valorFrame

set valorFrame to current application's NSMakeRect(20, (tabViewItemAlzada - 330), 150, 25) --origin ,x,y ,size width,height
set correuTexteCont to current application's NSTextField's labelWithString:"Correu electrònic"
correuTexteCont's setFrame:valorFrame
correuTexteCont's setAlignment:1

set valorFrame to current application's NSMakeRect(180, tabViewItemAlzada - 330, 350, 25) --origin ,x,y ,size width,heigh
set correuCont to current application's NSTextField's alloc's initWithFrame:valorFrame

tabViewCont's view's addSubview:nomTexteCont
tabViewCont's view's addSubview:nomCont
tabViewCont's view's addSubview:cognomTexteCont
tabViewCont's view's addSubview:cognomCont
tabViewCont's view's addSubview:mobilTexteCont
tabViewCont's view's addSubview:mobilCont
tabViewCont's view's addSubview:fixeTexteCont
tabViewCont's view's addSubview:fixeCont
tabViewCont's view's addSubview:adrezaTexteCont
tabViewCont's view's addSubview:adrezaCont
tabViewCont's view's addSubview:ciutatTexteCont
tabViewCont's view's addSubview:ciutatCont
tabViewCont's view's addSubview:estatTexteCont
tabViewCont's view's addSubview:estatCont
tabViewCont's view's addSubview:codiTexteCont
tabViewCont's view's addSubview:codiCont
tabViewCont's view's addSubview:paisTexteCont
tabViewCont's view's addSubview:paisCont
tabViewCont's view's addSubview:correuTexteCont
tabViewCont's view's addSubview:correuCont

-- BOTONS Clasics
set valorFrame to current application's NSMakeRect((finestraAmplada - 120), 20, 100, 20) -- button rect origin ,x,y ,size width,height
set botoOK to current application's NSButton's alloc's initWithFrame:valorFrame -- init button

botoOK's setTitle:"Crear QR"
set botoOK's bezelStyle to 1 --NSBezelStyleRounded
botoOK's setButtonType:0 --NSButtonTypeMomentaryLight
botoOK's setTarget:me
botoOK's setAction:"accioBotoOK:"

set valorFrame to current application's NSMakeRect((finestraAmplada - 230), 20, 100, 20) -- button rect origin ,x,y ,size width,height
set botoCan to current application's NSButton's alloc's initWithFrame:valorFrame -- init button

botoCan's setTitle:"Cancel·lar"
set botoCan's bezelStyle to 1 --NSBezelStyleRounded
botoCan's setButtonType:0 --NSMomentaryLightButton
botoCan's setTarget:me
botoCan's setAction:"accioBotoCan:"

finestraPrincipal's contentView's addSubview:botoOK
finestraPrincipal's contentView's addSubview:botoCan

finestraPrincipal's setDefaultButtonCell:(botoOK's cell) --Per determinar un botó com a Default

finestraController's |window|'s makeKeyAndOrderFront:me -- Posat al final es visualitza la finestra correctament.

--error number -128 --per aturar l'execució


-- *** ACCIONS i RUTINES ***
on accioRadioWeb:sender
	if sender = botoWeb1 then
		nomTexteWeb's setStringValue:"Text"
		texteWeb's cell's setPlaceholderString:"" -- Text de mostra en gris
	else if sender = botoWeb2 then
		nomTexteWeb's setStringValue:"Adreça Web"
		texteWeb's cell's setPlaceholderString:"https://www.apple.com/es/" -- Text de mostra en gris
	else --botoWeb3
		nomTexteWeb's setStringValue:"Telèfon amb el codi del país."
		texteWeb's cell's setPlaceholderString:"+34931234567" -- Text de mostra en gris
	end if
end accioRadioWeb:

on accioRadioEmail:sender
	if sender = botoEmail1 then
		nomTexteEmail1's setStringValue:"Adreça del Email"
		nomTexteEmail2's setStringValue:"Assumpte"
		nomTexteEmail3's setStringValue:"Contingut"
		nomTexteEmail4's setStringValue:"Adreça amb copia visible"
		nomTexteEmail5's setStringValue:"Adreça amb copia oculta"
		texteEmail2's cell's setPlaceholderString:"" -- Text de mostra en gris
		texteEmail3's cell's setPlaceholderString:"" -- Text de mostra en gris
	else
		nomTexteEmail1's setStringValue:"Títol del esdeveniment"
		nomTexteEmail2's setStringValue:"Data i hora Inici"
		nomTexteEmail3's setStringValue:"Data i hora Final"
		nomTexteEmail4's setStringValue:"Lloc"
		nomTexteEmail5's setStringValue:"Descripció"
		texteEmail2's cell's setPlaceholderString:"20160423 T 100000" -- Text de mostra en gris
		texteEmail3's cell's setPlaceholderString:"20160423 T 175900" -- Text de mostra en gris
	end if
end accioRadioEmail:

on accioRadioSMS:sender
	if sender = botoSMS1 then
		nomTexteSMS1's setStringValue:"Telèfon amb el codi del país."
		nomTexteSMS2's setStringValue:"Text del SMS"
		texteSMS1's cell's setPlaceholderString:"+34931234567" -- Text de mostra en gris
	else
		nomTexteSMS1's setStringValue:"Coordenades GPS"
		nomTexteSMS2's setStringValue:"Nom del lloc"
		texteSMS1's cell's setPlaceholderString:"40.416590,-3.703830" -- Text de mostra en gris
	end if
end accioRadioSMS:

on accioBotoOK:sender
	finestraPrincipal's makeFirstResponder:(missing value) -- Actualitza els valors
	
	-- obtenir el tabViewItem seleccionat
	set tabViewSelect to tabView1's selectedTabViewItem
	set indexTab to tabView1's indexOfTabViewItem:tabViewSelect
	if indexTab = 0 then -- "Text, Web o Telèfon"
		if botoWeb1's state as string = "1" then
			-- Text
			set textQR to texteWeb's stringValue as string
			if textQR = "" then
				set errorFaltaDades to "el Text"
			end if
		else if botoWeb2's state as string = "1" then
			
			-- Web
			set textQR to texteWeb's stringValue as string
			if textQR = "" then
				set errorFaltaDades to "la Adreça Web"
			end if
		else
			
			-- Telèfon
			set textQR to "TEL:" & netejarText(texteWeb's stringValue as string)
			if textQR = "TEL:" then
				set errorFaltaDades to "el Telèfon"
			end if
		end if
		
	else if indexTab = 1 then -- "Email o Esdeveniment"
		
		if botoEmail1's state as string = "1" then
			-- Email
			set textQR to "mailto:" & netejarText(texteEmail1's stringValue as string) & "?"
			if textQR = "mailto:?" then
				set errorFaltaDades to "el Email"
			end if
			set textTemporal to netejarText(texteEmail2's stringValue as string)
			if textTemporal is not "" then
				set textQR to textQR & "subject=" & textTemporal
			end if
			set textTemporal to netejarText(texteEmail3's stringValue as string)
			if textTemporal is not "" then
				set textQR to textQR & "&body=" & textTemporal
			end if
			set textTemporal to netejarText(texteEmail4's stringValue as string)
			if textTemporal is not "" then
				set textQR to textQR & "&cc=" & textTemporal
			end if
			set textTemporal to netejarText(texteEmail5's stringValue as string)
			if textTemporal is not "" then
				set textQR to textQR & "&bcc=" & textTemporal
			end if
		else
			
			-- Esdeveniment
			set textQR to "BEGIN:VEVENT
SUMMARY:" & (texteEmail1's stringValue as string)
			if textQR = "BEGIN:VEVENT
SUMMARY:" then
				set errorFaltaDades to "el nom del esdeveniment"
			end if
			set textQR to textQR & "
DTSTART:" & netejarText(texteEmail2's stringValue as string) & "Z"
			set textQR to textQR & "
DTEND:" & netejarText(texteEmail3's stringValue as string) & "Z"
			set textQR to textQR & "
LOCATION:" & (texteEmail4's stringValue as string)
			set textQR to textQR & "
DESCRIPTION:" & (texteEmail5's stringValue as string) & "
END:VEVENT"
		end if
		
	else if indexTab = 2 then -- "SMS o Geoposició"
		if botoSMS1's state as string = "1" then
			-- SMS
			set textQR to "SMSTO:" & netejarText(texteSMS1's stringValue as string)
			if textQR = "SMSTO:" then
				set errorFaltaDades to "el telèfon per el SMS"
			end if
			set textQR to textQR & ":" & (texteSMS2's stringValue as string)
			
		else
			
			-- Geoposició
			set textQR to "geo:" & netejarText(texteSMS1's stringValue as string)
			if textQR = "geo:" then
				set errorFaltaDades to "les coordenades per la Geoposició"
			end if
			set textQR to textQR & "?q=" & (texteSMS2's stringValue as string)
		end if
		
	else if indexTab = 3 then
		-- Wifi
		set wifiNom to my ajustarText(nomWifi's stringValue) as string
		set wifiClau to my ajustarText(contWifi's stringValue) as string
		set wifiCodif to codifWifi's titleOfSelectedItem as string
		if wifiClau = "" or wifiCodif = "Cap" then
			set wifiCodif to "nopass"
			set wifiClau to ""
		end if
		if wifiNom = "" then
			set errorFaltaDades to "el Nom de la Wifi"
		else
			set textQR to "WIFI:S:" & wifiNom & ";T:" & wifiCodif & ";P:" & wifiClau & ";"
		end if
		
	else
		
		-- Contacte
		set nomComplert to (cognomCont's stringValue as string) & ";" & (nomCont's stringValue as string) & ";;" -- "Apellido;Albert;;Sr."
		set numMobil to mobilCont's stringValue as string
		set numFixeCasa to fixeCont's stringValue as string
		set adrezaCasa to ";;" & (adrezaCont's stringValue as string) & ";" & (ciutatCont's stringValue as string) & ";" & (estatCont's stringValue as string) & ";" & (codiCont's stringValue as string) & ";" & (paisCont's stringValue as string) & ";" -- ";;C/ calle, 12, 2º Derecha;Ciudad;Estado;28001;País"
		set correuElectronic to correuCont's stringValue as string
		
		if nomComplert = ";;;" then
			set errorFaltaDades to "el Nom o els Cognoms"
		else
			
			set textQR to "
BEGIN:VCARD
VERSION:3.0
N:" & nomComplert
			if numMobil is not "" then
				set textQR to textQR & "
TEL;TYPE=HOME,CELL:" & numMobil
			end if
			
			if numFixeCasa is not "" then
				set textQR to textQR & "
TEL;TYPE=HOME,VOICE:" & numFixeCasa
			end if
			
			if adrezaCasa is not "" then
				set textQR to textQR & "
ADR;TYPE=HOME:" & adrezaCasa
			end if
			if correuElectronic is not "" then
				set textQR to textQR & "
EMAIL:" & correuElectronic
			end if
			set textQR to textQR & "
END:VCARD"
		end if -- if wifiNom
		
	end if -- if indexTab
	
	--display dialog textQR
	
	if errorFaltaDades = "" then
		finestraPrincipal's performClose:me -- Tanca la finestra
		my crearQR(textQR)
		my accioBotoCan
	else
		display alert "Per crear el QR és necesari omplir " & errorFaltaDades
		set errorFaltaDades to ""
		return
	end if
	
end accioBotoOK:

on accioBotoCan:sender
	finestraPrincipal's performClose:me -- Tanca la finestra
	error number -128 --Cancel·lat per l'usuari
	--tell me to quit -- Tanca el script i el Editor
end accioBotoCan:

on crearQR(textDelQR)
	try
		
		-- derive a file path for the created image file
		set nomArxiu to (short date string of (current date) & " - " & (time of (current date))) -- meu
		tell application "Finder" to set theURL to (path to desktop folder) --meu
		
		set the targetItemHFSPath to (theURL as string) & nomArxiu & ".jpg"
		set targetItemPOSIXPath to POSIX path of targetItemHFSPath
		set thisImageObject to my createFullSizeQRCodeImageObjectForString(textDelQR)
		my writeNSImageObjectToFileAsJPEG(thisImageObject, targetItemPOSIXPath, false)
		
		set the targetFile to targetItemHFSPath as alias
		
		tell application "Finder" to open file targetFile --meu
		
		-- Dificilment hi haurà un error
	on error errorMessage number errorNumber
		if errorNumber is not -128 then
			set spokenErrorTitle to "I was unable to complete your request: "
			set cfgutil to "/usr/bin/say"
			set theTask to (current application's NSTask's launchedTaskWithLaunchPath:cfgutil arguments:{(spokenErrorTitle & errorMessage)})
			tell application (POSIX path of (path to frontmost application))
				activate
				display alert "Unable to Complete Request:" message errorMessage buttons {"Cancel"} default button 1
			end tell
			theTask's terminate()
		end if
	end try
end crearQR

on netejarText(textBrut)
	repeat with caracterExtra in [" ", "/"]
		set AppleScript's text item delimiters to the caracterExtra
		set a to text items of (textBrut as string)
		set AppleScript's text item delimiters to the ""
		set textBrut to a as string
	end repeat
	return textBrut
end netejarText

on ajustarText(textBrut)
	repeat with caracterExtra in ["\\", ";", ",", ":"]
		set AppleScript's text item delimiters to the caracterExtra
		set a to text items of (textBrut as string)
		set AppleScript's text item delimiters to the "\\" & caracterExtra
		set textBrut to a as string
	end repeat
	return textBrut
end ajustarText

on createFullSizeQRCodeImageObjectForString(thisString)
	-- returns a full-size NSImage object
	set thisString to current application's NSString's stringWithString:thisString
	set thisData to thisString's dataUsingEncoding:(current application's NSUTF8StringEncoding)
	set anImageFilter to current application's CIFilter's filterWithName:"CIQRCodeGenerator"
	anImageFilter's setDefaults()
	anImageFilter's setValue:thisData forKey:"inputMessage"
	anImageFilter's setValue:"L" forKey:"inputCorrectionLevel"
	
	set baseImage to anImageFilter's outputImage()
	set aTransform to current application's CGAffineTransform's CGAffineTransformMakeScale(100.0, 100.0)
	set outputImage to baseImage's imageByApplyingTransform:aTransform
	set imageRepresentation to current application's NSCIImageRep's imageRepWithCIImage:outputImage
	set resultingImageObject to current application's NSImage's alloc()'s initWithSize:(imageRepresentation's |size|())
	
	resultingImageObject's addRepresentation:imageRepresentation
	
	return resultingImageObject
end createFullSizeQRCodeImageObjectForString

on writeNSImageObjectToFileAsJPEG(thisImageObject, targetImageFilePath, shouldRevealInFinder)
	-- create JPEG data for the image object
	set tiffData to thisImageObject's TIFFRepresentation()
	set imageRep to current application's NSBitmapImageRep's imageRepWithData:tiffData
	set theProps to current application's NSDictionary's dictionaryWithObject:1.0 forKey:(current application's NSImageCompressionFactor)
	set imageData to (imageRep's representationUsingType:(current application's NSJPEGFileType) |properties|:theProps)
	
	-- write the JPEG data to file
	set theResult to (imageData's writeToFile:targetImageFilePath atomically:true |error|:(missing value)) as boolean
	if theResult is true then
		if shouldRevealInFinder is true then
			set theseURLs to {}
			set the end of theseURLs to (current application's NSURL's fileURLWithPath:targetImageFilePath)
			-- reveal items in file viewer
			tell current application's NSWorkspace to set theWorkspace to sharedWorkspace()
			tell theWorkspace to activateFileViewerSelectingURLs:theseURLs
		end if
		return true
	else
		error "Hi ha un problema al guardar la imatge en l'arxiu."
	end if
end writeNSImageObjectToFileAsJPEG

 

 

Versión para macOS El Capitan (10.12) y anteriores:

-- ************************
-- ************************
-- Tot el codi de creació del QR correspon a la web https://iworkautomation.com/keynote/examples-QR-code.html el dia 20/02/2019
-- La cadena de text per la configuració de la wifi està extreta de la web https://qifi.org/
-- Per altres consultes sobre posibilitats dels QR: https://www.nilovelez.com/2012/08/guia-de-formatos-de-contenido-para-codigos-qr/
-- ************************
-- ************************

-- Genera diversos tipus de QR: Text, Web, Telèfon, Email, Esdeveniment, SMS, Geoposició, per configurar la Wifi i per crear un contacte (V-CARD).
-- Guarda l'arxiu QR en l'escriptori.


use framework "Foundation"
use framework "CoreImage"
use framework "AppKit"
use framework "CoreGraphics"
use scripting additions

property targetMinimumDimension : 400
property errorFaltaDades : ""

property finestraPrincipal : class "NSWindow"
property NSWindowController : class "NSWindowController"
property finestraController : missing value
property tabView1 : class "NSTabView"

property botoWeb1 : class "NSButton"
property botoWeb2 : class "NSButton"
property nomTexteWeb : class "NSTextField"
property texteWeb : class "NSTextField"

property botoEmail1 : class "NSButton"
property nomTexteEmail1 : class "NSTextField"
property nomTexteEmail2 : class "NSTextField"
property nomTexteEmail3 : class "NSTextField"
property nomTexteEmail4 : class "NSTextField"
property nomTexteEmail5 : class "NSTextField"
property texteEmail1 : class "NSTextField"
property texteEmail2 : class "NSTextField"
property texteEmail3 : class "NSTextField"
property texteEmail4 : class "NSTextField"
property texteEmail5 : class "NSTextField"

property botoSMS1 : class "NSButton"
property nomTexteSMS1 : class "NSTextField"
property nomTexteSMS2 : class "NSTextField"
property texteSMS1 : class "NSTextField"
property texteSMS2 : class "NSTextField"

property nomWifi : class "NSTextField"
property contWifi : class "NSTextField"
property codifWifi : class "NSPopButton"

property nomCont : class "NSTextField"
property cognomCont : class "NSTextField"
property mobilCont : class "NSTextField"
property fixeCont : class "NSTextField"
property adrezaCont : class "NSTextField"
property ciutatCont : class "NSTextField"
property estatCont : class "NSTextField"
property codiCont : class "NSTextField"
property paisCont : class "NSTextField"
property correuCont : class "NSTextField"


tell application "Finder" to set nomScript to name of me

-- FINESTRA
set finestraAlzada to 500
set finestraAmplada to 640
set finestraRect to current application's NSMakeRect(0, 0, finestraAmplada, finestraAlzada)
set finestraPrincipal to current application's NSWindow's alloc's initWithContentRect:finestraRect styleMask:3 backing:2 defer:yes
set finestraController to NSWindowController's alloc's initWithWindow:finestraPrincipal
--finestraPrincipal's setFrameOrigin:{150, 600} -- Posicionar la finestra dins la pantalla
finestraPrincipal's setTitle:nomScript -- Títol de la finestra
finestraPrincipal's setFrameAutosaveName:nomScript -- Per recordar el lloc la propera vegada
--finestraController's |window|'s makeKeyAndOrderFront:me -- Posat al final es visualitza la finestra correctament.


--TABView
set valorFrame to current application's NSMakeRect(20, (finestraAlzada - 460), 600, 450) --origin ,x,y ,size width,height
set tabView1 to current application's NSTabView's alloc's initWithFrame:valorFrame
--tabView1's setDelegate:me -- No sembla necesari

finestraPrincipal's contentView's addSubview:tabView1

-- TabViewItems
set tabViewWeb to current application's NSTabViewItem's alloc's initWithIdentifier:""
tabViewWeb's setLabel:"Text, Web o Telèfon"
set tabViewMail to current application's NSTabViewItem's alloc's initWithIdentifier:""
tabViewMail's setLabel:"Email o Esdeveniment"
set tabViewSMS to current application's NSTabViewItem's alloc's initWithIdentifier:""
tabViewSMS's setLabel:"SMS o Geoposició"
set tabViewWifi to current application's NSTabViewItem's alloc's initWithIdentifier:""
tabViewWifi's setLabel:"Wifi"
set tabViewCont to current application's NSTabViewItem's alloc's initWithIdentifier:""
tabViewCont's setLabel:"Contacte"

tabView1's addTabViewItem:tabViewWeb
tabView1's addTabViewItem:tabViewMail
tabView1's addTabViewItem:tabViewSMS
tabView1's addTabViewItem:tabViewWifi
tabView1's addTabViewItem:tabViewCont

--Obtenir mida de la tabViewItemView (Sols després d'afegir el tabViewItem en el tabView)
set rectValor to tabViewWeb's view's frame

set tabViewItemAmplada to current application's NSWidth(rectValor)
set tabViewItemAlzada to current application's NSHeight(rectValor)

-- TabViewWeb  "Text, Web o Telèfon"
set valorFrame to current application's NSMakeRect(20, (tabViewItemAlzada - 60), 300, 25) --origin ,x,y ,size width,height
set nomTexteWeb to labelitzarNSTextField(valorFrame, "Adreça Web")

set valorFrame to current application's NSMakeRect(20, tabViewItemAlzada - 80, 400, 25) --origin ,x,y ,size width,heigh
set texteWeb to current application's NSTextField's alloc's initWithFrame:valorFrame
texteWeb's cell's setPlaceholderString:"https://www.apple.com/es/" -- Text de mostra en gris

set valorFrame to current application's NSMakeRect(20, tabViewItemAlzada - 110, 100, 25) -- button rect origin ,x,y ,size width,height
set botoWeb1 to current application's NSButton's alloc's initWithFrame:valorFrame -- init button

botoWeb1's setTitle:"Text"
botoWeb1's setButtonType:4 --NSButtonTypeRadio
botoWeb1's setState:0
botoWeb1's setTarget:me
botoWeb1's setAction:"accioRadioWeb:"

set valorFrame to current application's NSMakeRect(120, tabViewItemAlzada - 110, 100, 25) -- button rect origin ,x,y ,size width,height
set botoWeb2 to current application's NSButton's alloc's initWithFrame:valorFrame -- init button

botoWeb2's setTitle:"Web"
botoWeb2's setButtonType:4 --NSButtonTypeRadio
botoWeb2's setState:1
botoWeb2's setTarget:me
botoWeb2's setAction:"accioRadioWeb:"

set valorFrame to current application's NSMakeRect(220, tabViewItemAlzada - 110, 100, 25) -- button rect origin ,x,y ,size width,height
set botoWeb3 to current application's NSButton's alloc's initWithFrame:valorFrame -- init button

botoWeb3's setTitle:"Telèfon"
botoWeb3's setButtonType:4 --NSButtonTypeRadio
botoWeb3's setState:0
botoWeb3's setTarget:me
botoWeb3's setAction:"accioRadioWeb:"

tabViewWeb's view's addSubview:nomTexteWeb
tabViewWeb's view's addSubview:texteWeb
tabViewWeb's view's addSubview:botoWeb1
tabViewWeb's view's addSubview:botoWeb2
tabViewWeb's view's addSubview:botoWeb3

-- TabViewMail  "Email o Esdeveniment"
set valorFrame to current application's NSMakeRect(20, (tabViewItemAlzada - 60), 300, 25) --origin ,x,y ,size width,height
set nomTexteEmail1 to labelitzarNSTextField(valorFrame, "Adreça del Email")

set valorFrame to current application's NSMakeRect(20, tabViewItemAlzada - 80, 400, 25) --origin ,x,y ,size width,heigh
set texteEmail1 to current application's NSTextField's alloc's initWithFrame:valorFrame

set valorFrame to current application's NSMakeRect(20, (tabViewItemAlzada - 120), 300, 25) --origin ,x,y ,size width,height
set nomTexteEmail2 to labelitzarNSTextField(valorFrame, "Assumpte")

set valorFrame to current application's NSMakeRect(20, tabViewItemAlzada - 140, 400, 25) --origin ,x,y ,size width,heigh
set texteEmail2 to current application's NSTextField's alloc's initWithFrame:valorFrame

set valorFrame to current application's NSMakeRect(20, (tabViewItemAlzada - 180), 300, 25) --origin ,x,y ,size width,height
set nomTexteEmail3 to labelitzarNSTextField(valorFrame, "Contingut")

set valorFrame to current application's NSMakeRect(20, tabViewItemAlzada - 200, 400, 25) --origin ,x,y ,size width,heigh
set texteEmail3 to current application's NSTextField's alloc's initWithFrame:valorFrame

set valorFrame to current application's NSMakeRect(20, (tabViewItemAlzada - 240), 300, 25) --origin ,x,y ,size width,height
set nomTexteEmail4 to labelitzarNSTextField(valorFrame, "Adreça amb copia visible")

set valorFrame to current application's NSMakeRect(20, tabViewItemAlzada - 260, 400, 25) --origin ,x,y ,size width,heigh
set texteEmail4 to current application's NSTextField's alloc's initWithFrame:valorFrame

set valorFrame to current application's NSMakeRect(20, (tabViewItemAlzada - 300), 300, 25) --origin ,x,y ,size width,height
set nomTexteEmail5 to labelitzarNSTextField(valorFrame, "Adreça amb copia oculta")

set valorFrame to current application's NSMakeRect(20, tabViewItemAlzada - 320, 400, 25) --origin ,x,y ,size width,heigh
set texteEmail5 to current application's NSTextField's alloc's initWithFrame:valorFrame

set valorFrame to current application's NSMakeRect(20, tabViewItemAlzada - 360, 100, 25) -- button rect origin ,x,y ,size width,height
set botoEmail1 to current application's NSButton's alloc's initWithFrame:valorFrame -- init button

botoEmail1's setTitle:"Email"
botoEmail1's setButtonType:4 --NSButtonTypeRadio
botoEmail1's setState:1
botoEmail1's setTarget:me
botoEmail1's setAction:"accioRadioEmail:"

set valorFrame to current application's NSMakeRect(120, tabViewItemAlzada - 360, 100, 25) -- button rect origin ,x,y ,size width,height
set botoEmail2 to current application's NSButton's alloc's initWithFrame:valorFrame -- init button

botoEmail2's setTitle:"Esdeveniment"
botoEmail2's setButtonType:4 --NSButtonTypeRadio
botoEmail2's setState:0
botoEmail2's setTarget:me
botoEmail2's setAction:"accioRadioEmail:"

tabViewMail's view's addSubview:nomTexteEmail1
tabViewMail's view's addSubview:texteEmail1
tabViewMail's view's addSubview:nomTexteEmail2
tabViewMail's view's addSubview:texteEmail2
tabViewMail's view's addSubview:nomTexteEmail3
tabViewMail's view's addSubview:texteEmail3
tabViewMail's view's addSubview:nomTexteEmail4
tabViewMail's view's addSubview:texteEmail4
tabViewMail's view's addSubview:nomTexteEmail5
tabViewMail's view's addSubview:texteEmail5
tabViewMail's view's addSubview:botoEmail1
tabViewMail's view's addSubview:botoEmail2

-- TabViewSMS "SMS o Geoposició"
set valorFrame to current application's NSMakeRect(20, (tabViewItemAlzada - 60), 300, 25) --origin ,x,y ,size width,height
set nomTexteSMS1 to labelitzarNSTextField(valorFrame, "Telèfon amb el codi del país.")

set valorFrame to current application's NSMakeRect(20, tabViewItemAlzada - 80, 400, 25) --origin ,x,y ,size width,heigh
set texteSMS1 to current application's NSTextField's alloc's initWithFrame:valorFrame
texteSMS1's cell's setPlaceholderString:"+34931234567" -- Text de mostra en gris

set valorFrame to current application's NSMakeRect(20, (tabViewItemAlzada - 120), 300, 25) --origin ,x,y ,size width,height
set nomTexteSMS2 to labelitzarNSTextField(valorFrame, "Text del SMS")

set valorFrame to current application's NSMakeRect(20, tabViewItemAlzada - 140, 400, 25) --origin ,x,y ,size width,heigh
set texteSMS2 to current application's NSTextField's alloc's initWithFrame:valorFrame

set valorFrame to current application's NSMakeRect(20, tabViewItemAlzada - 360, 100, 25) -- button rect origin ,x,y ,size width,height
set botoSMS1 to current application's NSButton's alloc's initWithFrame:valorFrame -- init button

botoSMS1's setTitle:"SMS"
botoSMS1's setButtonType:4 --NSButtonTypeRadio
botoSMS1's setState:1
botoSMS1's setTarget:me
botoSMS1's setAction:"accioRadioSMS:"

set valorFrame to current application's NSMakeRect(120, tabViewItemAlzada - 360, 100, 25) -- button rect origin ,x,y ,size width,height
set botoSMS2 to current application's NSButton's alloc's initWithFrame:valorFrame -- init button

botoSMS2's setTitle:"Geoposició"
botoSMS2's setButtonType:4 --NSButtonTypeRadio
botoSMS2's setState:0
botoSMS2's setTarget:me
botoSMS2's setAction:"accioRadioSMS:"

tabViewSMS's view's addSubview:nomTexteSMS1
tabViewSMS's view's addSubview:texteSMS1
tabViewSMS's view's addSubview:nomTexteSMS2
tabViewSMS's view's addSubview:texteSMS2
tabViewSMS's view's addSubview:botoSMS1
tabViewSMS's view's addSubview:botoSMS2

-- TabViewWifi
set valorFrame to current application's NSMakeRect(20, (tabViewItemAlzada - 60), 150, 25) --origin ,x,y ,size width,height
set nomTexteWifi to labelitzarNSTextField(valorFrame, "Nom de la Wifi")

set valorFrame to current application's NSMakeRect(20, tabViewItemAlzada - 80, 400, 25) --origin ,x,y ,size width,heigh
set nomWifi to current application's NSTextField's alloc's initWithFrame:valorFrame

set valorFrame to current application's NSMakeRect(20, (tabViewItemAlzada - 120), 150, 25) --origin ,x,y ,size width,height
set contTexteWifi to labelitzarNSTextField(valorFrame, "Contrasenya de la Wifi")

set valorFrame to current application's NSMakeRect(20, tabViewItemAlzada - 140, 200, 25) --origin ,x,y ,size width,heigh
set contWifi to current application's NSSecureTextField's alloc's initWithFrame:valorFrame

set valorFrame to current application's NSMakeRect(20, (tabViewItemAlzada - 180), 150, 25) --origin ,x,y ,size width,height
set codifTexteWifi to labelitzarNSTextField(valorFrame, "Codificació de la Wifi")

set valorFrame to current application's NSMakeRect(25, (tabViewItemAlzada - 200), 150, 25) -- button rect origin ,x,y ,size width,height
set codifWifi to current application's NSPopUpButton's alloc's initWithFrame:valorFrame pullsDown:no -- init button

codifWifi's addItemsWithTitles:{"WPA/WPA2", "WEP", "Cap"}

tabViewWifi's view's addSubview:nomTexteWifi
tabViewWifi's view's addSubview:nomWifi
tabViewWifi's view's addSubview:contTexteWifi
tabViewWifi's view's addSubview:contWifi
tabViewWifi's view's addSubview:codifTexteWifi
tabViewWifi's view's addSubview:codifWifi

-- TabViewCont
set valorFrame to current application's NSMakeRect(20, (tabViewItemAlzada - 60), 150, 25) --origin ,x,y ,size width,height
set nomTexteCont to labelitzarNSTextField(valorFrame, "Nom")
nomTexteCont's setAlignment:1

set valorFrame to current application's NSMakeRect(180, tabViewItemAlzada - 60, 150, 25) --origin ,x,y ,size width,heigh
set nomCont to current application's NSTextField's alloc's initWithFrame:valorFrame

set valorFrame to current application's NSMakeRect(20, (tabViewItemAlzada - 90), 150, 25) --origin ,x,y ,size width,height
set cognomTexteCont to labelitzarNSTextField(valorFrame, "Cognoms")
cognomTexteCont's setAlignment:1

set valorFrame to current application's NSMakeRect(180, tabViewItemAlzada - 90, 250, 25) --origin ,x,y ,size width,heigh
set cognomCont to current application's NSTextField's alloc's initWithFrame:valorFrame

set valorFrame to current application's NSMakeRect(20, (tabViewItemAlzada - 120), 150, 25) --origin ,x,y ,size width,height
set mobilTexteCont to labelitzarNSTextField(valorFrame, "Número de mòbil")
mobilTexteCont's setAlignment:1

set valorFrame to current application's NSMakeRect(180, tabViewItemAlzada - 120, 100, 25) --origin ,x,y ,size width,heigh
set mobilCont to current application's NSTextField's alloc's initWithFrame:valorFrame

set valorFrame to current application's NSMakeRect(20, (tabViewItemAlzada - 150), 150, 25) --origin ,x,y ,size width,height
set fixeTexteCont to labelitzarNSTextField(valorFrame, "Número del fixe")
fixeTexteCont's setAlignment:1

set valorFrame to current application's NSMakeRect(180, tabViewItemAlzada - 150, 100, 25) --origin ,x,y ,size width,heigh
set fixeCont to current application's NSTextField's alloc's initWithFrame:valorFrame


set valorFrame to current application's NSMakeRect(20, (tabViewItemAlzada - 180), 150, 25) --origin ,x,y ,size width,height
set adrezaTexteCont to labelitzarNSTextField(valorFrame, "Carrer, número i pis")
adrezaTexteCont's setAlignment:1

set valorFrame to current application's NSMakeRect(180, tabViewItemAlzada - 180, 350, 25) --origin ,x,y ,size width,heigh
set adrezaCont to current application's NSTextField's alloc's initWithFrame:valorFrame

set valorFrame to current application's NSMakeRect(20, (tabViewItemAlzada - 210), 150, 25) --origin ,x,y ,size width,height
set ciutatTexteCont to labelitzarNSTextField(valorFrame, "Ciutat")
ciutatTexteCont's setAlignment:1

set valorFrame to current application's NSMakeRect(180, tabViewItemAlzada - 210, 150, 25) --origin ,x,y ,size width,heigh
set ciutatCont to current application's NSTextField's alloc's initWithFrame:valorFrame

set valorFrame to current application's NSMakeRect(20, (tabViewItemAlzada - 240), 150, 25) --origin ,x,y ,size width,height
set estatTexteCont to labelitzarNSTextField(valorFrame, "Provincia")
estatTexteCont's setAlignment:1

set valorFrame to current application's NSMakeRect(180, tabViewItemAlzada - 240, 150, 25) --origin ,x,y ,size width,heigh
set estatCont to current application's NSTextField's alloc's initWithFrame:valorFrame

set valorFrame to current application's NSMakeRect(20, (tabViewItemAlzada - 270), 150, 25) --origin ,x,y ,size width,height
set codiTexteCont to labelitzarNSTextField(valorFrame, "Codi Postal")
codiTexteCont's setAlignment:1

set valorFrame to current application's NSMakeRect(180, tabViewItemAlzada - 270, 100, 25) --origin ,x,y ,size width,heigh
set codiCont to current application's NSTextField's alloc's initWithFrame:valorFrame

set valorFrame to current application's NSMakeRect(20, (tabViewItemAlzada - 300), 150, 25) --origin ,x,y ,size width,height
set paisTexteCont to labelitzarNSTextField(valorFrame, "Pais")
paisTexteCont's setAlignment:1

set valorFrame to current application's NSMakeRect(180, tabViewItemAlzada - 300, 200, 25) --origin ,x,y ,size width,heigh
set paisCont to current application's NSTextField's alloc's initWithFrame:valorFrame

set valorFrame to current application's NSMakeRect(20, (tabViewItemAlzada - 330), 150, 25) --origin ,x,y ,size width,height
set correuTexteCont to labelitzarNSTextField(valorFrame, "Correu electrònic")
correuTexteCont's setAlignment:1

set valorFrame to current application's NSMakeRect(180, tabViewItemAlzada - 330, 350, 25) --origin ,x,y ,size width,heigh
set correuCont to current application's NSTextField's alloc's initWithFrame:valorFrame

tabViewCont's view's addSubview:nomTexteCont
tabViewCont's view's addSubview:nomCont
tabViewCont's view's addSubview:cognomTexteCont
tabViewCont's view's addSubview:cognomCont
tabViewCont's view's addSubview:mobilTexteCont
tabViewCont's view's addSubview:mobilCont
tabViewCont's view's addSubview:fixeTexteCont
tabViewCont's view's addSubview:fixeCont
tabViewCont's view's addSubview:adrezaTexteCont
tabViewCont's view's addSubview:adrezaCont
tabViewCont's view's addSubview:ciutatTexteCont
tabViewCont's view's addSubview:ciutatCont
tabViewCont's view's addSubview:estatTexteCont
tabViewCont's view's addSubview:estatCont
tabViewCont's view's addSubview:codiTexteCont
tabViewCont's view's addSubview:codiCont
tabViewCont's view's addSubview:paisTexteCont
tabViewCont's view's addSubview:paisCont
tabViewCont's view's addSubview:correuTexteCont
tabViewCont's view's addSubview:correuCont

-- BOTONS Clasics
set valorFrame to current application's NSMakeRect((finestraAmplada - 120), 20, 100, 20) -- button rect origin ,x,y ,size width,height
set botoOK to current application's NSButton's alloc's initWithFrame:valorFrame -- init button

botoOK's setTitle:"Crear QR"
set botoOK's bezelStyle to 1 --NSBezelStyleRounded
botoOK's setButtonType:0 --NSButtonTypeMomentaryLight
botoOK's setTarget:me
botoOK's setAction:"accioBotoOK:"

set valorFrame to current application's NSMakeRect((finestraAmplada - 230), 20, 100, 20) -- button rect origin ,x,y ,size width,height
set botoCan to current application's NSButton's alloc's initWithFrame:valorFrame -- init button

botoCan's setTitle:"Cancel·lar"
set botoCan's bezelStyle to 1 --NSBezelStyleRounded
botoCan's setButtonType:0 --NSMomentaryLightButton
botoCan's setTarget:me
botoCan's setAction:"accioBotoCan:"

finestraPrincipal's contentView's addSubview:botoOK
finestraPrincipal's contentView's addSubview:botoCan

finestraPrincipal's setDefaultButtonCell:(botoOK's cell) --Per determinar un botó com a Default

finestraController's |window|'s makeKeyAndOrderFront:me -- Posat al final es visualitza la finestra correctament.

--error number -128 --per aturar l'execució


-- *** ACCIONS i RUTINES ***
on labelitzarNSTextField(valorFrame, valorString)
	set textTemporal to current application's NSTextField's alloc's initWithFrame:valorFrame
	textTemporal's setEditable:no
	textTemporal's setBezeled:no
	textTemporal's setDrawsBackground:no
	textTemporal's setSelectable:no
	textTemporal's setStringValue:valorString
	return textTemporal
end labelitzarNSTextField

on accioRadioWeb:sender
	if sender = botoWeb1 then
		nomTexteWeb's setStringValue:"Text"
		texteWeb's cell's setPlaceholderString:"" -- Text de mostra en gris
	else if sender = botoWeb2 then
		nomTexteWeb's setStringValue:"Adreça Web"
		texteWeb's cell's setPlaceholderString:"https://www.apple.com/es/" -- Text de mostra en gris
	else --botoWeb3
		nomTexteWeb's setStringValue:"Telèfon amb el codi del país."
		texteWeb's cell's setPlaceholderString:"+34931234567" -- Text de mostra en gris
	end if
end accioRadioWeb:

on accioRadioEmail:sender
	if sender = botoEmail1 then
		nomTexteEmail1's setStringValue:"Adreça del Email"
		nomTexteEmail2's setStringValue:"Assumpte"
		nomTexteEmail3's setStringValue:"Contingut"
		nomTexteEmail4's setStringValue:"Adreça amb copia visible"
		nomTexteEmail5's setStringValue:"Adreça amb copia oculta"
		texteEmail2's cell's setPlaceholderString:"" -- Text de mostra en gris
		texteEmail3's cell's setPlaceholderString:"" -- Text de mostra en gris
	else
		nomTexteEmail1's setStringValue:"Títol del esdeveniment"
		nomTexteEmail2's setStringValue:"Data i hora Inici"
		nomTexteEmail3's setStringValue:"Data i hora Final"
		nomTexteEmail4's setStringValue:"Lloc"
		nomTexteEmail5's setStringValue:"Descripció"
		texteEmail2's cell's setPlaceholderString:"20160423 T 100000" -- Text de mostra en gris
		texteEmail3's cell's setPlaceholderString:"20160423 T 175900" -- Text de mostra en gris
	end if
end accioRadioEmail:

on accioRadioSMS:sender
	if sender = botoSMS1 then
		nomTexteSMS1's setStringValue:"Telèfon amb el codi del país."
		nomTexteSMS2's setStringValue:"Text del SMS"
		texteSMS1's cell's setPlaceholderString:"+34931234567" -- Text de mostra en gris
	else
		nomTexteSMS1's setStringValue:"Coordenades GPS"
		nomTexteSMS2's setStringValue:"Nom del lloc"
		texteSMS1's cell's setPlaceholderString:"40.416590,-3.703830" -- Text de mostra en gris
	end if
end accioRadioSMS:

on accioBotoOK:sender
	finestraPrincipal's makeFirstResponder:(missing value) -- Actualitza els valors
	
	-- obtenir el tabViewItem seleccionat
	set tabViewSelect to tabView1's selectedTabViewItem
	set indexTab to tabView1's indexOfTabViewItem:tabViewSelect
	if indexTab = 0 then -- "Text, Web o Telèfon"
		if botoWeb1's state as string = "1" then
			-- Text
			set textQR to texteWeb's stringValue as string
			if textQR = "" then
				set errorFaltaDades to "el Text"
			end if
		else if botoWeb2's state as string = "1" then
			
			-- Web
			set textQR to texteWeb's stringValue as string
			if textQR = "" then
				set errorFaltaDades to "la Adreça Web"
			end if
		else
			
			-- Telèfon
			set textQR to "TEL:" & netejarText(texteWeb's stringValue as string)
			if textQR = "TEL:" then
				set errorFaltaDades to "el Telèfon"
			end if
		end if
		
	else if indexTab = 1 then -- "Email o Esdeveniment"
		
		if botoEmail1's state as string = "1" then
			-- Email
			set textQR to "mailto:" & netejarText(texteEmail1's stringValue as string) & "?"
			if textQR = "mailto:?" then
				set errorFaltaDades to "el Email"
			end if
			set textTemporal to netejarText(texteEmail2's stringValue as string)
			if textTemporal is not "" then
				set textQR to textQR & "subject=" & textTemporal
			end if
			set textTemporal to netejarText(texteEmail3's stringValue as string)
			if textTemporal is not "" then
				set textQR to textQR & "&body=" & textTemporal
			end if
			set textTemporal to netejarText(texteEmail4's stringValue as string)
			if textTemporal is not "" then
				set textQR to textQR & "&cc=" & textTemporal
			end if
			set textTemporal to netejarText(texteEmail5's stringValue as string)
			if textTemporal is not "" then
				set textQR to textQR & "&bcc=" & textTemporal
			end if
		else
			
			-- Esdeveniment
			set textQR to "BEGIN:VEVENT
SUMMARY:" & (texteEmail1's stringValue as string)
			if textQR = "BEGIN:VEVENT
SUMMARY:" then
				set errorFaltaDades to "el nom del esdeveniment"
			end if
			set textQR to textQR & "
DTSTART:" & netejarText(texteEmail2's stringValue as string) & "Z"
			set textQR to textQR & "
DTEND:" & netejarText(texteEmail3's stringValue as string) & "Z"
			set textQR to textQR & "
LOCATION:" & (texteEmail4's stringValue as string)
			set textQR to textQR & "
DESCRIPTION:" & (texteEmail5's stringValue as string) & "
END:VEVENT"
		end if
		
	else if indexTab = 2 then -- "SMS o Geoposició"
		if botoSMS1's state as string = "1" then
			-- SMS
			set textQR to "SMSTO:" & netejarText(texteSMS1's stringValue as string)
			if textQR = "SMSTO:" then
				set errorFaltaDades to "el telèfon per el SMS"
			end if
			set textQR to textQR & ":" & (texteSMS2's stringValue as string)
			
		else
			
			-- Geoposició
			set textQR to "geo:" & netejarText(texteSMS1's stringValue as string)
			if textQR = "geo:" then
				set errorFaltaDades to "les coordenades per la Geoposició"
			end if
			set textQR to textQR & "?q=" & (texteSMS2's stringValue as string)
		end if
		
	else if indexTab = 3 then
		-- Wifi
		set wifiNom to my ajustarText(nomWifi's stringValue) as string
		set wifiClau to my ajustarText(contWifi's stringValue) as string
		set wifiCodif to codifWifi's titleOfSelectedItem as string
		if wifiClau = "" or wifiCodif = "Cap" then
			set wifiCodif to "nopass"
			set wifiClau to ""
		end if
		if wifiNom = "" then
			set errorFaltaDades to "el Nom de la Wifi"
		else
			set textQR to "WIFI:S:" & wifiNom & ";T:" & wifiCodif & ";P:" & wifiClau & ";"
		end if
		
	else
		
		-- Contacte
		set nomComplert to (cognomCont's stringValue as string) & ";" & (nomCont's stringValue as string) & ";;" -- "Apellido;Albert;;Sr."
		set numMobil to mobilCont's stringValue as string
		set numFixeCasa to fixeCont's stringValue as string
		set adrezaCasa to ";;" & (adrezaCont's stringValue as string) & ";" & (ciutatCont's stringValue as string) & ";" & (estatCont's stringValue as string) & ";" & (codiCont's stringValue as string) & ";" & (paisCont's stringValue as string) & ";" -- ";;C/ calle, 12, 2º Derecha;Ciudad;Estado;28001;País"
		set correuElectronic to correuCont's stringValue as string
		
		if nomComplert = ";;;" then
			set errorFaltaDades to "el Nom o els Cognoms"
		else
			
			set textQR to "
BEGIN:VCARD
VERSION:3.0
N:" & nomComplert
			if numMobil is not "" then
				set textQR to textQR & "
TEL;TYPE=HOME,CELL:" & numMobil
			end if
			
			if numFixeCasa is not "" then
				set textQR to textQR & "
TEL;TYPE=HOME,VOICE:" & numFixeCasa
			end if
			
			if adrezaCasa is not "" then
				set textQR to textQR & "
ADR;TYPE=HOME:" & adrezaCasa
			end if
			if correuElectronic is not "" then
				set textQR to textQR & "
EMAIL:" & correuElectronic
			end if
			set textQR to textQR & "
END:VCARD"
		end if -- if wifiNom
		
	end if -- if indexTab
	
	--display dialog textQR
	
	if errorFaltaDades = "" then
		finestraPrincipal's performClose:me -- Tanca la finestra
		my crearQR(textQR)
		my accioBotoCan
	else
		display alert "Per crear el QR és necesari omplir " & errorFaltaDades
		set errorFaltaDades to ""
		return
	end if
	
end accioBotoOK:

on accioBotoCan:sender
	finestraPrincipal's performClose:me -- Tanca la finestra
	error number -128 --Cancel·lat per l'usuari
	--tell me to quit -- Tanca el script i el Editor
end accioBotoCan:

on crearQR(textDelQR)
	try
		
		-- derive a file path for the created image file
		set nomArxiu to (short date string of (current date) & " - " & (time of (current date))) -- meu
		tell application "Finder" to set theURL to (path to desktop folder) --meu
		
		set the targetItemHFSPath to (theURL as string) & nomArxiu & ".jpg"
		set targetItemPOSIXPath to POSIX path of targetItemHFSPath
		set thisImageObject to my createFullSizeQRCodeImageObjectForString(textDelQR)
		my writeNSImageObjectToFileAsJPEG(thisImageObject, targetItemPOSIXPath, false)
		
		set the targetFile to targetItemHFSPath as alias
		
		tell application "Finder" to open file targetFile --meu
		
		-- Dificilment hi haurà un error
	on error errorMessage number errorNumber
		if errorNumber is not -128 then
			set spokenErrorTitle to "I was unable to complete your request: "
			set cfgutil to "/usr/bin/say"
			set theTask to (current application's NSTask's launchedTaskWithLaunchPath:cfgutil arguments:{(spokenErrorTitle & errorMessage)})
			tell application (POSIX path of (path to frontmost application))
				activate
				display alert "Unable to Complete Request:" message errorMessage buttons {"Cancel"} default button 1
			end tell
			theTask's terminate()
		end if
	end try
end crearQR

on netejarText(textBrut)
	repeat with caracterExtra in [" ", "/"]
		set AppleScript's text item delimiters to the caracterExtra
		set a to text items of (textBrut as string)
		set AppleScript's text item delimiters to the ""
		set textBrut to a as string
	end repeat
	return textBrut
end netejarText

on ajustarText(textBrut)
	repeat with caracterExtra in ["\\", ";", ",", ":"]
		set AppleScript's text item delimiters to the caracterExtra
		set a to text items of (textBrut as string)
		set AppleScript's text item delimiters to the "\\" & caracterExtra
		set textBrut to a as string
	end repeat
	return textBrut
end ajustarText

on createFullSizeQRCodeImageObjectForString(thisString)
	-- returns a full-size NSImage object
	set thisString to current application's NSString's stringWithString:thisString
	set thisData to thisString's dataUsingEncoding:(current application's NSUTF8StringEncoding)
	set anImageFilter to current application's CIFilter's filterWithName:"CIQRCodeGenerator"
	anImageFilter's setDefaults()
	anImageFilter's setValue:thisData forKey:"inputMessage"
	anImageFilter's setValue:"L" forKey:"inputCorrectionLevel"
	
	set baseImage to anImageFilter's outputImage()
	set aTransform to current application's CGAffineTransform's CGAffineTransformMakeScale(100.0, 100.0)
	set outputImage to baseImage's imageByApplyingTransform:aTransform
	set imageRepresentation to current application's NSCIImageRep's imageRepWithCIImage:outputImage
	set resultingImageObject to current application's NSImage's alloc()'s initWithSize:(imageRepresentation's |size|())
	
	resultingImageObject's addRepresentation:imageRepresentation
	
	return resultingImageObject
end createFullSizeQRCodeImageObjectForString

on writeNSImageObjectToFileAsJPEG(thisImageObject, targetImageFilePath, shouldRevealInFinder)
	-- create JPEG data for the image object
	set tiffData to thisImageObject's TIFFRepresentation()
	set imageRep to current application's NSBitmapImageRep's imageRepWithData:tiffData
	set theProps to current application's NSDictionary's dictionaryWithObject:1.0 forKey:(current application's NSImageCompressionFactor)
	set imageData to (imageRep's representationUsingType:(current application's NSJPEGFileType) |properties|:theProps)
	
	-- write the JPEG data to file
	set theResult to (imageData's writeToFile:targetImageFilePath atomically:true |error|:(missing value)) as boolean
	if theResult is true then
		if shouldRevealInFinder is true then
			set theseURLs to {}
			set the end of theseURLs to (current application's NSURL's fileURLWithPath:targetImageFilePath)
			-- reveal items in file viewer
			tell current application's NSWorkspace to set theWorkspace to sharedWorkspace()
			tell theWorkspace to activateFileViewerSelectingURLs:theseURLs
		end if
		return true
	else
		error "Hi ha un problema al guardar la imatge en l'arxiu."
	end if
end writeNSImageObjectToFileAsJPEG

Instrucciones:

  • Para usar este código primero se debe abrir la aplicación Editor de Scrips, si tenéis un MacOS muy viejo antes se llamaba Editor de AppleScript.
  • Normalmente ya abre un documento vació, en todo caso cread uno nuevo.
  • Copiad y pegad el script para vuestro macOS, sin dejaros ninguna línea y guardad el documento rápidamente (para evitar el error comentado al final de este mensaje). Mejor guardarlo como Aplicación, marcando la opción de "Mantener abierto después de la ejecución", para que se ejecute directamente. Para posteriormente editar un script guardado como aplicación solo se debe arrastrar y soltar la aplicación sobre el icono del Editor de Scrips. 

 

 

Error del Editor de scripts: En mi MacOS, HS, el editor falla cuando guarda automáticamente un script que contiene instrucciones de ObjC, como ocurre con este script. Si lo tenéis abierto mucho rato sin guardarlo y salta ese error, no permite guardarlo de ninguna forma, solo escribid un espacio en blanco al final de una línea de código y ya se podrá guardar manualmente. Ese espacio se eliminará al guardarse.

Edited by APB

Share this post


Link to post
Share on other sites

para los analfabetos como yo en el tema, podrias explicar los pasos para probar tu faenon?

he probado, como decias, el primer link en tu mensaje, he rellenado los campos requeridos, me ha generado un codigo qr y, antes he desactivadola wifi en el iphone, luego con la aplicacion "Camara" me ha pedido si queria conectar a la wifi, he acceptado, ha conectado a la wifi sin problemas..es genial para meter una contraseña mas potente y no depender de la memoria o de "1password"

gracias

 

Share this post


Link to post
Share on other sites
Posted (edited)
El 6/5/2020 a las 7:07, gonac58 dijo:

para los analfabetos como yo en el tema, podrias explicar los pasos para probar tu faenon?

No hay mucho que explicar:

  • Para usar este código primero se debe abrir la aplicación Editor de Scrips, si tenéis un MacOS muy viejo antes se llamaba Editor de AppleScript.
  • Normalmente ya abre un documento vació, en todo caso cread uno nuevo.
  • Copiad y pegad cualquiera de los dos scripts, sin dejaros ninguna línea y guardad el documento rápidamente (para evitar el error del guardado automático que he comentado antes). Podéis guardarlo como Script, cuando lo queráis usar se abrirá este Editor y lo ejecutareis desde él, o como Aplicación, marcando la opción de "Mantener abierto después de la ejecución", para que se ejecute directamente. Para posteriormente editar un script guardado como aplicación solo se debe arrastrar y soltar la aplicación sobre el icono del Editor de Scrips. 
  • Para ejecutar el script desde el editor apretad el botón con un triangulo, como los botones de inicio de los vídeos y demás.

Os recomiendo usar el segundo ya que permite hacer muchos más tipos de QR.

 

PD: Si alguien quiere aprender AppleScript ninguno de los dos son buenos para empezar ya que mezclan AppleScript puro con instrucciones "inspiradas" en ObjectiveC para así usar sus librerías. Lo llaman AppleScriptObjC.

Edited by APB

Share this post


Link to post
Share on other sites

Hola APB gracias por el aporte pero descubrí que en cuanto a Script Editor, para mi ni siquiera se ha inventado la rueda…

Lo que hice fue lo siguiente:

  1. Abrí Scrip Editor.
  2. Seleccioné "New Document".
  3. Copié y pegué el segundo Scrip que colgaste.
  4. Lo guardé.

Y…

Me puedes enseñar cómo es la rueda 😕

Saludos

Share this post


Link to post
Share on other sites
Posted (edited)

Si lo has guardarlo como script (lo he probado y como aplicación no funciona), ábrelo otra vez y pulsa el botón con el triangulo para que se ejecute:

213506790_Capturadepantalla2020-05-07ales0_53_51.png.94734c986024634fa77cc4783a639157.png

 

Edited by APB

Share this post


Link to post
Share on other sites

Hay algo que definitivamente estoy haciendo mal.

Presioné el botón pero solo se cierra Script Editor y en otra ocasión me salió este error:

1642333946_ScreenShot2020-05-06at6_05_04PM.thumb.png.4452c880e3821bea23f0860ec2c4d305.png

Preguntas tontas:

  1. ¿Dónde se guardan los QR?
  2. ¿En qué momento o dónde capturo la información que quiero?
  3. Si lo guardo como "APP" ¿cuál es la diferencia?

Saludos y gracias

Share this post


Link to post
Share on other sites
Posted (edited)
  1. Los QR se guardaran en el Escritorio.
  2. Te pedirá la información que necesita para crear el QR
  3. Al guardar un script como aplicación este se ejecuta directamente, no se abre el editor. Te ahorras el segundo paso, apretar el botón triangulo, y no lo puedes modificar por error.

¿Que versión de MacOS tienes? Con High Sierra me funciona bien. (La primera vez me ha creado una ventana en blanco pero al volverlo a ejecutar ya ha funcionado bien)

He buscado este error por internet y aparecen muchos casos con Mojave aunque ninguno hace referencia al Editor de Script. De momento no he leído ninguna solución.

 

Prueba con el primer script, no hace uso de las ventanas en ObjC y nos aseguramos que la parte indispensable, el generador del QR, te funciona.

 

PD: Acabo de darme cuenta que el programa está en Catalán, mi idioma. No creo que tengas dificultades para entender lo que pide.

Edited by APB

Share this post


Link to post
Share on other sites
Posted (edited)

Hablando del segundo script, el primero no debería tener estos problemas:

Intentando entender la razón de tu fallo, es mi primera vez creando y gestionando NSWindows desde AppleScript, se me ha ocurrido que puedes probar cambiando el defer:yes por un defer:no (solo cambia el yes por no) al final de la línea que el editor te ha marcado.

En mi caso, con no la ventana que se crea aparece en negro hasta que selecciono otra ventana, la ventana del script o el Escritorio. Entonces ya se ve y funciona correctamente.

Si te funciona, para cerrar la ejecución del script solo cierra la nueva ventana apretando el punto rojo (como con cualquier ventana). Me refiero a la ventana que se crea al ejecutar el script, no la ventana del Editor.

 

También puedes probar de guardarlo como aplicación, marcando la opción de "Mantener abierto después de la ejecución", por si así no te falla. ¿¿?? Lo he trasladado al Xcode para ver si detectaba un error y lo ha ejecutado sin problemas.

 

PD: Como ves he vuelto a editar mis mensajes ya que el fallo al ejecutarlo como aplicación que detecte ayer no estaba en el código sino en mi forma de guardarlo. No marcaba la opción "Mantener abierto después de la ejecución" y por eso se me cerraba la ventana y el programa sin hacer nada.

Edited by APB
  • Gracias 1

Share this post


Link to post
Share on other sites

¡¡¡Listo!!!
Gracias por tus respuestas APB.

Lo he estado probando en Mac OS Mojave y tal vez esa era la razón del error, no lo hice pero puedo probarlo también en High Sierra, El Capitan o en tres más anteriores en caso de que a alguien le interese.

La solución ha sido muy simple, y es tal y cómo dices, guardarlo cómo aplicación y mantener abierto:

Menu/File/Export… – File Format: Application – Stay open after run handler.

Todo esto lo he hecho con el segundo Script y funciona muy bien. En cuanto al catalán no me afecta aunque no lo domino (uso más el inglés cómo podrás haberte dado cuenta).

 

Nuevamente muchas gracias.

Share this post


Link to post
Share on other sites
Posted (edited)

Me alegro que al final la solución haya sido tan simple, la verdad es que ya no sabia que más hacer dado que en mi mac, con HS, no falla.

A nivel profesional supongo que el más usado debe ser el QR de la web pero a nivel personal, tanto el de la wifi como el de contacto (crea un nuevo contacto en la agenda del móvil con los datos que has incluido) son muy útiles. Tener que deletrear mi apellido, nadie lo escribe correctamente, la dirección, tel. y demás a pasado a la historia (yo siempre me acuerdo que tengo el QR cuando ya he terminado 🙄).

Solo los he probado con iOS, no sé si la cámara de los Android funciona igual, pero que no necesites ninguna aplicación extra para leerlos, solo con enfocar el QR con la cámara ya lo lee y te pide que hacer, es fantásticamente práctico. Hace pocas versiones tenias que instalar una app lectora de QR.

Edited by APB

Share this post


Link to post
Share on other sites

se agradeceria un, algo asi como, un tutorial.😔☺️🙂🙂

salut

Share this post


Link to post
Share on other sites

hola apb

he probado el segundo script en Mac Os el capitan y me da este error

Captura de pantalla 2020-05-10 a les 12.13.12.png

Share this post


Link to post
Share on other sites
Hace 3 horas, gonac58 dijo:

se agradeceria un, algo asi como, un tutorial.😔☺️🙂🙂

  • ¿Un tutorial de uso? Una vez que lo abras verás que no hay nada que explicar. Solo hay la ventana de la aplicación con tres pestañas y diferentes opciones en cada una de ellas. Una vez llenados los campos se aprieta en botón y se crea el QR en el escritorio. Es una imagen que la puedes abrir con Previsualización.
  • ¿Un tutorial para preparar la aplicación? Las instrucciones a seguir las tienes unos mensajes más arriba.

Share this post


Link to post
Share on other sites
Posted (edited)
Hace 2 horas, gonac58 dijo:

hola apb

he probado el segundo script en Mac Os el capitan y me da este error

Captura de pantalla 2020-05-10 a les 12.13.12.png

Que magnifica idea tuve al crear las ventanas usando AppleScriptObjC. 🤬 Así se pueden crear ventanas con peticiones múltiples, como es este caso, pero veo que falla con cualquier MacOS que no sea el mío, HS.

 

Diría que has creado la aplicación. Mira de ejecutarlo desde el editor y así te marcará en que punto falla. Resulta que "labelWithString" apareció con MacOS 10.12 (Sierra) y tu tienes 10.11. Cuando pueda miro a ver como lo soluciono.

Edited by APB

Share this post


Link to post
Share on other sites
Posted (edited)

@gonac58 Prueba el script desde el Editor, te marcará donde falla, si falla.

Lo he modificado evitando usar "labelWithString", espero que no haya más instrucciones incompatibles con El Capitan.

Este script debería funcionar con MacOS anteriores al 10.12. O eso espero. 

El script lo he movido a mi segundo mensaje de este hilo, así están las dos versiones juntas.

 

 

Edited by APB

Share this post


Link to post
Share on other sites

tengo dos mac os "el capitan" y "catalina". he probado con catalina y me da este error. voy a probar con el capitan.

gracias

Captura de Pantalla 2020-05-11 a les 7.55.59.png

Share this post


Link to post
Share on other sites

en el capitan funciona, gracias (habia de dar a grabar y no a la flecha de iniciar, quizas ahi me equivocaba)

ahora me gustaria llevar o enviar el script de mi contacto a mis contactos o mostrarlo en el iphone.

como lo hago?

gracias de nuevo

Share this post


Link to post
Share on other sites
Posted (edited)
Hace una hora, gonac58 dijo:

en el capitan funciona, gracias (habia de dar a grabar y no a la flecha de iniciar, quizas ahi me equivocaba)

Eso debería ser en Catalina y con la versión no modificada, supongo que funcionará igual que en Mojave por lo que se debe guardar como aplicación. McDaniel ya lo dice en su último mensaje.

En El Capitan debería funcionarte la versión retocada 3 mensajes arriba, excepto que aún haya alguna instrucción demasiado moderna. No debería ser necesario guardarlo como aplicación para que funcione, pero mejor hacerlo.

 

Hace una hora, gonac58 dijo:

ahora me gustaria llevar o enviar el script de mi contacto a mis contactos o mostrarlo en el iphone.

¿El script de mi contacto? En todo caso puedes enviar el QR con tu información de contacto.

Rellenas la información de contacto y le das al botón azul (ahora no recuerdo que puse) para que genere el QR y lo guarde en el Escritorio. Les envías esa imagen y ellos la leen con la cámara de su mòbil.

No pienso que esa sea la mejor forma de hacerlo. Creo que lo mejor es tener guardado ese QR en tu mòbil, es un simple Jpg, y mostrarlo cuando quieras dar tus datos de contacto a alguien. Esa persona enfoca su cámara en tu pantalla y le aparece la opción de guardar un nuevo contacto en su agenda. Así funciona en las últimas versiones de iOS, en Android puede que se necesite una app para leer QR’s.

Por supuesto si tienen Mac también pueden copiarse el script para crear sus propios QR.

 

Edited by APB

Share this post


Link to post
Share on other sites

a eso me referia enviar el qr con informacion de mis datos..(nombre,direccion,telefono y mail)

he enviado ese qr a mi hermano...para ver si puede usarlo

pero en catalina...se me resiste el condenado....sigo probando

he hecho un qr con los datos de mi wifi, lo he cargado en mi iphone y la encuentra bien pero debo ademas indicar el dns y ip del router para que aceda a la wifi

gracias

Share this post


Link to post
Share on other sites
Posted (edited)
Hace 1 hora, gonac58 dijo:

pero en catalina...se me resiste el condenado....sigo probando

¿Sigue mostrando el mensaje "NSWindow drag regions ..." aún creando la aplicación? La imagen que has puesto con el mensaje es del editor y la única manera que McDaniels encontró para que funcionara en Mojave fue guardándolo como aplicación y ejecutándola. Espero que con Catalina funcione igual.

 

Hace 1 hora, gonac58 dijo:

he hecho un qr con los datos de mi wifi, lo he cargado en mi iphone y la encuentra bien pero debo ademas indicar el dns y ip del router para que aceda a la wifi

¿Tu wifi te pide los dns y ip del router para acceder? ¿Pretende ser una medida de seguridad que has implementado? Creo que será un problema ya que para ser reconocidos tienen que tener unos textos exactos y no recuerdo que para la wifi tuviera esas opciones.

Edited by APB

Share this post


Link to post
Share on other sites

en catalina y como aplicacion hace como un amago de abrir la aplicacion pero no..es como un flash...no dura ni un segundo

voy aprobar a cargar el script hecho en "el capitan" descargarlo en "catalina" haber que pasa.

saludos

Share this post


Link to post
Share on other sites

no va... en catalina he vuelto a crear la aplicacion con el segundo script ,luego he abierto el paquete de la aplicacion y he hecho click en el aplett de la carpeta macos..me ha dado este mensaje

Last login: Sun May  3 04:08:39 on console

The default interactive shell is now zsh.
To update your account to use zsh, please run `chsh -s /bin/zsh`.
For more details, please visit https://support.apple.com/kb/HT208050.

por sisirve de algo

 

Share this post


Link to post
Share on other sites
Hace 1 hora, gonac58 dijo:

en catalina y como aplicacion hace como un amago de abrir la aplicacion pero no..es como un flash...no dura ni un segundo

Al guardarlo como aplicación ¿has marcado la opción “Mantener abierto después de la ejecución”?

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.


×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.