Hi, Joe--

Yes, I actually did do that. I defined both methods and pasted them in
directly from Harrie's code. :)

All My Best,
Jeffrey


on 3/21/06 11:27 AM, Joe Huber at [EMAIL PROTECTED] wrote:

> Harrie's original message, which you copied, includes a specific
> description of this issue.
> 
> isBundle is another method you need to define with the code he
> provided in the second part of his message.
> 
> Regards,
> Joe Huber
> 
> 
>> Wow... Thank you. This looks great :)
>> 
>> Ok. I copied and pasted everything exactly as written. But I am getting a
>> very strange error.
>> 
>> At this line:
>> 
>> 
>> if f.Directory and not f.isBundle then goodPath = goodPath + ":"
>> 
>> 
>> I am getting that the isBundle method doesn't exist.
>> 
>> I checked and re-checked the method, which I created as part of the parent
>> window, just like the getPathForDisplay method. I then copied the name from
>> that same line of code, just to be sure, and renamed the method by pasting
>> -- not that anything changed. Again, I got the same error.
>> 
>> I'm stumped...
>> 
>> All My Best,
>> Jeffrey
>> 
>> 
>> on 3/21/06 8:45 AM, Harrie Westphal at [EMAIL PROTECTED] wrote:
>> 
>>> 
>>>  On Mar 20, 2006, at 6:02 PM, Jeffrey Ellis wrote:
>>> 
>>>>  As far as the other issue, I'll post it again. Does anyone know how
>>>>  to not
>>>>  have filenames truncated to 32 characters under OS X?
>>> 
>>>  The problem with seeing the truncated file names comes from how OS X
>>>  presents the absolutePath string. However, if you use just the name
>>>  property it will always show the proper file name. To get around the
>>>  problem presented by using the AbsolutePath property of the
>>>  folderitem I wrote the following functions as an extensions to the
>>>  FolderItem class. Because they are extensions they must reside within
>>>  a module so that they can be accessed globally. It's going to seem
>>>  like a lot of code, but it executes with good speed and I use it all
>>>  the time.
>>> 
>>>  Function getPathForDisplay(Extends f As FolderItem) As String
>>>     // This method walks up the hierarchy of the folderitem passed to it
>>>     // to form its own version of the absolutepath string, being able to
>>>     // handle level names longer than 31 characters.
>>>     Dim parts(-1), goodPath As String
>>>     Dim fp As FolderItem
>>> 
>>>     parts.Insert 0, f.name  // get the file/folder name
>>>     fp = f
>>>     Do
>>>       fp = fp.Parent  // go up one level in the hierarchy
>>>       parts.insert 0, fp.name  // insert folder/volume name for this
>>>  level
>>>     Loop Until fp.parent = nil  // if at the volume level we end the loop
>>>     goodPath = Join(parts,":") // join the parts to make the new path
>>>  string
>>>     // if this is a directory, and not a bundle add colon to end of
>>>  string, its a folder
>>>     if f.Directory and not f.isBundle then goodPath = goodPath + ":"
>>>     return goodPath
>>>  End Function
>>> 
>>>  Now when you want an AbsolutePath that shows the file name, or
>>>  intervening folder name, that is longer than 31 characters just use a
>>>  statement like the following:
>>> 
>>>  myAbsolutePath = f.getPathForDisplay
>>> 
>>>  where you have dimmed myAbsolutePath as a string. The contents of
>>>  myAbsolutePath will have all the proper names in the result.
>>> 
>>>  You will notice the next to the last line above:
>>> 
>>>  if f.Directory and not f.isBundle then goodPath = goodPath + ":"
>>> 
>>>  uses another function to determine if the file being looked at is a
>>>  bundle or not: the code for that method is (watch out for line
>>>  wrapping). However, if you don't care whether or not the path name
>>>  ends with a colon when the item is a folder, you can remove that line
>>>  and ignore the function that follows.
>>> 
>>>  Function isBundle(Extends f As FolderItem) As Boolean
>>>     // this method, which was gotten from one of the RB mailing lists
>>>  and was written by someone much more
>>>     // knowledgable than myself, returns True if the passed in
>>>  folderitem points to a bundle file and false if it
>>>     // does not
>>>     dim parentSpec as MemoryBlock
>>>     dim parentRef as MemoryBlock
>>>     dim fsRef as MemoryBlock
>>>     dim fileName as String
>>>     dim OSError as Integer
>>>     dim itemInfo as MemoryBlock
>>>     dim itemFlags as Integer
>>> 
>>>     Const kLSRequestBasicFlagsOnly = &h00000004
>>>     Const kLSItemInfoIsPackage = &h00000002
>>> 
>>>     Declare Function FSMakeFSSpec Lib "CarbonLib" (vRefNum as Short,
>>>  dirID as Integer, fileName as PString, spec as Ptr) As Short
>>>     Declare Function FSpMakeFSRef Lib "CarbonLib" (source as Ptr,
>>>  newRef as Ptr) as Short
>>>     Declare Function FSMakeFSRefUnicode Lib "CarbonLib" (parentPtr as
>>>  Ptr, nameLength as Integer, name as CString, enc as Integer, outRef
>>>  as Ptr) as Short
>>>     Declare Function LSCopyItemInfoForRef Lib "CarbonLib" (inItemRef
>>>  as Ptr, inWhichInfo as Integer, outItemInfo as Ptr) as Integer
>>> 
>>>     If f.Parent <> nil then //top-level directories probably aren't
>>>  bundles
>>>       parentSpec = NewMemoryBlock(70)
>>>       OSError = FSMakeFSSpec(f.MacVRefNum, f.MacDirID, "", parentSpec)
>>>       If OSError <> 0 then
>>>         Raise new MacToolboxException("FSMakeFSSpec returned error " +
>>>  Str(OSError))
>>>       End if
>>>       parentRef = NewMemoryBlock(80)
>>>       OSError = FSpMakeFSRef(parentSpec, parentRef)
>>>       If OSError <> 0 then
>>>         Raise new MacToolboxException("FSpMakeFSRef returned error " +
>>>  Str(OSError))
>>>       End if
>>>       fileName = ConvertEncoding(f.name, Encodings.UTF16)
>>>       fsRef = NewMemoryBlock(80)
>>>       OSError = FSMakeFSRefUnicode(parentRef, Len(fileName), fileName,
>>>  0, fsRef)
>>>       If OSError <> 0 then
>>>         Raise new MacToolboxException("FSMakeFSRefUnicode returned
>>>  error " + Str(OSError))
>>>       End if
>>> 
>>>       itemInfo = NewMemoryBlock(24)
>>>       OSError = LSCopyItemInfoForRef(fsRef, kLSRequestBasicFlagsOnly,
>>>  itemInfo)
>>>       If OSError <> 0 then
>>>         Raise new MacToolboxException("LSCopyItemInfoForRef returned
>>>  error " + Str(OSError))
>>>       End if
>>>       itemFlags = itemInfo.Long(0)
>>>       Return Bitwise.BitAnd(itemFlags, kLSItemInfoIsPackage) =
>>>  kLSItemInfoIsPackage
>>>     Else
>>>       Return false
>>>     End if
>>>  End Function
>>> 
>>> 
>>>  === A Mac addict in Tennessee ===
>>> 
>> 
>> 
>> _______________________________________________
>> Unsubscribe or switch delivery mode:
>> <http://www.realsoftware.com/support/listmanager/>
>> 
>> Search the archives of this list here:
>> <http://support.realsoftware.com/listarchives/lists.html>
> 


_______________________________________________
Unsubscribe or switch delivery mode:
<http://www.realsoftware.com/support/listmanager/>

Search the archives of this list here:
<http://support.realsoftware.com/listarchives/lists.html>

Reply via email to