summaryrefslogtreecommitdiffstats
path: root/Mac
diff options
context:
space:
mode:
authorJack Jansen <jack.jansen@cwi.nl>2001-04-07 12:53:45 (GMT)
committerJack Jansen <jack.jansen@cwi.nl>2001-04-07 12:53:45 (GMT)
commit43935128a4791ab533212550f84b59f5b59649d4 (patch)
tree0b56de82645d40c007a09cd130fdbc2c371081ca /Mac
parent501d90471d9b281692eb021b0f0c71dfe4e62626 (diff)
downloadcpython-43935128a4791ab533212550f84b59f5b59649d4.zip
cpython-43935128a4791ab533212550f84b59f5b59649d4.tar.gz
cpython-43935128a4791ab533212550f84b59f5b59649d4.tar.bz2
Finally merged morefindertools into findertools.
Diffstat (limited to 'Mac')
-rw-r--r--Mac/Contrib/morefindertools/morefindertools.py708
-rw-r--r--Mac/Contrib/morefindertools/morefindertoolstest.py85
-rw-r--r--Mac/Contrib/morefindertools/readme.txt4
-rw-r--r--Mac/Lib/findertools.py707
4 files changed, 703 insertions, 801 deletions
diff --git a/Mac/Contrib/morefindertools/morefindertools.py b/Mac/Contrib/morefindertools/morefindertools.py
deleted file mode 100644
index 8616e5a..0000000
--- a/Mac/Contrib/morefindertools/morefindertools.py
+++ /dev/null
@@ -1,708 +0,0 @@
-"""Utility routines depending on the finder,
-inspired by findertools, but extended.
-Most events have been captured from
-Lasso Capture AE and than translated to python code.
-
-IMPORTANT
-Note that the processes() function returns different values
-depending on the OS version it is running on. On MacOS 9
-the Finder returns the process *names* which can then be
-used to find out more about them. On MacOS 8.6 and earlier
-the Finder returns a code which does not seem to work.
-So bottom line: the processes() stuff does not work on < MacOS9
-
-Written by erik@letterror.com
-"""
-
-import Finder_7_0_Suite, Finder_Suite
-import AppleEvents
-import aetools
-import MacOS
-import sys
-import macfs
-import aetypes
-from types import *
-
-__version__ = '1.0'
-morefindertoolserror = 'morefindertools Error'
-
-
-SIGNATURE='MACS'
-
-class Finder(aetools.TalkTo, Finder_Suite.Finder_Suite, Finder_7_0_Suite.Finder_7_0_Suite):
- pass
-
-_finder_talker = None
-
-def _getfinder():
- """returns basic (recyclable) Finder AE interface object"""
- global _finder_talker
- if not _finder_talker:
- _finder_talker = Finder(SIGNATURE)
- _finder_talker.send_flags = ( _finder_talker.send_flags |
- AppleEvents.kAECanInteract | AppleEvents.kAECanSwitchLayer)
- return _finder_talker
-
-
-#---------------------------------------------------
-# The original findertools
-#
-
-def launch(file):
- """Open a file thru the finder. Specify file by name or fsspec"""
- finder = _getfinder()
- fss = macfs.FSSpec(file)
- vRefNum, parID, name = fss.as_tuple()
- dir_fss = macfs.FSSpec((vRefNum, parID, ''))
- file_alias = fss.NewAlias()
- dir_alias = dir_fss.NewAlias()
- return finder.open(dir_alias, items=[file_alias])
-
-def Print(file):
- """Print a file thru the finder. Specify file by name or fsspec"""
- finder = _getfinder()
- fss = macfs.FSSpec(file)
- vRefNum, parID, name = fss.as_tuple()
- dir_fss = macfs.FSSpec((vRefNum, parID, ''))
- file_alias = fss.NewAlias()
- dir_alias = dir_fss.NewAlias()
- return finder._print(dir_alias, items=[file_alias])
-
-def copy(src, dstdir):
- """Copy a file to a folder"""
- finder = _getfinder()
- src_fss = macfs.FSSpec(src)
- dst_fss = macfs.FSSpec(dstdir)
- src_alias = src_fss.NewAlias()
- dst_alias = dst_fss.NewAlias()
- return finder.copy_to(dst_alias, _from=[src_alias])
-
-def move(src, dstdir):
- """Move a file to a folder"""
- finder = _getfinder()
- src_fss = macfs.FSSpec(src)
- dst_fss = macfs.FSSpec(dstdir)
- src_alias = src_fss.NewAlias()
- dst_alias = dst_fss.NewAlias()
- return finder.move_to(dst_alias, _from=[src_alias])
-
-def sleep():
- """Put the mac to sleep"""
- finder = _getfinder()
- finder.sleep()
-
-def shutdown():
- """Shut the mac down"""
- finder = _getfinder()
- finder.shut_down()
-
-def restart():
- """Restart the mac"""
- finder = _getfinder()
- finder.restart()
-
-
-#---------------------------------------------------
-# Additional findertools
-#
-
-def reveal(file):
- """Reveal a file in the finder. Specify file by name or fsspec."""
- finder = _getfinder()
- fss = macfs.FSSpec(file)
- file_alias = fss.NewAlias()
- return finder.reveal(file_alias)
-
-def select(file):
- """select a file in the finder. Specify file by name or fsspec."""
- finder = _getfinder()
- fss = macfs.FSSpec(file)
- file_alias = fss.NewAlias()
- return finder.select(file_alias)
-
-def update(file):
- """Update the display of the specified object(s) to match
- their on-disk representation. Specify file by name or fsspec."""
- finder = _getfinder()
- fss = macfs.FSSpec(file)
- file_alias = fss.NewAlias()
- return finder.update(file_alias)
-
-
-#---------------------------------------------------
-# More findertools
-#
-
-def comment(object, comment=None):
- """comment: get or set the Finder-comment of the item, displayed in the łGet Info˛ window."""
- object = macfs.FSSpec(object)
- fss = macfs.FSSpec(object)
- object_alias = fss.NewAlias()
- if comment == None:
- return _getcomment(object_alias)
- else:
- return _setcomment(object_alias, comment)
-
-def _setcomment(object_alias, comment):
- finder = _getfinder()
- args = {}
- attrs = {}
- aeobj_00 = aetypes.ObjectSpecifier(want=aetypes.Type('cobj'), form="alis", seld=object_alias, fr=None)
- aeobj_01 = aetypes.ObjectSpecifier(want=aetypes.Type('prop'), form="prop", seld=aetypes.Type('comt'), fr=aeobj_00)
- args['----'] = aeobj_01
- args["data"] = comment
- _reply, args, attrs = finder.send("core", "setd", args, attrs)
- if args.has_key('errn'):
- raise morefindertoolserror, aetools.decodeerror(args)
- if args.has_key('----'):
- return args['----']
-
-def _getcomment(object_alias):
- finder = _getfinder()
- args = {}
- attrs = {}
- aeobj_00 = aetypes.ObjectSpecifier(want=aetypes.Type('cobj'), form="alis", seld=object_alias, fr=None)
- aeobj_01 = aetypes.ObjectSpecifier(want=aetypes.Type('prop'), form="prop", seld=aetypes.Type('comt'), fr=aeobj_00)
- args['----'] = aeobj_01
- _reply, args, attrs = finder.send("core", "getd", args, attrs)
- if args.has_key('errn'):
- raise morefindertoolserror, aetools.decodeerror(args)
- if args.has_key('----'):
- return args['----']
-
-
-#---------------------------------------------------
-# Get information about current processes in the Finder.
-
-def processes():
- """processes returns a list of all active processes running on this computer and their creators."""
- finder = _getfinder()
- args = {}
- attrs = {}
- processnames = []
- processnumbers = []
- creators = []
- partitions = []
- used = []
- ## get the processnames or else the processnumbers
- args['----'] = aetypes.ObjectSpecifier(want=aetypes.Type('prcs'), form="indx", seld=aetypes.Unknown('abso', "all "), fr=None)
- _reply, args, attrs = finder.send('core', 'getd', args, attrs)
- if args.has_key('errn'):
- raise morefindertoolserror, aetools.decodeerror(args)
- p = []
- if args.has_key('----'):
- p = args['----']
- for proc in p:
- if hasattr(proc, 'seld'):
- # it has a real name
- processnames.append(proc.seld)
- elif hasattr(proc, 'type'):
- if proc.type == "psn ":
- # it has a process number
- processnumbers.append(proc.data)
- ## get the creators
- args = {}
- attrs = {}
- aeobj_0 = aetypes.ObjectSpecifier(want=aetypes.Type('prcs'), form="indx", seld=aetypes.Unknown('abso', "all "), fr=None)
- args['----'] = aetypes.ObjectSpecifier(want=aetypes.Type('prop'), form="prop", seld=aetypes.Type('fcrt'), fr=aeobj_0)
- _reply, args, attrs = finder.send('core', 'getd', args, attrs)
- if args.has_key('errn'):
- raise morefindertoolserror, aetools.decodeerror(_arg)
- if args.has_key('----'):
- p = args['----']
- for proc in p:
- creators.append(proc.type)
- ## concatenate in one dict
- result = []
- if len(processnames) > len(processnumbers):
- data = processnames
- else:
- data = processnumbers
- for i in range(len(creators)):
- result.append((data[i], creators[i]))
- return result
-
-class _process:
- pass
-
-def isactiveprocess(processname):
- """Check of processname is active. MacOS9"""
- all = processes()
- ok = 0
- for n, c in all:
- if n == processname:
- return 1
- return 0
-
-def processinfo(processname):
- """Return an object with all process properties as attributes for processname. MacOS9"""
- p = _process()
-
- if processname == "Finder":
- p.partition = None
- p.used = None
- else:
- p.partition = _processproperty(processname, 'appt')
- p.used = _processproperty(processname, 'pusd')
- p.visible = _processproperty(processname, 'pvis') #Is the process' layer visible?
- p.frontmost = _processproperty(processname, 'pisf') #Is the process the frontmost process?
- p.file = _processproperty(processname, 'file') #the file from which the process was launched
- p.filetype = _processproperty(processname, 'asty') #the OSType of the file type of the process
- p.creatortype = _processproperty(processname, 'fcrt') #the OSType of the creator of the process (the signature)
- p.accepthighlevel = _processproperty(processname, 'revt') #Is the process high-level event aware (accepts open application, open document, print document, and quit)?
- p.hasscripting = _processproperty(processname, 'hscr') #Does the process have a scripting terminology, i.e., can it be scripted?
- return p
-
-def _processproperty(processname, property):
- """return the partition size and memory used for processname"""
- finder = _getfinder()
- args = {}
- attrs = {}
- aeobj_00 = aetypes.ObjectSpecifier(want=aetypes.Type('prcs'), form="name", seld=processname, fr=None)
- aeobj_01 = aetypes.ObjectSpecifier(want=aetypes.Type('prop'), form="prop", seld=aetypes.Type(property), fr=aeobj_00)
- args['----'] = aeobj_01
- _reply, args, attrs = finder.send("core", "getd", args, attrs)
- if args.has_key('errn'):
- raise morefindertoolserror, aetools.decodeerror(args)
- if args.has_key('----'):
- return args['----']
-
-
-#---------------------------------------------------
-# Mess around with Finder windows.
-
-def openwindow(object):
- """Open a Finder window for object, Specify object by name or fsspec."""
- finder = _getfinder()
- object = macfs.FSSpec(object)
- fss = macfs.FSSpec(object)
- object_alias = fss.NewAlias()
- args = {}
- attrs = {}
- _code = 'aevt'
- _subcode = 'odoc'
- aeobj_0 = aetypes.ObjectSpecifier(want=aetypes.Type('cfol'), form="alis", seld=object_alias, fr=None)
- args['----'] = aeobj_0
- _reply, args, attrs = finder.send(_code, _subcode, args, attrs)
- if args.has_key('errn'):
- raise morefindertoolserror, aetools.decodeerror(args)
-
-def closewindow(object):
- """Close a Finder window for folder, Specify by path."""
- finder = _getfinder()
- fss = macfs.FSSpec(object)
- object_alias = fss.NewAlias()
- args = {}
- attrs = {}
- _code = 'core'
- _subcode = 'clos'
- aeobj_0 = aetypes.ObjectSpecifier(want=aetypes.Type('cfol'), form="alis", seld=object_alias, fr=None)
- args['----'] = aeobj_0
- _reply, args, attrs = finder.send(_code, _subcode, args, attrs)
- if args.has_key('errn'):
- raise morefindertoolserror, aetools.decodeerror(args)
-
-def location(object, pos=None):
- """Set the position of a Finder window for folder to pos=(w, h). Specify file by name or fsspec.
- If pos=None, location will return the current position of the object."""
- fss = macfs.FSSpec(object)
- object_alias = fss.NewAlias()
- if not pos:
- return _getlocation(object_alias)
- return _setlocation(object_alias, pos)
-
-def _setlocation(object_alias, (x, y)):
- """_setlocation: Set the location of the icon for the object."""
- finder = _getfinder()
- args = {}
- attrs = {}
- aeobj_00 = aetypes.ObjectSpecifier(want=aetypes.Type('cfol'), form="alis", seld=object_alias, fr=None)
- aeobj_01 = aetypes.ObjectSpecifier(want=aetypes.Type('prop'), form="prop", seld=aetypes.Type('posn'), fr=aeobj_00)
- args['----'] = aeobj_01
- args["data"] = [x, y]
- _reply, args, attrs = finder.send("core", "setd", args, attrs)
- if args.has_key('errn'):
- raise morefindertoolserror, aetools.decodeerror(args)
- return (x,y)
-
-def _getlocation(object_alias):
- """_getlocation: get the location of the icon for the object."""
- finder = _getfinder()
- args = {}
- attrs = {}
- aeobj_00 = aetypes.ObjectSpecifier(want=aetypes.Type('cfol'), form="alis", seld=object_alias, fr=None)
- aeobj_01 = aetypes.ObjectSpecifier(want=aetypes.Type('prop'), form="prop", seld=aetypes.Type('posn'), fr=aeobj_00)
- args['----'] = aeobj_01
- _reply, args, attrs = finder.send("core", "getd", args, attrs)
- if args.has_key('errn'):
- raise morefindertoolserror, aetools.decodeerror(args)
- if args.has_key('----'):
- pos = args['----']
- return pos.h, pos.v
-
-def label(object, index=None):
- """label: set or get the label of the item. Specify file by name or fsspec."""
- fss = macfs.FSSpec(object)
- object_alias = fss.NewAlias()
- if index == None:
- return _getlabel(object_alias)
- if index < 0 or index > 7:
- index = 0
- return _setlabel(object_alias, index)
-
-def _getlabel(object_alias):
- """label: Get the label for the object."""
- finder = _getfinder()
- args = {}
- attrs = {}
- aeobj_00 = aetypes.ObjectSpecifier(want=aetypes.Type('cobj'), form="alis", seld=object_alias, fr=None)
- aeobj_01 = aetypes.ObjectSpecifier(want=aetypes.Type('prop'), form="prop", seld=aetypes.Type('labi'), fr=aeobj_00)
- args['----'] = aeobj_01
- _reply, args, attrs = finder.send("core", "getd", args, attrs)
- if args.has_key('errn'):
- raise morefindertoolserror, aetools.decodeerror(args)
- if args.has_key('----'):
- return args['----']
-
-def _setlabel(object_alias, index):
- """label: Set the label for the object."""
- finder = _getfinder()
- args = {}
- attrs = {}
- _code = 'core'
- _subcode = 'setd'
- aeobj_0 = aetypes.ObjectSpecifier(want=aetypes.Type('prop'),
- form="alis", seld=object_alias, fr=None)
- aeobj_1 = aetypes.ObjectSpecifier(want=aetypes.Type('prop'),
- form="prop", seld=aetypes.Type('labi'), fr=aeobj_0)
- args['----'] = aeobj_1
- args["data"] = index
- _reply, args, attrs = finder.send(_code, _subcode, args, attrs)
- if args.has_key('errn'):
- raise morefindertoolserror, aetools.decodeerror(args)
- return index
-
-def windowview(folder, view=None):
- """windowview: Set the view of the window for the folder. Specify file by name or fsspec.
- 0 = by icon (default)
- 1 = by name
- 2 = by button
- """
- fss = macfs.FSSpec(folder)
- folder_alias = fss.NewAlias()
- if view == None:
- return _getwindowview(folder_alias)
- return _setwindowview(folder_alias, view)
-
-def _setwindowview(folder_alias, view=0):
- """set the windowview"""
- attrs = {}
- args = {}
- if view == 1:
- _v = aetypes.Type('pnam')
- elif view == 2:
- _v = aetypes.Type('lgbu')
- else:
- _v = aetypes.Type('iimg')
- finder = _getfinder()
- aeobj_0 = aetypes.ObjectSpecifier(want = aetypes.Type('cfol'),
- form = 'alis', seld = folder_alias, fr=None)
- aeobj_1 = aetypes.ObjectSpecifier(want = aetypes.Type('prop'),
- form = 'prop', seld = aetypes.Type('cwnd'), fr=aeobj_0)
- aeobj_2 = aetypes.ObjectSpecifier(want = aetypes.Type('prop'),
- form = 'prop', seld = aetypes.Type('pvew'), fr=aeobj_1)
- aeobj_3 = aetypes.ObjectSpecifier(want = aetypes.Type('prop'),
- form = 'prop', seld = _v, fr=None)
- _code = 'core'
- _subcode = 'setd'
- args['----'] = aeobj_2
- args['data'] = aeobj_3
- _reply, args, attrs = finder.send(_code, _subcode, args, attrs)
- if args.has_key('errn'):
- raise morefindertoolserror, aetools.decodeerror(args)
- if args.has_key('----'):
- return args['----']
-
-def _getwindowview(folder_alias):
- """get the windowview"""
- attrs = {}
- args = {}
- finder = _getfinder()
- args = {}
- attrs = {}
- aeobj_00 = aetypes.ObjectSpecifier(want=aetypes.Type('cfol'), form="alis", seld=folder_alias, fr=None)
- aeobj_01 = aetypes.ObjectSpecifier(want=aetypes.Type('prop'), form="prop", seld=aetypes.Type('cwnd'), fr=aeobj_00)
- aeobj_02 = aetypes.ObjectSpecifier(want=aetypes.Type('prop'), form="prop", seld=aetypes.Type('pvew'), fr=aeobj_01)
- args['----'] = aeobj_02
- _reply, args, attrs = finder.send("core", "getd", args, attrs)
- if args.has_key('errn'):
- raise morefindertoolserror, aetools.decodeerror(args)
- views = {'iimg':0, 'pnam':1, 'lgbu':2}
- if args.has_key('----'):
- return views[args['----'].enum]
-
-def windowsize(folder, size=None):
- """Set the size of a Finder window for folder to size=(w, h), Specify by path.
- If size=None, windowsize will return the current size of the window.
- Specify file by name or fsspec.
- """
- fss = macfs.FSSpec(folder)
- folder_alias = fss.NewAlias()
- openwindow(fss)
- if not size:
- return _getwindowsize(folder_alias)
- return _setwindowsize(folder_alias, size)
-
-def _setwindowsize(folder_alias, (w, h)):
- """Set the size of a Finder window for folder to (w, h)"""
- finder = _getfinder()
- args = {}
- attrs = {}
- _code = 'core'
- _subcode = 'setd'
- aevar00 = [w, h]
- aeobj_0 = aetypes.ObjectSpecifier(want=aetypes.Type('cfol'),
- form="alis", seld=folder_alias, fr=None)
- aeobj_1 = aetypes.ObjectSpecifier(want=aetypes.Type('prop'),
- form="prop", seld=aetypes.Type('cwnd'), fr=aeobj_0)
- aeobj_2 = aetypes.ObjectSpecifier(want=aetypes.Type('prop'),
- form="prop", seld=aetypes.Type('ptsz'), fr=aeobj_1)
- args['----'] = aeobj_2
- args["data"] = aevar00
- _reply, args, attrs = finder.send(_code, _subcode, args, attrs)
- if args.has_key('errn'):
- raise morefindertoolserror, aetools.decodeerror(args)
- return (w, h)
-
-def _getwindowsize(folder_alias):
- """Set the size of a Finder window for folder to (w, h)"""
- finder = _getfinder()
- args = {}
- attrs = {}
- aeobj_0 = aetypes.ObjectSpecifier(want=aetypes.Type('cfol'),
- form="alis", seld=folder_alias, fr=None)
- aeobj_1 = aetypes.ObjectSpecifier(want=aetypes.Type('prop'),
- form="prop", seld=aetypes.Type('cwnd'), fr=aeobj_0)
- aeobj_2 = aetypes.ObjectSpecifier(want=aetypes.Type('prop'),
- form="prop", seld=aetypes.Type('posn'), fr=aeobj_1)
- args['----'] = aeobj_2
- _reply, args, attrs = finder.send('core', 'getd', args, attrs)
- if args.has_key('errn'):
- raise morefindertoolserror, aetools.decodeerror(args)
- if args.has_key('----'):
- return args['----']
-
-def windowposition(folder, pos=None):
- """Set the position of a Finder window for folder to pos=(w, h)."""
- fss = macfs.FSSpec(folder)
- folder_alias = fss.NewAlias()
- openwindow(fss)
- if not pos:
- return _getwindowposition(folder_alias)
- if type(pos) == InstanceType:
- # pos might be a QDPoint object as returned by _getwindowposition
- pos = (pos.h, pos.v)
- return _setwindowposition(folder_alias, pos)
-
-def _setwindowposition(folder_alias, (x, y)):
- """Set the size of a Finder window for folder to (w, h)."""
- finder = _getfinder()
- args = {}
- attrs = {}
- aeobj_0 = aetypes.ObjectSpecifier(want=aetypes.Type('cfol'),
- form="alis", seld=folder_alias, fr=None)
- aeobj_1 = aetypes.ObjectSpecifier(want=aetypes.Type('prop'),
- form="prop", seld=aetypes.Type('cwnd'), fr=aeobj_0)
- aeobj_2 = aetypes.ObjectSpecifier(want=aetypes.Type('prop'),
- form="prop", seld=aetypes.Type('posn'), fr=aeobj_1)
- args['----'] = aeobj_2
- args["data"] = [x, y]
- _reply, args, attrs = finder.send('core', 'setd', args, attrs)
- if args.has_key('errn'):
- raise morefindertoolserror, aetools.decodeerror(args)
- if args.has_key('----'):
- return args['----']
-
-def _getwindowposition(folder_alias):
- """Get the size of a Finder window for folder, Specify by path."""
- finder = _getfinder()
- args = {}
- attrs = {}
- aeobj_0 = aetypes.ObjectSpecifier(want=aetypes.Type('cfol'),
- form="alis", seld=folder_alias, fr=None)
- aeobj_1 = aetypes.ObjectSpecifier(want=aetypes.Type('prop'),
- form="prop", seld=aetypes.Type('cwnd'), fr=aeobj_0)
- aeobj_2 = aetypes.ObjectSpecifier(want=aetypes.Type('prop'),
- form="prop", seld=aetypes.Type('ptsz'), fr=aeobj_1)
- args['----'] = aeobj_2
- _reply, args, attrs = finder.send('core', 'getd', args, attrs)
- if args.has_key('errn'):
- raise morefindertoolserror, aetools.decodeerror(args)
- if args.has_key('----'):
- return args['----']
-
-def icon(object, icondata=None):
- """icon sets the icon of object, if no icondata is given,
- icon will return an AE object with binary data for the current icon.
- If left untouched, this data can be used to paste the icon on another file.
- Development opportunity: get and set the data as PICT."""
- fss = macfs.FSSpec(object)
- object_alias = fss.NewAlias()
- if icondata == None:
- return _geticon(object_alias)
- return _seticon(object_alias, icondata)
-
-def _geticon(object_alias):
- """get the icondata for object. Binary data of some sort."""
- finder = _getfinder()
- args = {}
- attrs = {}
- aeobj_00 = aetypes.ObjectSpecifier(want=aetypes.Type('cobj'),
- form="alis", seld=object_alias, fr=None)
- aeobj_01 = aetypes.ObjectSpecifier(want=aetypes.Type('prop'),
- form="prop", seld=aetypes.Type('iimg'), fr=aeobj_00)
- args['----'] = aeobj_01
- _reply, args, attrs = finder.send("core", "getd", args, attrs)
- if args.has_key('errn'):
- raise morefindertoolserror, aetools.decodeerror(args)
- if args.has_key('----'):
- return args['----']
-
-def _seticon(object_alias, icondata):
- """set the icondata for object, formatted as produced by _geticon()"""
- finder = _getfinder()
- args = {}
- attrs = {}
- aeobj_00 = aetypes.ObjectSpecifier(want=aetypes.Type('cobj'),
- form="alis", seld=object_alias, fr=None)
- aeobj_01 = aetypes.ObjectSpecifier(want=aetypes.Type('prop'),
- form="prop", seld=aetypes.Type('iimg'), fr=aeobj_00)
- args['----'] = aeobj_01
- args["data"] = icondata
- _reply, args, attrs = finder.send("core", "setd", args, attrs)
- if args.has_key('errn'):
- raise morefindertoolserror, aetools.decodeerror(args)
- if args.has_key('----'):
- return args['----'].data
-
-
-#---------------------------------------------------
-# Volumes and servers.
-
-def mountvolume(volume, server=None, username=None, password=None):
- """mount a volume, local or on a server on AppleTalk.
- Note: mounting a ASIP server requires a different operation.
- server is the name of the server where the volume belongs
- username, password belong to a registered user of the volume."""
- finder = _getfinder()
- args = {}
- attrs = {}
- if password:
- args["PASS"] = password
- if username:
- args["USER"] = username
- if server:
- args["SRVR"] = server
- args['----'] = volume
- _reply, args, attrs = finder.send("aevt", "mvol", args, attrs)
- if args.has_key('errn'):
- raise morefindertoolserror, aetools.decodeerror(args)
- if args.has_key('----'):
- return args['----']
-
-def unmountvolume(volume):
- """unmount a volume that's on the desktop"""
- putaway(volume)
-
-def putaway(object):
- """puth the object away, whereever it came from."""
- finder = _getfinder()
- args = {}
- attrs = {}
- args['----'] = aetypes.ObjectSpecifier(want=aetypes.Type('cdis'), form="name", seld=object, fr=None)
- _reply, args, attrs = talker.send("fndr", "ptwy", args, attrs)
- if args.has_key('errn'):
- raise morefindertoolserror, aetools.decodeerror(args)
- if args.has_key('----'):
- return args['----']
-
-
-#---------------------------------------------------
-# Miscellaneous functions
-#
-
-def volumelevel(level):
- """set the audio output level, parameter between 0 (silent) and 7 (full blast)"""
- finder = _getfinder()
- args = {}
- attrs = {}
- if level < 0:
- level = 0
- elif level > 7:
- level = 7
- args['----'] = level
- _reply, args, attrs = finder.send("aevt", "stvl", args, attrs)
- if args.has_key('errn'):
- raise morefindertoolserror, aetools.decodeerror(args)
- if args.has_key('----'):
- return args['----']
-
-def OSversion():
- """return the version of the system software"""
- finder = _getfinder()
- args = {}
- attrs = {}
- aeobj_00 = aetypes.ObjectSpecifier(want=aetypes.Type('prop'), form="prop", seld=aetypes.Type('ver2'), fr=None)
- args['----'] = aeobj_00
- _reply, args, attrs = finder.send("core", "getd", args, attrs)
- if args.has_key('errn'):
- raise morefindertoolserror, aetools.decodeerror(args)
- if args.has_key('----'):
- return args['----']
-
-def filesharing():
- """return the current status of filesharing and whether it is starting up or not:
- -1 file sharing is off and not starting up
- 0 file sharing is off and starting up
- 1 file sharing is on"""
- status = -1
- finder = _getfinder()
- # see if it is on
- args = {}
- attrs = {}
- args['----'] = aetypes.ObjectSpecifier(want=aetypes.Type('prop'), form="prop", seld=aetypes.Type('fshr'), fr=None)
- _reply, args, attrs = finder.send("core", "getd", args, attrs)
- if args.has_key('errn'):
- raise morefindertoolserror, aetools.decodeerror(args)
- if args.has_key('----'):
- if args['----'] == 0:
- status = -1
- else:
- status = 1
- # is it starting up perchance?
- args = {}
- attrs = {}
- args['----'] = aetypes.ObjectSpecifier(want=aetypes.Type('prop'), form="prop", seld=aetypes.Type('fsup'), fr=None)
- _reply, args, attrs = finder.send("core", "getd", args, attrs)
- if args.has_key('errn'):
- raise morefindertoolserror, aetools.decodeerror(args)
- if args.has_key('----'):
- if args['----'] == 1:
- status = 0
- return status
-
-def movetotrash(path):
- """move the object to the trash"""
- fss = macfs.FSSpec(path)
- trashfolder = macfs.FSSpec(macfs.FindFolder(fss.as_tuple()[0], 'trsh', 0) + ("",)).as_pathname()
- findertools.move(path, trashfolder)
-
-def emptytrash():
- """empty the trash"""
- finder = _getfinder()
- args = {}
- attrs = {}
- args['----'] = aetypes.ObjectSpecifier(want=aetypes.Type('prop'), form="prop", seld=aetypes.Type('trsh'), fr=None)
- _reply, args, attrs = finder.send("fndr", "empt", args, attrs)
- if args.has_key('errn'):
- raise aetools.Error, aetools.decodeerror(args)
diff --git a/Mac/Contrib/morefindertools/morefindertoolstest.py b/Mac/Contrib/morefindertools/morefindertoolstest.py
deleted file mode 100644
index 179d25e..0000000
--- a/Mac/Contrib/morefindertools/morefindertoolstest.py
+++ /dev/null
@@ -1,85 +0,0 @@
-"""Some tests of various morefindertools functions.
-This does not test the functions that are already defined and tested in findertools.
-10 10 2000 erik@letterror.com
-"""
-
-import morefindertools
-import os.path
-import MacOS
-import random
-
-mft = morefindertools
-
-print '\nmorefindertools version %s\nTests coming upŠ' %mft.__version__
-
-# miscellaneous
-print '\tfilesharing on?', mft.filesharing() # is file sharing on, off, starting up?
-print '\tOS version', mft.OSversion() # the version of the system software
-
-# set the soundvolume in a simple way
-print '\tSystem beep volume'
-for i in range(0, 7):
- mft.volumelevel(i)
- MacOS.SysBeep()
-
-# Finder's windows, file location, file attributes
-f = __file__ # get a path name that is innocent to play with and always works
-mft.reveal(f) # reveal this file in a Finder window
-mft.select(f) # select this file
-
-base, file = os.path.split(f)
-mft.closewindow(base) # close the window this file is in (opened by reveal)
-mft.openwindow(base) # open it again
-mft.windowview(base, 1) # set the view by list
-
-mft.label(f, 2) # set the label of this file to something orange
-print '\tlabel', mft.label(f) # get the label of this file
-
-# the file location only works in a window with icon view!
-print 'Random locations for an icon'
-mft.windowview(base, 0) # set the view by icon
-mft.windowsize(base, (600, 600))
-for i in range(50):
- mft.location(f, (random.randint(10, 590), random.randint(10, 590)))
-
-mft.windowsize(base, (200, 400))
-mft.windowview(base, 1) # set the view by icon
-
-orgpos = mft.windowposition(base)
-print 'Animated window location'
-for i in range(10):
- pos = (100+i*10, 100+i*10)
- mft.windowposition(base, pos)
- print '\twindow position', pos
-mft.windowposition(base, orgpos) # park it where it was beforeŠ
-
-print 'Put a comment in file', f, ':'
-print '\t', mft.comment(f) # print the Finder comment this file has
-s = 'This is a comment no one reads!'
-mft.comment(f, s) # set the Finder comment
-
-#
-#
-# the following code does not work on MacOS versions older than MacOS 9.
-#
-#
-
-if 0:
- print 'MacOS9 or better specific functions'
- # processes
- pr = mft.processes() # return a list of tuples with (active_processname, creatorcode)
- print 'Return a list of current active processes:'
- for p in pr:
- print '\t', p
-
- # get attributes of the first process in the list
- print 'Attributes of the first process in the list:'
- pinfo = mft.processinfo(pr[0][0])
- print '\t', pr[0][0]
- print '\t\tmemory partition', pinfo.partition # the memory allocated to this process
- print '\t\tmemory used', pinfo.used # the memory actuall used by this process
- print '\t\tis visible', pinfo.visible # is the process visible to the user
- print '\t\tis frontmost', pinfo.frontmost # is the process the front most one?
- print '\t\thas scripting', pinfo.hasscripting # is the process scriptable?
- print '\t\taccepts high level events', pinfo.accepthighlevel # does the process accept high level appleevents?
-print 'Done.' \ No newline at end of file
diff --git a/Mac/Contrib/morefindertools/readme.txt b/Mac/Contrib/morefindertools/readme.txt
deleted file mode 100644
index 04b31ab..0000000
--- a/Mac/Contrib/morefindertools/readme.txt
+++ /dev/null
@@ -1,4 +0,0 @@
-The morefindertools module is an extension to findertools, donated by Erik
-van Blokland, erik@letterror.com. The reason it is included in Contrib in stead
-of incorporated in findertools is lack of time before the release, it will be
-incorporated in the next release.
diff --git a/Mac/Lib/findertools.py b/Mac/Lib/findertools.py
index 45f3e9e8..dde329a 100644
--- a/Mac/Lib/findertools.py
+++ b/Mac/Lib/findertools.py
@@ -1,15 +1,35 @@
-"""Utility routines depending on the finder."""
+"""Utility routines depending on the finder,
+a combination of code by Jack Jansen and erik@letterror.com.
+Most events have been captured from
+Lasso Capture AE and than translated to python code.
+
+IMPORTANT
+Note that the processes() function returns different values
+depending on the OS version it is running on. On MacOS 9
+the Finder returns the process *names* which can then be
+used to find out more about them. On MacOS 8.6 and earlier
+the Finder returns a code which does not seem to work.
+So bottom line: the processes() stuff does not work on < MacOS9
+
+Mostly written by erik@letterror.com
+"""
import Finder
import AppleEvents
import aetools
import MacOS
import sys
import macfs
+import aetypes
+from types import *
+
+__version__ = '1.1'
+Error = 'findertools.Error'
_finder_talker = None
def _getfinder():
+ """returns basic (recyclable) Finder AE interface object"""
global _finder_talker
if not _finder_talker:
_finder_talker = Finder.Finder()
@@ -67,9 +87,615 @@ def restart():
"""Restart the mac"""
finder = _getfinder()
finder.restart()
+
+
+#---------------------------------------------------
+# Additional findertools
+#
+
+def reveal(file):
+ """Reveal a file in the finder. Specify file by name or fsspec."""
+ finder = _getfinder()
+ fss = macfs.FSSpec(file)
+ file_alias = fss.NewAlias()
+ return finder.reveal(file_alias)
+
+def select(file):
+ """select a file in the finder. Specify file by name or fsspec."""
+ finder = _getfinder()
+ fss = macfs.FSSpec(file)
+ file_alias = fss.NewAlias()
+ return finder.select(file_alias)
+
+def update(file):
+ """Update the display of the specified object(s) to match
+ their on-disk representation. Specify file by name or fsspec."""
+ finder = _getfinder()
+ fss = macfs.FSSpec(file)
+ file_alias = fss.NewAlias()
+ return finder.update(file_alias)
+
+
+#---------------------------------------------------
+# More findertools
+#
+
+def comment(object, comment=None):
+ """comment: get or set the Finder-comment of the item, displayed in the łGet Info˛ window."""
+ object = macfs.FSSpec(object)
+ fss = macfs.FSSpec(object)
+ object_alias = fss.NewAlias()
+ if comment == None:
+ return _getcomment(object_alias)
+ else:
+ return _setcomment(object_alias, comment)
+
+def _setcomment(object_alias, comment):
+ finder = _getfinder()
+ args = {}
+ attrs = {}
+ aeobj_00 = aetypes.ObjectSpecifier(want=aetypes.Type('cobj'), form="alis", seld=object_alias, fr=None)
+ aeobj_01 = aetypes.ObjectSpecifier(want=aetypes.Type('prop'), form="prop", seld=aetypes.Type('comt'), fr=aeobj_00)
+ args['----'] = aeobj_01
+ args["data"] = comment
+ _reply, args, attrs = finder.send("core", "setd", args, attrs)
+ if args.has_key('errn'):
+ raise Error, aetools.decodeerror(args)
+ if args.has_key('----'):
+ return args['----']
+
+def _getcomment(object_alias):
+ finder = _getfinder()
+ args = {}
+ attrs = {}
+ aeobj_00 = aetypes.ObjectSpecifier(want=aetypes.Type('cobj'), form="alis", seld=object_alias, fr=None)
+ aeobj_01 = aetypes.ObjectSpecifier(want=aetypes.Type('prop'), form="prop", seld=aetypes.Type('comt'), fr=aeobj_00)
+ args['----'] = aeobj_01
+ _reply, args, attrs = finder.send("core", "getd", args, attrs)
+ if args.has_key('errn'):
+ raise Error, aetools.decodeerror(args)
+ if args.has_key('----'):
+ return args['----']
+
+
+#---------------------------------------------------
+# Get information about current processes in the Finder.
+
+def processes():
+ """processes returns a list of all active processes running on this computer and their creators."""
+ finder = _getfinder()
+ args = {}
+ attrs = {}
+ processnames = []
+ processnumbers = []
+ creators = []
+ partitions = []
+ used = []
+ ## get the processnames or else the processnumbers
+ args['----'] = aetypes.ObjectSpecifier(want=aetypes.Type('prcs'), form="indx", seld=aetypes.Unknown('abso', "all "), fr=None)
+ _reply, args, attrs = finder.send('core', 'getd', args, attrs)
+ if args.has_key('errn'):
+ raise Error, aetools.decodeerror(args)
+ p = []
+ if args.has_key('----'):
+ p = args['----']
+ for proc in p:
+ if hasattr(proc, 'seld'):
+ # it has a real name
+ processnames.append(proc.seld)
+ elif hasattr(proc, 'type'):
+ if proc.type == "psn ":
+ # it has a process number
+ processnumbers.append(proc.data)
+ ## get the creators
+ args = {}
+ attrs = {}
+ aeobj_0 = aetypes.ObjectSpecifier(want=aetypes.Type('prcs'), form="indx", seld=aetypes.Unknown('abso', "all "), fr=None)
+ args['----'] = aetypes.ObjectSpecifier(want=aetypes.Type('prop'), form="prop", seld=aetypes.Type('fcrt'), fr=aeobj_0)
+ _reply, args, attrs = finder.send('core', 'getd', args, attrs)
+ if args.has_key('errn'):
+ raise Error, aetools.decodeerror(_arg)
+ if args.has_key('----'):
+ p = args['----']
+ creators = p[:]
+ ## concatenate in one dict
+ result = []
+ if len(processnames) > len(processnumbers):
+ data = processnames
+ else:
+ data = processnumbers
+ for i in range(len(creators)):
+ result.append((data[i], creators[i]))
+ return result
+
+class _process:
+ pass
+
+def isactiveprocess(processname):
+ """Check of processname is active. MacOS9"""
+ all = processes()
+ ok = 0
+ for n, c in all:
+ if n == processname:
+ return 1
+ return 0
+
+def processinfo(processname):
+ """Return an object with all process properties as attributes for processname. MacOS9"""
+ p = _process()
+
+ if processname == "Finder":
+ p.partition = None
+ p.used = None
+ else:
+ p.partition = _processproperty(processname, 'appt')
+ p.used = _processproperty(processname, 'pusd')
+ p.visible = _processproperty(processname, 'pvis') #Is the process' layer visible?
+ p.frontmost = _processproperty(processname, 'pisf') #Is the process the frontmost process?
+ p.file = _processproperty(processname, 'file') #the file from which the process was launched
+ p.filetype = _processproperty(processname, 'asty') #the OSType of the file type of the process
+ p.creatortype = _processproperty(processname, 'fcrt') #the OSType of the creator of the process (the signature)
+ p.accepthighlevel = _processproperty(processname, 'revt') #Is the process high-level event aware (accepts open application, open document, print document, and quit)?
+ p.hasscripting = _processproperty(processname, 'hscr') #Does the process have a scripting terminology, i.e., can it be scripted?
+ return p
+
+def _processproperty(processname, property):
+ """return the partition size and memory used for processname"""
+ finder = _getfinder()
+ args = {}
+ attrs = {}
+ aeobj_00 = aetypes.ObjectSpecifier(want=aetypes.Type('prcs'), form="name", seld=processname, fr=None)
+ aeobj_01 = aetypes.ObjectSpecifier(want=aetypes.Type('prop'), form="prop", seld=aetypes.Type(property), fr=aeobj_00)
+ args['----'] = aeobj_01
+ _reply, args, attrs = finder.send("core", "getd", args, attrs)
+ if args.has_key('errn'):
+ raise Error, aetools.decodeerror(args)
+ if args.has_key('----'):
+ return args['----']
+
+
+#---------------------------------------------------
+# Mess around with Finder windows.
+
+def openwindow(object):
+ """Open a Finder window for object, Specify object by name or fsspec."""
+ finder = _getfinder()
+ object = macfs.FSSpec(object)
+ fss = macfs.FSSpec(object)
+ object_alias = fss.NewAlias()
+ args = {}
+ attrs = {}
+ _code = 'aevt'
+ _subcode = 'odoc'
+ aeobj_0 = aetypes.ObjectSpecifier(want=aetypes.Type('cfol'), form="alis", seld=object_alias, fr=None)
+ args['----'] = aeobj_0
+ _reply, args, attrs = finder.send(_code, _subcode, args, attrs)
+ if args.has_key('errn'):
+ raise Error, aetools.decodeerror(args)
+
+def closewindow(object):
+ """Close a Finder window for folder, Specify by path."""
+ finder = _getfinder()
+ fss = macfs.FSSpec(object)
+ object_alias = fss.NewAlias()
+ args = {}
+ attrs = {}
+ _code = 'core'
+ _subcode = 'clos'
+ aeobj_0 = aetypes.ObjectSpecifier(want=aetypes.Type('cfol'), form="alis", seld=object_alias, fr=None)
+ args['----'] = aeobj_0
+ _reply, args, attrs = finder.send(_code, _subcode, args, attrs)
+ if args.has_key('errn'):
+ raise Error, aetools.decodeerror(args)
+
+def location(object, pos=None):
+ """Set the position of a Finder window for folder to pos=(w, h). Specify file by name or fsspec.
+ If pos=None, location will return the current position of the object."""
+ fss = macfs.FSSpec(object)
+ object_alias = fss.NewAlias()
+ if not pos:
+ return _getlocation(object_alias)
+ return _setlocation(object_alias, pos)
+
+def _setlocation(object_alias, (x, y)):
+ """_setlocation: Set the location of the icon for the object."""
+ finder = _getfinder()
+ args = {}
+ attrs = {}
+ aeobj_00 = aetypes.ObjectSpecifier(want=aetypes.Type('cfol'), form="alis", seld=object_alias, fr=None)
+ aeobj_01 = aetypes.ObjectSpecifier(want=aetypes.Type('prop'), form="prop", seld=aetypes.Type('posn'), fr=aeobj_00)
+ args['----'] = aeobj_01
+ args["data"] = [x, y]
+ _reply, args, attrs = finder.send("core", "setd", args, attrs)
+ if args.has_key('errn'):
+ raise Error, aetools.decodeerror(args)
+ return (x,y)
+
+def _getlocation(object_alias):
+ """_getlocation: get the location of the icon for the object."""
+ finder = _getfinder()
+ args = {}
+ attrs = {}
+ aeobj_00 = aetypes.ObjectSpecifier(want=aetypes.Type('cfol'), form="alis", seld=object_alias, fr=None)
+ aeobj_01 = aetypes.ObjectSpecifier(want=aetypes.Type('prop'), form="prop", seld=aetypes.Type('posn'), fr=aeobj_00)
+ args['----'] = aeobj_01
+ _reply, args, attrs = finder.send("core", "getd", args, attrs)
+ if args.has_key('errn'):
+ raise Error, aetools.decodeerror(args)
+ if args.has_key('----'):
+ pos = args['----']
+ return pos.h, pos.v
+
+def label(object, index=None):
+ """label: set or get the label of the item. Specify file by name or fsspec."""
+ fss = macfs.FSSpec(object)
+ object_alias = fss.NewAlias()
+ if index == None:
+ return _getlabel(object_alias)
+ if index < 0 or index > 7:
+ index = 0
+ return _setlabel(object_alias, index)
+
+def _getlabel(object_alias):
+ """label: Get the label for the object."""
+ finder = _getfinder()
+ args = {}
+ attrs = {}
+ aeobj_00 = aetypes.ObjectSpecifier(want=aetypes.Type('cobj'), form="alis", seld=object_alias, fr=None)
+ aeobj_01 = aetypes.ObjectSpecifier(want=aetypes.Type('prop'), form="prop", seld=aetypes.Type('labi'), fr=aeobj_00)
+ args['----'] = aeobj_01
+ _reply, args, attrs = finder.send("core", "getd", args, attrs)
+ if args.has_key('errn'):
+ raise Error, aetools.decodeerror(args)
+ if args.has_key('----'):
+ return args['----']
+
+def _setlabel(object_alias, index):
+ """label: Set the label for the object."""
+ finder = _getfinder()
+ args = {}
+ attrs = {}
+ _code = 'core'
+ _subcode = 'setd'
+ aeobj_0 = aetypes.ObjectSpecifier(want=aetypes.Type('prop'),
+ form="alis", seld=object_alias, fr=None)
+ aeobj_1 = aetypes.ObjectSpecifier(want=aetypes.Type('prop'),
+ form="prop", seld=aetypes.Type('labi'), fr=aeobj_0)
+ args['----'] = aeobj_1
+ args["data"] = index
+ _reply, args, attrs = finder.send(_code, _subcode, args, attrs)
+ if args.has_key('errn'):
+ raise Error, aetools.decodeerror(args)
+ return index
+
+def windowview(folder, view=None):
+ """windowview: Set the view of the window for the folder. Specify file by name or fsspec.
+ 0 = by icon (default)
+ 1 = by name
+ 2 = by button
+ """
+ fss = macfs.FSSpec(folder)
+ folder_alias = fss.NewAlias()
+ if view == None:
+ return _getwindowview(folder_alias)
+ return _setwindowview(folder_alias, view)
+def _setwindowview(folder_alias, view=0):
+ """set the windowview"""
+ attrs = {}
+ args = {}
+ if view == 1:
+ _v = aetypes.Type('pnam')
+ elif view == 2:
+ _v = aetypes.Type('lgbu')
+ else:
+ _v = aetypes.Type('iimg')
+ finder = _getfinder()
+ aeobj_0 = aetypes.ObjectSpecifier(want = aetypes.Type('cfol'),
+ form = 'alis', seld = folder_alias, fr=None)
+ aeobj_1 = aetypes.ObjectSpecifier(want = aetypes.Type('prop'),
+ form = 'prop', seld = aetypes.Type('cwnd'), fr=aeobj_0)
+ aeobj_2 = aetypes.ObjectSpecifier(want = aetypes.Type('prop'),
+ form = 'prop', seld = aetypes.Type('pvew'), fr=aeobj_1)
+ aeobj_3 = aetypes.ObjectSpecifier(want = aetypes.Type('prop'),
+ form = 'prop', seld = _v, fr=None)
+ _code = 'core'
+ _subcode = 'setd'
+ args['----'] = aeobj_2
+ args['data'] = aeobj_3
+ _reply, args, attrs = finder.send(_code, _subcode, args, attrs)
+ if args.has_key('errn'):
+ raise Error, aetools.decodeerror(args)
+ if args.has_key('----'):
+ return args['----']
+
+def _getwindowview(folder_alias):
+ """get the windowview"""
+ attrs = {}
+ args = {}
+ finder = _getfinder()
+ args = {}
+ attrs = {}
+ aeobj_00 = aetypes.ObjectSpecifier(want=aetypes.Type('cfol'), form="alis", seld=folder_alias, fr=None)
+ aeobj_01 = aetypes.ObjectSpecifier(want=aetypes.Type('prop'), form="prop", seld=aetypes.Type('cwnd'), fr=aeobj_00)
+ aeobj_02 = aetypes.ObjectSpecifier(want=aetypes.Type('prop'), form="prop", seld=aetypes.Type('pvew'), fr=aeobj_01)
+ args['----'] = aeobj_02
+ _reply, args, attrs = finder.send("core", "getd", args, attrs)
+ if args.has_key('errn'):
+ raise Error, aetools.decodeerror(args)
+ views = {'iimg':0, 'pnam':1, 'lgbu':2}
+ if args.has_key('----'):
+ return views[args['----'].enum]
+
+def windowsize(folder, size=None):
+ """Set the size of a Finder window for folder to size=(w, h), Specify by path.
+ If size=None, windowsize will return the current size of the window.
+ Specify file by name or fsspec.
+ """
+ fss = macfs.FSSpec(folder)
+ folder_alias = fss.NewAlias()
+ openwindow(fss)
+ if not size:
+ return _getwindowsize(folder_alias)
+ return _setwindowsize(folder_alias, size)
+
+def _setwindowsize(folder_alias, (w, h)):
+ """Set the size of a Finder window for folder to (w, h)"""
+ finder = _getfinder()
+ args = {}
+ attrs = {}
+ _code = 'core'
+ _subcode = 'setd'
+ aevar00 = [w, h]
+ aeobj_0 = aetypes.ObjectSpecifier(want=aetypes.Type('cfol'),
+ form="alis", seld=folder_alias, fr=None)
+ aeobj_1 = aetypes.ObjectSpecifier(want=aetypes.Type('prop'),
+ form="prop", seld=aetypes.Type('cwnd'), fr=aeobj_0)
+ aeobj_2 = aetypes.ObjectSpecifier(want=aetypes.Type('prop'),
+ form="prop", seld=aetypes.Type('ptsz'), fr=aeobj_1)
+ args['----'] = aeobj_2
+ args["data"] = aevar00
+ _reply, args, attrs = finder.send(_code, _subcode, args, attrs)
+ if args.has_key('errn'):
+ raise Error, aetools.decodeerror(args)
+ return (w, h)
+
+def _getwindowsize(folder_alias):
+ """Set the size of a Finder window for folder to (w, h)"""
+ finder = _getfinder()
+ args = {}
+ attrs = {}
+ aeobj_0 = aetypes.ObjectSpecifier(want=aetypes.Type('cfol'),
+ form="alis", seld=folder_alias, fr=None)
+ aeobj_1 = aetypes.ObjectSpecifier(want=aetypes.Type('prop'),
+ form="prop", seld=aetypes.Type('cwnd'), fr=aeobj_0)
+ aeobj_2 = aetypes.ObjectSpecifier(want=aetypes.Type('prop'),
+ form="prop", seld=aetypes.Type('posn'), fr=aeobj_1)
+ args['----'] = aeobj_2
+ _reply, args, attrs = finder.send('core', 'getd', args, attrs)
+ if args.has_key('errn'):
+ raise Error, aetools.decodeerror(args)
+ if args.has_key('----'):
+ return args['----']
+
+def windowposition(folder, pos=None):
+ """Set the position of a Finder window for folder to pos=(w, h)."""
+ fss = macfs.FSSpec(folder)
+ folder_alias = fss.NewAlias()
+ openwindow(fss)
+ if not pos:
+ return _getwindowposition(folder_alias)
+ if type(pos) == InstanceType:
+ # pos might be a QDPoint object as returned by _getwindowposition
+ pos = (pos.h, pos.v)
+ return _setwindowposition(folder_alias, pos)
+
+def _setwindowposition(folder_alias, (x, y)):
+ """Set the size of a Finder window for folder to (w, h)."""
+ finder = _getfinder()
+ args = {}
+ attrs = {}
+ aeobj_0 = aetypes.ObjectSpecifier(want=aetypes.Type('cfol'),
+ form="alis", seld=folder_alias, fr=None)
+ aeobj_1 = aetypes.ObjectSpecifier(want=aetypes.Type('prop'),
+ form="prop", seld=aetypes.Type('cwnd'), fr=aeobj_0)
+ aeobj_2 = aetypes.ObjectSpecifier(want=aetypes.Type('prop'),
+ form="prop", seld=aetypes.Type('posn'), fr=aeobj_1)
+ args['----'] = aeobj_2
+ args["data"] = [x, y]
+ _reply, args, attrs = finder.send('core', 'setd', args, attrs)
+ if args.has_key('errn'):
+ raise Error, aetools.decodeerror(args)
+ if args.has_key('----'):
+ return args['----']
+
+def _getwindowposition(folder_alias):
+ """Get the size of a Finder window for folder, Specify by path."""
+ finder = _getfinder()
+ args = {}
+ attrs = {}
+ aeobj_0 = aetypes.ObjectSpecifier(want=aetypes.Type('cfol'),
+ form="alis", seld=folder_alias, fr=None)
+ aeobj_1 = aetypes.ObjectSpecifier(want=aetypes.Type('prop'),
+ form="prop", seld=aetypes.Type('cwnd'), fr=aeobj_0)
+ aeobj_2 = aetypes.ObjectSpecifier(want=aetypes.Type('prop'),
+ form="prop", seld=aetypes.Type('ptsz'), fr=aeobj_1)
+ args['----'] = aeobj_2
+ _reply, args, attrs = finder.send('core', 'getd', args, attrs)
+ if args.has_key('errn'):
+ raise Error, aetools.decodeerror(args)
+ if args.has_key('----'):
+ return args['----']
+
+def icon(object, icondata=None):
+ """icon sets the icon of object, if no icondata is given,
+ icon will return an AE object with binary data for the current icon.
+ If left untouched, this data can be used to paste the icon on another file.
+ Development opportunity: get and set the data as PICT."""
+ fss = macfs.FSSpec(object)
+ object_alias = fss.NewAlias()
+ if icondata == None:
+ return _geticon(object_alias)
+ return _seticon(object_alias, icondata)
+
+def _geticon(object_alias):
+ """get the icondata for object. Binary data of some sort."""
+ finder = _getfinder()
+ args = {}
+ attrs = {}
+ aeobj_00 = aetypes.ObjectSpecifier(want=aetypes.Type('cobj'),
+ form="alis", seld=object_alias, fr=None)
+ aeobj_01 = aetypes.ObjectSpecifier(want=aetypes.Type('prop'),
+ form="prop", seld=aetypes.Type('iimg'), fr=aeobj_00)
+ args['----'] = aeobj_01
+ _reply, args, attrs = finder.send("core", "getd", args, attrs)
+ if args.has_key('errn'):
+ raise Error, aetools.decodeerror(args)
+ if args.has_key('----'):
+ return args['----']
+
+def _seticon(object_alias, icondata):
+ """set the icondata for object, formatted as produced by _geticon()"""
+ finder = _getfinder()
+ args = {}
+ attrs = {}
+ aeobj_00 = aetypes.ObjectSpecifier(want=aetypes.Type('cobj'),
+ form="alis", seld=object_alias, fr=None)
+ aeobj_01 = aetypes.ObjectSpecifier(want=aetypes.Type('prop'),
+ form="prop", seld=aetypes.Type('iimg'), fr=aeobj_00)
+ args['----'] = aeobj_01
+ args["data"] = icondata
+ _reply, args, attrs = finder.send("core", "setd", args, attrs)
+ if args.has_key('errn'):
+ raise Error, aetools.decodeerror(args)
+ if args.has_key('----'):
+ return args['----'].data
+
+
+#---------------------------------------------------
+# Volumes and servers.
+
+def mountvolume(volume, server=None, username=None, password=None):
+ """mount a volume, local or on a server on AppleTalk.
+ Note: mounting a ASIP server requires a different operation.
+ server is the name of the server where the volume belongs
+ username, password belong to a registered user of the volume."""
+ finder = _getfinder()
+ args = {}
+ attrs = {}
+ if password:
+ args["PASS"] = password
+ if username:
+ args["USER"] = username
+ if server:
+ args["SRVR"] = server
+ args['----'] = volume
+ _reply, args, attrs = finder.send("aevt", "mvol", args, attrs)
+ if args.has_key('errn'):
+ raise Error, aetools.decodeerror(args)
+ if args.has_key('----'):
+ return args['----']
+
+def unmountvolume(volume):
+ """unmount a volume that's on the desktop"""
+ putaway(volume)
+
+def putaway(object):
+ """puth the object away, whereever it came from."""
+ finder = _getfinder()
+ args = {}
+ attrs = {}
+ args['----'] = aetypes.ObjectSpecifier(want=aetypes.Type('cdis'), form="name", seld=object, fr=None)
+ _reply, args, attrs = talker.send("fndr", "ptwy", args, attrs)
+ if args.has_key('errn'):
+ raise Error, aetools.decodeerror(args)
+ if args.has_key('----'):
+ return args['----']
+
-def main():
+#---------------------------------------------------
+# Miscellaneous functions
+#
+
+def volumelevel(level):
+ """set the audio output level, parameter between 0 (silent) and 7 (full blast)"""
+ finder = _getfinder()
+ args = {}
+ attrs = {}
+ if level < 0:
+ level = 0
+ elif level > 7:
+ level = 7
+ args['----'] = level
+ _reply, args, attrs = finder.send("aevt", "stvl", args, attrs)
+ if args.has_key('errn'):
+ raise Error, aetools.decodeerror(args)
+ if args.has_key('----'):
+ return args['----']
+
+def OSversion():
+ """return the version of the system software"""
+ finder = _getfinder()
+ args = {}
+ attrs = {}
+ aeobj_00 = aetypes.ObjectSpecifier(want=aetypes.Type('prop'), form="prop", seld=aetypes.Type('ver2'), fr=None)
+ args['----'] = aeobj_00
+ _reply, args, attrs = finder.send("core", "getd", args, attrs)
+ if args.has_key('errn'):
+ raise Error, aetools.decodeerror(args)
+ if args.has_key('----'):
+ return args['----']
+
+def filesharing():
+ """return the current status of filesharing and whether it is starting up or not:
+ -1 file sharing is off and not starting up
+ 0 file sharing is off and starting up
+ 1 file sharing is on"""
+ status = -1
+ finder = _getfinder()
+ # see if it is on
+ args = {}
+ attrs = {}
+ args['----'] = aetypes.ObjectSpecifier(want=aetypes.Type('prop'), form="prop", seld=aetypes.Type('fshr'), fr=None)
+ _reply, args, attrs = finder.send("core", "getd", args, attrs)
+ if args.has_key('errn'):
+ raise Error, aetools.decodeerror(args)
+ if args.has_key('----'):
+ if args['----'] == 0:
+ status = -1
+ else:
+ status = 1
+ # is it starting up perchance?
+ args = {}
+ attrs = {}
+ args['----'] = aetypes.ObjectSpecifier(want=aetypes.Type('prop'), form="prop", seld=aetypes.Type('fsup'), fr=None)
+ _reply, args, attrs = finder.send("core", "getd", args, attrs)
+ if args.has_key('errn'):
+ raise Error, aetools.decodeerror(args)
+ if args.has_key('----'):
+ if args['----'] == 1:
+ status = 0
+ return status
+
+def movetotrash(path):
+ """move the object to the trash"""
+ fss = macfs.FSSpec(path)
+ trashfolder = macfs.FSSpec(macfs.FindFolder(fss.as_tuple()[0], 'trsh', 0) + ("",)).as_pathname()
+ findertools.move(path, trashfolder)
+
+def emptytrash():
+ """empty the trash"""
+ finder = _getfinder()
+ args = {}
+ attrs = {}
+ args['----'] = aetypes.ObjectSpecifier(want=aetypes.Type('prop'), form="prop", seld=aetypes.Type('trsh'), fr=None)
+ _reply, args, attrs = finder.send("fndr", "empt", args, attrs)
+ if args.has_key('errn'):
+ raise aetools.Error, aetools.decodeerror(args)
+
+
+def _test():
+ print 'Original findertools functionality test...'
print 'Testing launch...'
fss, ok = macfs.PromptGetFile('File to launch:')
if ok:
@@ -128,7 +754,80 @@ def main():
print 'Result:', result
print 'Press return-',
sys.stdin.readline()
-
+
+def _test2():
+ print '\nmorefindertools version %s\nTests coming upŠ' %__version__
+ import os
+ import random
+
+ # miscellaneous
+ print '\tfilesharing on?', filesharing() # is file sharing on, off, starting up?
+ print '\tOS version', OSversion() # the version of the system software
+
+ # set the soundvolume in a simple way
+ print '\tSystem beep volume'
+ for i in range(0, 7):
+ volumelevel(i)
+ MacOS.SysBeep()
+
+ # Finder's windows, file location, file attributes
+ open("@findertoolstest", "w")
+ f = macfs.FSSpec("@findertoolstest").as_pathname()
+ reveal(f) # reveal this file in a Finder window
+ select(f) # select this file
+
+ base, file = os.path.split(f)
+ closewindow(base) # close the window this file is in (opened by reveal)
+ openwindow(base) # open it again
+ windowview(base, 1) # set the view by list
+
+ label(f, 2) # set the label of this file to something orange
+ print '\tlabel', label(f) # get the label of this file
+
+ # the file location only works in a window with icon view!
+ print 'Random locations for an icon'
+ windowview(base, 0) # set the view by icon
+ windowsize(base, (600, 600))
+ for i in range(50):
+ location(f, (random.randint(10, 590), random.randint(10, 590)))
+
+ windowsize(base, (200, 400))
+ windowview(base, 1) # set the view by icon
+
+ orgpos = windowposition(base)
+ print 'Animated window location'
+ for i in range(10):
+ pos = (100+i*10, 100+i*10)
+ windowposition(base, pos)
+ print '\twindow position', pos
+ windowposition(base, orgpos) # park it where it was beforeŠ
+
+ print 'Put a comment in file', f, ':'
+ print '\t', comment(f) # print the Finder comment this file has
+ s = 'This is a comment no one reads!'
+ comment(f, s) # set the Finder comment
+
+def _test3():
+ print 'MacOS9 or better specific functions'
+ # processes
+ pr = processes() # return a list of tuples with (active_processname, creatorcode)
+ print 'Return a list of current active processes:'
+ for p in pr:
+ print '\t', p
+
+ # get attributes of the first process in the list
+ print 'Attributes of the first process in the list:'
+ pinfo = processinfo(pr[0][0])
+ print '\t', pr[0][0]
+ print '\t\tmemory partition', pinfo.partition # the memory allocated to this process
+ print '\t\tmemory used', pinfo.used # the memory actuall used by this process
+ print '\t\tis visible', pinfo.visible # is the process visible to the user
+ print '\t\tis frontmost', pinfo.frontmost # is the process the front most one?
+ print '\t\thas scripting', pinfo.hasscripting # is the process scriptable?
+ print '\t\taccepts high level events', pinfo.accepthighlevel # does the process accept high level appleevents?
+
if __name__ == '__main__':
- main()
+ _test()
+ _test2()
+ _test3()