]> git.saurik.com Git - wxWidgets.git/blobdiff - src/generic/dirctrlg.cpp
Adapted printing samples makefiles.
[wxWidgets.git] / src / generic / dirctrlg.cpp
index 3f0de6879fc73fe3e949f9cf796d64c5b10db1eb..791b3a97a0087fa59845e508c6fc536169d4edd1 100644 (file)
 #endif // __OS2__
 
 #if defined(__WXMAC__)
 #endif // __OS2__
 
 #if defined(__WXMAC__)
-#  ifdef __DARWIN__
-#    include "MoreFilesX.h"
-#  else
-#    include "MoreFilesExtras.h"
-#  endif
+# include "MoreFilesX.h"
 #endif
 
 #ifdef __BORLANDC__
 #endif
 
 #ifdef __BORLANDC__
@@ -202,87 +198,36 @@ size_t wxGetAvailableDrives(wxArrayString &paths, wxArrayString &names, wxArrayI
 #endif // __WIN32__/!__WIN32__
 
 #elif defined(__WXMAC__)
 #endif // __WIN32__/!__WIN32__
 
 #elif defined(__WXMAC__)
-#ifdef __DARWIN__
-    FSRef     **theVolRefs;
-    ItemCount   theVolCount;
-    char        thePath[FILENAME_MAX];
-
-    if (FSGetMountedVolumes(&theVolRefs, &theVolCount) == noErr) {
-        ItemCount index;
-        ::HLock( (Handle)theVolRefs ) ;
-        for (index = 0; index < theVolCount; ++index) {
-            // get the POSIX path associated with the FSRef
-            if ( FSRefMakePath(&((*theVolRefs)[index]),
-                                 (UInt8 *)thePath, sizeof(thePath)) != noErr ) {
-                continue;
-            }
-            // add path separator at end if necessary
-            wxString path( thePath , wxConvLocal) ;
-            if (path.Last() != wxFILE_SEP_PATH) {
-                path += wxFILE_SEP_PATH;
-            }
-            // get Mac volume name for display
-            FSVolumeRefNum vRefNum ;
-            HFSUniStr255 volumeName ;
 
 
-            if ( FSGetVRefNum(&((*theVolRefs)[index]), &vRefNum) != noErr ) {
-                continue;
-            }
-            if ( FSGetVInfo(vRefNum, &volumeName, NULL, NULL) != noErr ) {
-                continue;
-            }
-            // get C string from Unicode HFS name
-            //   see: http://developer.apple.com/carbon/tipsandtricks.html
-            CFStringRef cfstr = CFStringCreateWithCharacters( kCFAllocatorDefault,
-                                                              volumeName.unicode,
-                                                              volumeName.length );
-            // Do something with str
-            char *cstr = NewPtr(CFStringGetLength(cfstr) + 1);
-            if (( cstr == NULL ) ||
-                !CFStringGetCString(cfstr, cstr, CFStringGetLength(cfstr) + 1,
-                                    kCFStringEncodingMacRoman))
+    ItemCount volumeIndex = 1;
+    OSErr err = noErr ;
+    
+    while( noErr == err )
+    {
+        HFSUniStr255 volumeName ;
+        FSRef fsRef ;
+        FSVolumeInfo volumeInfo ;
+               err = FSGetVolumeInfo(0, volumeIndex, NULL, kFSVolInfoFlags , &volumeInfo , &volumeName, &fsRef);
+               if( noErr == err )
+               {
+                   wxString path = wxMacFSRefToPath( &fsRef ) ;
+            wxString name = wxMacHFSUniStrToString( &volumeName ) ;
+            
+            if ( (volumeInfo.flags & kFSVolFlagSoftwareLockedMask) || (volumeInfo.flags & kFSVolFlagHardwareLockedMask) )
             {
             {
-                CFRelease( cfstr );
-                continue;
+                icon_ids.Add(wxFileIconsTable::cdrom);
             }
             }
-            wxString name( cstr , wxConvLocal );
-            DisposePtr( cstr );
-            CFRelease( cfstr );
-
-            GetVolParmsInfoBuffer volParmsInfo;
-            UInt32 actualSize;
-            if ( FSGetVolParms(vRefNum, sizeof(volParmsInfo), &volParmsInfo, &actualSize) != noErr ) {
-                continue;
+            else
+            {
+                icon_ids.Add(wxFileIconsTable::drive);
             }
             }
-
+            // todo other removable
+            
             paths.Add(path);
             names.Add(name);
             paths.Add(path);
             names.Add(name);
-
-            if ( VolIsEjectable(&volParmsInfo) )
-                icon_ids.Add(wxFileIconsTable::cdrom);
-            else
-                icon_ids.Add(wxFileIconsTable::drive);
-        }
-        ::HUnlock( (Handle)theVolRefs );
-        ::DisposeHandle( (Handle)theVolRefs );
+            volumeIndex++ ;
+               }
     }
     }
-#else // !__DARWIN__
-    FSSpec volume;
-    short index = 1;
-    while(1)
-    {
-        short actualCount = 0 ;
-        if (OnLine(&volume, 1, &actualCount, &index ) != noErr || actualCount==0)
-        {
-            break;
-        }
-
-        wxString name = wxMacFSSpec2MacFilename( &volume );
-        paths.Add(name + wxFILE_SEP_PATH);
-        names.Add(name);
-        icon_ids.Add(wxFileIconsTable::drive);
-    }
-#endif // __DARWIN__
 
 #elif defined(__UNIX__)
     paths.Add(wxT("/"));
 
 #elif defined(__UNIX__)
     paths.Add(wxT("/"));
@@ -430,10 +375,6 @@ wxDirItemData::wxDirItemData(const wxString& path, const wxString& name,
     m_isDir = isDir;
 }
 
     m_isDir = isDir;
 }
 
