def mkalias(src, dst, relative=None): """Create a finder alias""" srcfsr = File.FSRef(src) # The next line will fail under unix-Python if the destination # doesn't exist yet. We should change this code to be fsref-based. dstdir, dstname = os.path.split(dst) if not dstdir: dstdir = os.curdir dstdirfsr = File.FSRef(dstdir) if relative: relativefsr = File.FSRef(relative) # ik mag er geen None in stoppen :-( alias = File.FSNewAlias(relativefsr, srcfsr) else: alias = srcfsr.FSNewAliasMinimal() dstfsr, dstfss = Res.FSCreateResourceFile(dstdirfsr, unicode(dstname), File.FSGetResourceForkName()) h = Res.FSOpenResourceFile(dstfsr, File.FSGetResourceForkName(), 3) resource = Res.Resource(alias.data) resource.AddResource('alis', 0, '') Res.CloseResFile(h) dstfinfo = dstfss.FSpGetFInfo() dstfinfo.Flags = dstfinfo.Flags | 0x8000 # Alias flag dstfss.FSpSetFInfo(dstfinfo)
def touched_ae(dst): pardir = os.path.split(dst)[0] if not pardir: pardir = os.curdir import Finder f = Finder.Finder() f.update(File.FSRef(pardir))
def touched_ae(dst): """Tell the finder a file has changed""" pardir = os.path.split(dst)[0] if not pardir: pardir = os.curdir import Finder f = Finder.Finder() f.update(File.FSRef(pardir))
def mkalias(src, dst, relative=None): srcfsr = File.FSRef(src) dstdir, dstname = os.path.split(dst) if not dstdir: dstdir = os.curdir dstdirfsr = File.FSRef(dstdir) if relative: relativefsr = File.FSRef(relative) alias = File.FSNewAlias(relativefsr, srcfsr) else: alias = srcfsr.FSNewAliasMinimal() dstfsr, dstfss = Res.FSCreateResourceFile(dstdirfsr, unicode(dstname), File.FSGetResourceForkName()) h = Res.FSOpenResourceFile(dstfsr, File.FSGetResourceForkName(), 3) resource = Res.Resource(alias.data) resource.AddResource('alis', 0, '') Res.CloseResFile(h) dstfinfo = dstfss.FSpGetFInfo() dstfinfo.Flags = dstfinfo.Flags | 32768 dstfss.FSpSetFInfo(dstfinfo)
def copy(src, dst, createpath=0, copydates=1, forcetype=None): """Copy a file, including finder info, resource fork, etc""" src = File.pathname(src) dst = File.pathname(dst) if createpath: mkdirs(os.path.split(dst)[0]) ifp = open(src, 'rb') ofp = open(dst, 'wb') d = ifp.read(BUFSIZ) while d: ofp.write(d) d = ifp.read(BUFSIZ) ifp.close() ofp.close() ifp = openrf(src, '*rb') ofp = openrf(dst, '*wb') d = ifp.read(BUFSIZ) while d: ofp.write(d) d = ifp.read(BUFSIZ) ifp.close() ofp.close() srcfss = File.FSSpec(src) dstfss = File.FSSpec(dst) sf = srcfss.FSpGetFInfo() df = dstfss.FSpGetFInfo() df.Creator, df.Type = sf.Creator, sf.Type if forcetype != None: df.Type = forcetype df.Flags = (sf.Flags & COPY_FLAGS) dstfss.FSpSetFInfo(df) if copydates: srcfsr = File.FSRef(src) dstfsr = File.FSRef(dst) catinfo, _, _, _ = srcfsr.FSGetCatalogInfo(Files.kFSCatInfoAllDates) dstfsr.FSSetCatalogInfo(Files.kFSCatInfoAllDates, catinfo) touched(dstfss)
def realPathCase(path): """ Return the real case of path e.g. PageName for pagename HFS and HFS+ file systems, are case preserving but case insensitive. You can't have 'file' and 'File' in the same directory, but you can get the real name of 'file'. @param path: string @rtype: string @return the real case of path or None """ try: from Carbon import File try: return File.FSRef(path).as_pathname() except File.Error: return None except ImportError: return None
def loadFile(self, filename): "load an image file and display it" try: self.im = Image.open(filename) except: # need to resolve alias if PLATFORM == 'OSX': fss = CF.FSSpec(filename) try: fss, isFolder, aliased = CF.ResolveAliasFile(fss, 0) except: print "File not found: ", filename return fsr = CF.FSRef(fss) filename = fsr.FSRefMakePath() self.im = Image.open(filename) if self.im.size[0] > self.max_w: self.im = self.resize(self.im) if self.im.size[1] > self.max_h: self.im = self.resize(self.im) self.displayImage(filename)
def makeusermenus(self): m = Wapplication.Menu(self.menubar, "File") newitem = FrameWork.MenuItem(m, "New", "N", 'new') openitem = FrameWork.MenuItem(m, "Open" + ELLIPSIS, "O", 'open') openbynameitem = FrameWork.MenuItem(m, "Open File by Name" + ELLIPSIS, "D", 'openbyname') self.openrecentmenu = FrameWork.SubMenu(m, "Open Recent") self.makeopenrecentmenu() FrameWork.Separator(m) closeitem = FrameWork.MenuItem(m, "Close", "W", 'close') saveitem = FrameWork.MenuItem(m, "Save", "S", 'save') saveasitem = FrameWork.MenuItem(m, "Save as" + ELLIPSIS, None, 'save_as') FrameWork.Separator(m) saveasappletitem = FrameWork.MenuItem(m, "Save as Applet" + ELLIPSIS, None, 'save_as_applet') FrameWork.Separator(m) instmgritem = FrameWork.MenuItem(m, "Package Manager", None, 'openpackagemanager') gensuiteitem = FrameWork.MenuItem(m, "Generate OSA Suite...", None, 'gensuite') if not runningOnOSX(): # On OSX there's a special "magic" quit menu, so we shouldn't add # it to the File menu. FrameWork.Separator(m) quititem = FrameWork.MenuItem(m, "Quit", "Q", 'quit') m = Wapplication.Menu(self.menubar, "Edit") undoitem = FrameWork.MenuItem(m, "Undo", 'Z', "undo") FrameWork.Separator(m) cutitem = FrameWork.MenuItem(m, "Cut", 'X', "cut") copyitem = FrameWork.MenuItem(m, "Copy", "C", "copy") pasteitem = FrameWork.MenuItem(m, "Paste", "V", "paste") FrameWork.MenuItem(m, "Clear", None, "clear") FrameWork.Separator(m) selallitem = FrameWork.MenuItem(m, "Select all", "A", "selectall") sellineitem = FrameWork.MenuItem(m, "Select line", "L", "selectline") FrameWork.Separator(m) finditem = FrameWork.MenuItem(m, "Find" + ELLIPSIS, "F", "find") findagainitem = FrameWork.MenuItem(m, "Find again", 'G', "findnext") enterselitem = FrameWork.MenuItem(m, "Enter search string", "E", "entersearchstring") replaceitem = FrameWork.MenuItem(m, "Replace", None, "replace") replacefinditem = FrameWork.MenuItem(m, "Replace & find again", 'T', "replacefind") FrameWork.Separator(m) shiftleftitem = FrameWork.MenuItem(m, "Shift left", "[", "shiftleft") shiftrightitem = FrameWork.MenuItem(m, "Shift right", "]", "shiftright") m = Wapplication.Menu(self.menubar, "Python") runitem = FrameWork.MenuItem(m, "Run window", "R", 'run') runselitem = FrameWork.MenuItem(m, "Run selection", None, 'runselection') FrameWork.Separator(m) moditem = FrameWork.MenuItem(m, "Module browser" + ELLIPSIS, "M", self.domenu_modulebrowser) FrameWork.Separator(m) mm = FrameWork.SubMenu(m, "Preferences") FrameWork.MenuItem(mm, "Set Scripts folder" + ELLIPSIS, None, self.do_setscriptsfolder) FrameWork.MenuItem(mm, "Editor default settings" + ELLIPSIS, None, self.do_editorprefs) FrameWork.MenuItem(mm, "Set default window font" + ELLIPSIS, None, self.do_setwindowfont) self.openwindowsmenu = Wapplication.Menu(self.menubar, 'Windows') self.makeopenwindowsmenu() self._menustocheck = [ closeitem, saveitem, saveasitem, saveasappletitem, undoitem, cutitem, copyitem, pasteitem, selallitem, sellineitem, finditem, findagainitem, enterselitem, replaceitem, replacefinditem, shiftleftitem, shiftrightitem, runitem, runselitem ] prefs = self.getprefs() try: fsr, d = File.Alias( rawdata=prefs.scriptsfolder).FSResolveAlias(None) self.scriptsfolder = fsr.FSNewAliasMinimal() except: path = os.path.join(os.getcwd(), "Mac", "IDE scripts") if not os.path.exists(path): if sys.platform == "darwin": path = os.path.join(os.getenv("HOME"), "Library", "Python", "IDE-Scripts") else: path = os.path.join(os.getcwd(), "Scripts") if not os.path.exists(path): os.makedirs(path) f = open( os.path.join(path, "Place your scripts here" + ELLIPSIS), "w") f.close() fsr = File.FSRef(path) self.scriptsfolder = fsr.FSNewAliasMinimal() self.scriptsfoldermodtime = getmodtime(fsr) else: self.scriptsfoldermodtime = getmodtime(fsr) prefs.scriptsfolder = self.scriptsfolder.data self._scripts = {} self.scriptsmenu = None self.makescriptsmenu() self.makehelpmenu()
def getmodtime(file): file = File.FSRef(file) catinfo, d1, d2, d3 = file.FSGetCatalogInfo(Files.kFSCatInfoContentMod) return catinfo.contentModDate