diff --git a/Mac/Contrib/morefindertools/morefindertools.py b/Mac/Contrib/morefindertools/morefindertools.py deleted file mode 100644 index 8616e5a3e71..00000000000 --- 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 179d25e3d5f..00000000000 --- 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 04b31ab4b1f..00000000000 --- 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 45f3e9e8797..dde329abfba 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() - -def main(): + +#--------------------------------------------------- +# 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['----'] + + +#--------------------------------------------------- +# 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() - -if __name__ == '__main__': - main() + +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__': + _test() + _test2() + _test3()