Hur återställa till hårdkodad property?

Tråden skapades och har fått 6 svar. Det senaste inlägget skrevs .
1
  • Medlem
  • 2008-05-01 16:01

Jag har gjort ett skript med en kryssruta som ändrar en property för den som inte vill bli varnad igen. Hur återställer man enklast den där kryssrutan? Kan man vid exekveringen av ett skript återgå till de hårdkodade properties det innehåller?

Hmm... frågan är lite märklig. En property bibehåller det senast angivna värdet. Det initiala värdet kan du egentligen aldrig återfå.

För att göra det så måste man alltså ha det initiala värdet någon annanstans, t.ex. i en property som man kallar "BackupValue", så att man när man vill ändra värdet i den första propertyn kan säga "set FirstProperty to BackupValue

I just detta fall tror jag dock att du kan göra det enklare, för det värde du vill spara är en s.k. "boolean" dvs ett värde som kan vara antingen true eller false, och egentligen är väl det enda du vill göra att växla mellan två lägen, typ av och på, inte sant?

En boolean kan negeras, dvs man säga "not false" vilket är lika med true, så följande kodexempel visar hur har en property med ett initialt värde, som om du väljer knappen "ändra" växlar till sin egen motsats dvs. true bli false och vice versa

property CheckBoxValue : true

set myButtonPushed to button returned of (display dialog CheckBoxValue buttons {"Behåll", "Ändra"})

if myButtonPushed is "Ändra" then
	set CheckBoxValue to not CheckBoxValue
end if
  • Medlem
  • 2008-05-05 20:45

Skriptet består av två delar:
1. Kollar om någon mallsida i det aktiva dokumentet i InDesign har textramar med innehållet "X".
1.a. Slänger upp en fråga med två kryssrutor ruta som frågar om man
1.a.I. ...vill byta "X" mot "Y", och utför det
1.a.II. ...vill bli påmind om att "X" finns i mallsidan fler gånger.

2. Sparar en kopia av dokumentet.

Jag hade nog med egenhackad fulkod kunna lösa det där om jag hade haft en dialog att visa knappar i efter att ha sagt nej på 1.a.II.

Men min kryssruta 1.a.II gör att dialogen inte dyker upp mer alls. Skriptet sparar bara kopian utan dialoger.

Min förhoppning är att man med ett annat skript ska kunna be Manusredigeraren att öppna skriptet, skriva in ett melanslag i slutet av skriptet och spara om det för att på så sätt nolla alla properties. Är jag fel på det?

ok, du tänker alltså på att om man stänger av dialogrutor så blir det svårt att få tillbaka dem

Det du behöver är två kommandon som finns i Standard Additions, "Load Script" respektive "Store Script". Tanken är att du först läser in det gamla scriptet, ändrar värdet på propertyn och sedan spar över det gamla scriptet med det förändrade scriptet.

  • Medlem
  • 2008-05-05 21:46

hmm, testade lite och kan kort konstatera att det är tur att jag har backup på originalet...

Jag har i ett annat projekt lagrat ett antal parametrar i en separat fil så att jag kan hämta dem med en subrutin.

I en fil på skrivbordet har jag en fil som heter Properties som innehåller detta:

(*
This script contains most properties for the robot. 
*)
property theRunCount : 0
property SketchesFolderNetwork : "sketches"
property SketchesFolderNetworksVolumeName : "We_production"
property ProcessThisFolder : "01 - Process this"
property ProcessingFolder : "02 - Processing"
property FolderNames : {"detail sketches", "season sketches", "style sketches"}
property DetailFolderList : {"91"}
property SeasonFolderList : {"81", "82", "84", "85", "91"}
property StyleFolderList : {"91"}
property JPEGFolderNetwork : "sketches jpeg"
property JPEGMiniFolderNetwork : "sketches jpeg mini"

I mitt script så ropar jag sedan på en subrutin och efter det sätter jag mina variabler så här:

tell me
set allProperties to getAllProperties()
end tell

-- Source Folder
set SourceFolder to folder (first item of allProperties) of disk (second item of allProperties)
		
-- Destination Folder
set destinationFolder to folder (third item of allProperties) of desktop

/.../ osv...

Subrutinen för att läsa av alla properties längre ner i samma script ser ut så här:

on getAllProperties()
	set thePropertyScriptPath to (path to desktop folder as string) & "Properties.scpt"
	set thePropertyScript to load script file thePropertyScriptPath
	set SketchesFolderNetwork to (SketchesFolderNetwork of thePropertyScript)
	set SketchesFolderNetworksVolumeName to (SketchesFolderNetworksVolumeName of thePropertyScript)
	set ProcessThisFolder to (ProcessThisFolder of thePropertyScript)
	set ProcessingFolder to (ProcessingFolder of thePropertyScript)
	set FolderNames to (FolderNames of thePropertyScript)
	set DetailFolderList to (DetailFolderList of thePropertyScript)
	set SeasonFolderList to (SeasonFolderList of thePropertyScript)
	set StyleFolderList to (StyleFolderList of thePropertyScript)
	return {SketchesFolderNetwork, SketchesFolderNetworksVolumeName, ProcessThisFolder, ProcessingFolder, FolderNames, DetailFolderList, SeasonFolderList, StyleFolderList}
end getAllProperties

Du skulle säkert kunna kombinera det Richard skriver med det jag skriver och peta ihop något som fungerar för dig.

Tex skulle dina ursprungliga värden lagras i Properties (det du kallar hårdkodade värden) och andra värden kan du lagra som properties:xxxx i ditt egentliga script, då kan du läsa av och återställa som du vill?

Lycka till!

Senast redigerat 2008-05-06 12:12
  • Medlem
  • 2008-05-06 12:20

Tack tack! Men jag har ändrat lite på när properties ändras och i samband med det stött på andra hinder jag inte begriper mig på. Jag återkommer.

1
Bevaka tråden