Xojo Conferences
XDCMay2019MiamiUSA

Platforms to show: All Mac Windows Linux Cross-Platform

/MacClassic/Alias/Using Mac OS Alias files
Function:
Required plugins for this example: MBS MacClassic Plugin, MBS Picture Plugin
You find this example project in your Plugins Download as a Xojo project file within the examples folder: /MacClassic/Alias/Using Mac OS Alias files
This example is the version from Mon, 6th Sep 2015.
Project "Using Mac OS Alias files.rbp"
FileTypes
Filetype AnyFile
End FileTypes
Class mainWindow Inherits Window
Binding enablingBinder
Control StaticText1 Inherits Label
ControlInstance StaticText1 Inherits Label
End Control
Control Infotext Inherits Label
ControlInstance Infotext Inherits Label
End Control
Control GroupBox1 Inherits GroupBox
ControlInstance GroupBox1 Inherits GroupBox
End Control
Control NoDlgChk Inherits CheckBox
ControlInstance NoDlgChk Inherits CheckBox
End Control
Control MountChk Inherits CheckBox
ControlInstance MountChk Inherits CheckBox
End Control
Control StaticText2 Inherits Label
ControlInstance StaticText2 Inherits Label
EventHandler Function MouseDown(X As Integer, Y As Integer) As Boolean me.textcolor = RGB(255,0,0) return true End EventHandler
EventHandler Sub MouseUp(X As Integer, Y As Integer) me.textcolor = RGB(0,0,255) showurL "http://monkeybreadsoftware.de/realbasic" End EventHandler
End Control
Control CheckIcon Inherits CheckBox
ControlInstance CheckIcon Inherits CheckBox
End Control
EventHandler Sub DropObject(obj As DragItem, action As Integer) if obj.FolderItemAvailable then DemoIt (obj.FolderItem) end End EventHandler
EventHandler Sub EnableMenuItems() FileOpen.enabled = true FileSelectFolder.enabled = true End EventHandler
EventHandler Sub Open() AcceptFileDrop "AnyFile" End EventHandler
Function FileOpen() As Boolean Dim f As FolderItem f=GetOpenFolderItem("AnyFile") if f<>nil then DemoIt (f) end if End Function
Function FileSelectFolder() As Boolean Dim f as Folderitem f=SelectFolder If f<> Nil Then DemoIt (f) End If End Function
Sub CopyIcon(source as folderitem, dest as folderitem) dim i as IconMBS dim f as IconFamilyMBS i=new IconMBS(source) if i.Valid then // has icon f=i.IconFamily if f<>nil then if dest.AddCustomIconMBS(f,true)=0 then // ok end if end if end if End Sub
Sub DemoIt(f as FolderItem) Dim s, alisRsrc as String Dim mode, err as Integer Dim f1 as FolderItem, rf as ResourceForkMBS Dim alias as MacAliasMBS if f.Alias then // This is an Alias File - let's look at it // get the file's "alis" resource, which contains the Alias Record in binary format rf = ResourceForkMBS.Open(f, false) alisRsrc = rf.GetResource("alis", 0) rf.Close // create an AliasRecord from it alias = new MacAliasMBS alias.SetRecord alisRsrc // get some path information from the AliasRecord without actually resolving it s = "Alias File's name: " + f.Name + Chr(13) s = s + Chr(13) dim info as AliasInfoMBS = alias.AliasInfo s = s + "Destination target name: " + info.TargetName + Chr(13) s = s + "Destination volume name: " + info.VolumeName + Chr(13) s = s + "Destination Path: " + info.PathString + Chr(13) // now let's resolve the Alias mode = 0 if self.MountChk.value then mode = mode + alias.attemptMount if self.NoDlgChk.value then mode = mode + alias.noDialogs end end f1 = alias.Resolve(nil, mode) s = s + Chr(13) if f1 <> nil then s = s + "Resolved path: " + f1.absolutePath + Chr(13) else s = s + "Unable to resolve the alias." + Chr(13) end else // This is a file or folder (no Alias), // let's create an Alias File for it on the Desktop alias = new MacAliasMBS err = alias.Create(nil, f) if err <> 0 then s = "Oops - an error occured when creating the AliasRecord: " + Str(err) else f1 = SpecialFolder.Desktop.TrueChild(f.name+" Alias") if f1.exists then s = "Oops - Can't create the Alias File: there's already a file with the name “" + f1.name + "” on the Desktop." // <-- CONVERTED else // create a new file in the boot volume's desktop folder rf = ResourceForkMBS.Create(f1) if rf = nil then s = "Oops - Failed to create the Alias File “" + f1.absolutePath + "”." // <-- CONVERTED else // add the AliasRecord to the file's resource rf.AddResource alias.GetRecord(), "alis", 0, "Created by TT's Alias Mgr Plugin Demo" // set the file's type and creator codes if f.Directory then f1.MacType = "fdrp" f1.MacCreator = "MACS" else f1.MacType = f.MacType f1.MacCreator = f.MacCreator end // set the "isAlias" flag in the file's properties. // RB does not provide a function for this (the Alias property of // the FolderItem class is read-only), thus we use two methods // from the MBS plugin here. err = f1.SetFileFlagsMBS(BitwiseOr(f1.GetFileFlagsMBS, &H8000)) rf.Close if CheckIcon.Value then CopyIcon f,f1 end if // make the newly created file known to the Finder immediately UpdateItemInFinder f1 s = "Alias to “" + f.name + "” successfully created on the Desktop." // <-- CONVERTED end end end end Infotext.Text = s End Sub
End Class
MenuBar Menu
MenuItem UntitledMenu4 = ""
MenuItem UntitledMenu2 = "File"
MenuItem FileOpen = "Select File..."
MenuItem FileSelectFolder = "Select Folder..."
MenuItem UntitledMenu3 = "-"
MenuItem FileQuit = "Quit"
MenuItem UntitledMenu0 = "Edit"
MenuItem EditUndo = "Undo"
MenuItem UntitledMenu1 = "-"
MenuItem EditCut = "Cut"
MenuItem EditCopy = "Copy"
MenuItem EditPaste = "Paste"
MenuItem EditClear = "Clear"
End MenuBar
Module FinderAppleEvents
Sub BringFinderToFront() Dim ok as Boolean Dim ae as AppleEvent ae = New AppleEvent ("misc", "actv", "MACS") // kAEActivate if ae <> nil then ok = ae.Send end if not ok then 'MsgBox "Oops, Activate failed unexpectedly" end End Sub
Function FinderSupportsOSL() As Boolean Dim l as Integer if not System.Gestalt("fndr", l) then l = 0 end return BitwiseAnd(l, 8) <> 0 End Function
Sub RevealItemInFinder(f as FolderItem) Dim ok as Boolean ok = sendItemAE ("misc", "mvis", "MACS", f) // kAEMakeItemVisible if not ok then 'MsgBox "Oops, Reveal failed unexpectedly" end End Sub
Sub UpdateItemInFinder(f as FolderItem) Dim ok as Boolean ok = sendItemAE ("fndr", "fupd", "MACS", f.Parent) // kAESync if ok then ok = sendItemAE ("fndr", "fupd", "MACS", f) // kAESync end if not ok then 'MsgBox "Oops, Update failed unexpectedly" end End Sub
Protected Function sendItemAE(s1 as String, s2 as String, s3 as String, f as FolderItem) As Boolean Dim ae as AppleEvent Dim list as AppleEventDescList if FinderSupportsOSL() then ae = New AppleEvent (s1, s2, s3) if ae <> nil then list = New AppleEventDescList list.AppendFolderItem (f) ae.DescListParam("----") = list return ae.Send end end return false End Function
End Module
Class App Inherits Application
End Class
End Project

Feedback, Comments & Corrections

The items on this page are in the following plugins: MBS MacClassic Plugin.




Links
MBS Xojo blog