(* WindowSetter 1.0
Järjestelee kansion ja sen alikansioiden ikkunat. 
Käyttötarkoitus on asetella ikkunoiden näkymät ennen rompulle polttoa. 
Aseta ensin jonkin kansion näkymä haluamallasi tavalla. Kun skripti 
kysyy esimerkkiä, osoita sille aseteltu kansio. Asetukset kopioidaan. 
Skripti kysyy seuraavaksi, mistä kansiosta asettelu aloitetaan.  
Vaatimukset: AppleScript 1.3.4, standard additions ja Finder 8.5.
Ongelmia: Finder on aika hidas tässä. Ikävä kyllä Finder 8.5 ei anna skriptata grid sizea.
Jos rekursiivisen skriptin ajaa Skriptieditorissa, ohjelman muisti voi käydä vähiin.

2000-11-05 Tuomas Rosberg <vanhentunut>
Public Domain. Käytä omalla riskillä.
*)

global propertiez
global resoX
global resoY
property posX : 6
property posY : 41
property roundComplete : false
property leaveOpen : true

on run
   my getPrefReso()
   my getProps()
   set aFolder to choose folder with prompt "Valitse kansio, jonka näkymä asetetaan."
   display dialog ¬
      "Jätetäänkö alikansioiden ikkunat auki automaattisen asettelun jälkeen?" & return & ¬
      "Finderin avoimien ikkunoiden määrä on rajallinen." buttons {"Ei", "Kyllä"} default button "Kyllä"
   if button returned of result is "Kyllä" then
      set leaveOpen to true
   else
      set leaveOpen to false
   end if
   my setProps(aFolder)
   my digFolder(aFolder)
   set posX to 6
   set posY to 41
end run
--
on digFolder(aFolder)
   set folderList to {}
   tell application "Finder"
      activate
      set folderList to folderList & (every folder of aFolder)
      if folderList is not {} then
         repeat with aFolder in folderList
            my setProps(aFolder)
            if roundComplete is false then
               set posX to posX + 5
               set posY to posY + 18
            else -- Ollaan resoluution mukaisessa alareunassa.
               set posX to 6
               set posY to 41
            end if
            my digFolder(aFolder) -- Rekursio alikansioille.
            set folderList to rest of folderList
            set roundComplete to false
         end repeat
      end if
   end tell
end digFolder
--
on getPrefReso()
   set resolutions to {"640 * 480", "800 * 600", "832 * 624", "1024 * 768"}
   set prefReso to ¬
      (choose from list resolutions with prompt "Mille näytölle kansioikkunoiden tulee mahtua?" default items "1024 * 768")
   set prefReso to prefReso as text
   set tid to text item delimiters
   set text item delimiters to space
   set resoX to first text item in prefReso as integer
   set resoY to third text item in prefReso as integer
end getPrefReso
--
on getProps()
   set exampleFolder to ¬
      choose folder with prompt "Valitse kansio, jonka näkymä on jo asetettu sopivaksi."
   tell application "Finder"
      open exampleFolder
      set w to container window of exampleFolder
      set vie to view of w
      set isi to icon size of w
      set spa to spatial view arrangement of w
      set bua to button view arrangement of w
      set sor to sort direction of w
      set cal to calculates folder sizes of w -- Are folder sizes calculated and displayed in the window? (does not apply to suitcase windows)
      set com to shows comments of w -- Are comments displayed in the window? (does not apply to suitcases)
      set cda to shows creation date of w -- Are creation dates displayed in the window?
      set kin to shows kind of w -- Are document kinds displayed in the window?
      set lab to shows label of w -- Are labels displayed in the window?
      set mda to shows modification date of w -- Are modification dates displayed in the window?
      set siz to shows size of w -- Are file sizes displayed in the window?
      set ver to shows version of w -- Are file versions displayed in the window? (does not apply to suitcase windows)
      set rel to uses relative dates of w -- Are relative dates (e.g., today, yesterday) shown in the window?
      set propertiez to ¬
         {view:vie, icon size:isi, spatial view arrangement:spa, button view arrangement:bua, sort direction:sor, shows comments:com, shows creation date:cda, shows kind:kin, shows label:lab, shows modification date:mda, shows size:siz, shows version:ver, uses relative dates:rel}
      close exampleFolder
   end tell
end getProps
--
on setProps(f)
   tell application "Finder"
      activate
      open f
      set w to container window of f
      try
         set position of w to {posX, posY}
      on error -- Finder 8.5 ei osaa asemoida, jos ikkunan alkuperäinen koko on liian pieni (ilmeisesti asetettu järjestelmässä 7)
         set zoomed full size of w to true
         set position of w to {posX, posY}
      end try
      set view of w to contents of view in propertiez
      set icon size of w to contents of icon size in propertiez
      set spatial view arrangement of w to contents of spatial view arrangement in propertiez
      set button view arrangement of w to contents of button view arrangement in propertiez
      set zoomed of w to true
      set bou to bounds of w
      if third item in bou > resoX then
         set third item in bou to resoX
      end if
      if fourth item in bou > resoY then
         set fourth item in bou to resoY
      end if
      try
         set bounds of w to bou
      on error -- Finderin ikkuna ei mahdu enää pienemmäksi, ollaan resoluution alareunassa.         
         set roundComplete to true
      end try
      (* käytä seuraavia sitten kun tarvitset niitä  *)
      --set sort direction of w to contents of sort direction in propertiez
      --set shows comments of w to contents of shows comments in propertiez
      --set shows creation date of w to contents of shows creation date in propertiez
      --set shows kind of w to contents of shows kind in propertiez
      --set shows label of w to contents of shows label in propertiez
      --set shows modification date of w to contents of shows modification date in propertiez
      --set shows size of w to contents of shows size in propertiez
      --set uses relative dates of w to contents of uses relative dates in propertiez
      set has custom view settings of w to true -- Muutokset Finderin vakionäkymään eivät muuta tämän kansion näkymää.
      if leaveOpen is false then
         close f
      end if
   end tell
end setProps
--