From 14126df562affe474a6a9d065cb37a603908faf6 Mon Sep 17 00:00:00 2001 From: Jack Jansen Date: Thu, 12 Oct 2000 21:20:11 +0000 Subject: Extension to Findertools by Erik van Blokland. In Contrib because I don't have the time to merge it into findertools before the distribution. --- Mac/Contrib/morefindertools/morefindertools.py | 708 +++++++++++++++++++++ Mac/Contrib/morefindertools/morefindertoolstest.py | 85 +++ Mac/Contrib/morefindertools/readme.txt | 4 + 3 files changed, 797 insertions(+) create mode 100644 Mac/Contrib/morefindertools/morefindertools.py create mode 100644 Mac/Contrib/morefindertools/morefindertoolstest.py create mode 100644 Mac/Contrib/morefindertools/readme.txt diff --git a/Mac/Contrib/morefindertools/morefindertools.py b/Mac/Contrib/morefindertools/morefindertools.py new file mode 100644 index 0000000..8616e5a --- /dev/null +++ b/Mac/Contrib/morefindertools/morefindertools.py @@ -0,0 +1,708 @@ +"""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 new file mode 100644 index 0000000..179d25e --- /dev/null +++ b/Mac/Contrib/morefindertools/morefindertoolstest.py @@ -0,0 +1,85 @@ +"""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 new file mode 100644 index 0000000..04b31ab --- /dev/null +++ b/Mac/Contrib/morefindertools/readme.txt @@ -0,0 +1,4 @@ +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. -- cgit v0.12