Platforms to show: All Mac Windows Linux Cross-Platform

/MacClassic/FolderItem Demo


Required plugins for this example: MBS MacClassic Plugin

You find this example project in your Plugins Download as a Xojo project file within the examples folder: /MacClassic/FolderItem Demo

This example is the version from Sun, 5th Nov 2022.

Project "FolderItem Demo.xojo_binary_project"
FileTypes
Filetype anyfile
End FileTypes
Class mainWindow Inherits Window
Control OpenItBut Inherits PushButton
ControlInstance OpenItBut Inherits PushButton
EventHandler Sub Action() if theDoc = nil then MsgBox "You need to specify a document first." else OpenIt end exception exc as RuntimeException msgBox "Oops. An Exception occured!" End EventHandler
End Control
Control StaticText1 Inherits Label
ControlInstance StaticText1 Inherits Label
End Control
Control StaticText2 Inherits Label
ControlInstance StaticText2 Inherits Label
End Control
Control url Inherits Label
ControlInstance url Inherits Label
End Control
Control appDrop Inherits GroupBox
ControlInstance appDrop Inherits GroupBox
EventHandler Sub DropObject(obj As DragItem, action As Integer) #Pragma unused action If obj.folderItemAvailable Then If obj.FolderItem.name.Right(4) = ".app" Then theApp = obj.folderItem #If RBVersion < 2019 creatorEdit.Text = theApp.MacCreator appName.caption = theApp.name #Else appName.Text = theApp.Name #EndIf useFile.value = True End If Else beep end End EventHandler
EventHandler Sub Open() me.AcceptFileDrop "anyfile" End EventHandler
End Control
Control appName Inherits Label
ControlInstance appName Inherits Label
End Control
Control docDrop Inherits GroupBox
ControlInstance docDrop Inherits GroupBox
EventHandler Sub DropObject(obj As DragItem, action As Integer) #Pragma unused action if obj.folderItemAvailable then if obj.folderItem.directory then beep else theDoc = obj.folderItem #If RBVersion < 2019 docName.caption = theDoc.name #Else docName.Text = theDoc.name #EndIf OpenItBut.enabled = true end end End EventHandler
EventHandler Sub Open() me.AcceptFileDrop "anyfile" End EventHandler
End Control
Control docName Inherits Label
ControlInstance docName Inherits Label
End Control
Control StaticText3 Inherits Label
ControlInstance StaticText3 Inherits Label
End Control
Control inFGCheck Inherits CheckBox
ControlInstance inFGCheck Inherits CheckBox
End Control
Control useFile Inherits RadioButton
ControlInstance useFile Inherits RadioButton
EventHandler Sub Action() if theApp = nil then beep useDefault.value = true end End EventHandler
End Control
Control useCreator Inherits RadioButton
ControlInstance useCreator Inherits RadioButton
End Control
Control creatorEdit Inherits TextField
ControlInstance creatorEdit Inherits TextField
EventHandler Function KeyDown(Key As String) As Boolean if key >= " " then useCreator.value = true end End EventHandler
End Control
Control useDefault Inherits RadioButton
ControlInstance useDefault Inherits RadioButton
End Control
Control revealBut Inherits PushButton
ControlInstance revealBut Inherits PushButton
EventHandler Sub Action() dim theCreatorApp as FolderItem if theDoc = nil then MsgBox "You need to specify a document first." else if useFile.value then theCreatorApp = theApp elseif useDefault.value then theCreatorApp = theDoc.CreatorAppMBS else theCreatorApp = theDoc.CreatorAppMBS(creatorEdit.text) end if theCreatorApp = nil then MsgBox "No application for this creator is registered in the DTDB (Desktop Database)." else RevealItemInFinder (theCreatorApp) BringFinderToFront end end End EventHandler
End Control
EventHandler Function MouseDown(X As Integer, Y As Integer) As Boolean if x>url.left and x<url.left+url.width and y>url.top and y<url.top+url.height then url.textcolor = RGB(255,0,0) return true end if End EventHandler
EventHandler Sub MouseDrag(X As Integer, Y As Integer) if x>url.left and x<url.left+url.width and y>url.top and y<url.top+url.height then url.textcolor = RGB(255,0,0) else url.textcolor = RGB(0,0,255) end if End EventHandler
EventHandler Sub MouseUp(X As Integer, Y As Integer) url.textcolor = RGB(0,0,255) if x>url.left and x<url.left+url.width and y>url.top and y<url.top+url.height then ShowURL url.text end if End EventHandler
Sub OpenIt() Dim ok as Boolean if useDefault.value then ok = theDoc.LaunchMBS(inFGCheck.Value) elseif useFile.value then ok = theDoc.OpenWithAppMBS(theApp, inFGCheck.Value) else ok = theDoc.OpenWithAppMBS(theDoc.CreatorAppMBS(creatorEdit.text), inFGCheck.Value) end if not ok then msgBox "Launch failed." end End Sub
Property theApp As FolderItem
Property theDoc As FolderItem
End Class
MenuBar Menu
MenuItem UntitledMenu3 = ""
MenuItem UntitledMenu2 = "File"
MenuItem FileQuit = "Quit"
MenuItem UntitledMenu7 = ""
MenuItem UntitledMenu0 = "Edit"
MenuItem EditUndo = "Undo"
MenuItem UntitledMenu1 = "-"
MenuItem EditCut = "Cut"
MenuItem EditCopy = "Copy"
MenuItem EditPaste = "Paste"
MenuItem EditClear = "Clear"
MenuItem UntitledMenu6 = ""
MenuItem UntitledMenu5 = ""
MenuItem UntitledMenu4 = ""
End MenuBar
Module FinderAppleEvents
Sub BringFinderToFront() Dim ok as Boolean Dim ae as AppleEvent ae = NewAppleEvent ("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 = NewAppleEvent (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

See also:

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


The biggest plugin in space...