-wxDirItemData::~wxDirItemData()
-{
-}
-
 void wxDirItemData::SetNewDirName(const wxString& path)
 {
     m_path = path;
 void wxDirItemData::SetNewDirName(const wxString& path)
 {
     m_path = path;
@@ -610,8 +551,19 @@ bool wxGenericDirCtrl::Create(wxWindow *parent,
     ExpandDir(m_rootId); // automatically expand first level
 
     // Expand and select the default path
     ExpandDir(m_rootId); // automatically expand first level
 
     // Expand and select the default path
-    if (!m_defaultPath.IsEmpty())
+    if (!m_defaultPath.empty())
+    {
         ExpandPath(m_defaultPath);
         ExpandPath(m_defaultPath);
+    }
+#ifdef __UNIX__
+    else
+    {
+        // On Unix, there's only one node under the (hidden) root node. It
+        // represents the / path, so the user would always have to expand it;
+        // let's do it ourselves
+        ExpandPath(wxT("/"));
+    }
+#endif
 
     SetBestSize(size);
     DoResize();
 
     SetBestSize(size);
     DoResize();
@@ -1270,7 +1222,7 @@ void wxDirFilterListCtrl::FillFilterList(const wxString& filter, int defaultFilt
 {
     Clear();
     wxArrayString descriptions, filters;
 {
     Clear();
     wxArrayString descriptions, filters;
-    size_t n = (size_t) wxParseCommonDialogsFilter(filter, filters, descriptions);
+    size_t n = (size_t) wxParseCommonDialogsFilter(filter, descriptions, filters);
 
     if (n > 0 && defaultFilter < (int) n)
     {
 
     if (n > 0 && defaultFilter < (int) n)
     {
@@ -1600,7 +1552,11 @@ static wxBitmap CreateAntialiasedBitmap(const wxImage& img)
             if (smask > 2)
                 ps[0] = ps[1] = ps[2] = mr;
             else
             if (smask > 2)
                 ps[0] = ps[1] = ps[2] = mr;
             else
-                ps[0] = sr >> 2, ps[1] = sg >> 2, ps[2] = sb >> 2;
+            {
+                ps[0] = (unsigned char)(sr >> 2);
+                ps[1] = (unsigned char)(sg >> 2);
+                ps[2] = (unsigned char)(sb >> 2);
+            }
             ps += 3;
         }
         p1 += size*2 * 3, p2 += size*2 * 3;
             ps += 3;
         }
         p1 += size*2 * 3, p2 += size*2 * 3;