]> git.saurik.com Git - wxWidgets.git/blobdiff - src/generic/dirctrlg.cpp
restored mask copying code when converting a wxBitmap to a wxImage (wxMSW only)
[wxWidgets.git] / src / generic / dirctrlg.cpp
index 0193c7e016363d82788086fb215f09d0107161ec..07359fdbcfec5dec8d68430447f47c70fbfc9bea 100644 (file)
 
 #endif
 
-#ifdef __OS2__
-
-#define INCL_BASE
-#include <os2.h>
-#ifndef __EMX__
-#include <direct.h>
-#endif
-#include <stdlib.h>
-#include <ctype.h>
-extern bool wxIsDriveAvailable(const wxString& dirName);
+#if defined(__OS2__) || defined(__DOS__)
+  #ifdef __OS2__
+    #define INCL_BASE
+    #include <os2.h>
+    #ifndef __EMX__
+      #include <direct.h>
+    #endif
+    #include <stdlib.h>
+    #include <ctype.h>
+  #endif
+  extern bool wxIsDriveAvailable(const wxString& dirName);
 #endif // __OS2__
 
 #if defined(__WXMAC__)
@@ -508,9 +509,10 @@ IMPLEMENT_DYNAMIC_CLASS_XTI(wxGenericDirCtrl, wxControl,"wx/dirctrl.h")
 
 wxBEGIN_PROPERTIES_TABLE(wxGenericDirCtrl)
     wxHIDE_PROPERTY( Children )
-       wxPROPERTY( DefaultPath , wxString , SetDefaultPath , GetDefaultPath  , , 0 /*flags*/ , wxT("Helpstring") , wxT("group"))
-       wxPROPERTY( Filter , wxString , SetFilter , GetFilter  ,, 0 /*flags*/ , wxT("Helpstring") , wxT("group") )
-       wxPROPERTY( DefaultFilter , int , SetFilterIndex, GetFilterIndex,, 0 /*flags*/ , wxT("Helpstring") , wxT("group") )
+       wxPROPERTY( DefaultPath , wxString , SetDefaultPath , GetDefaultPath  , EMPTY_MACROVALUE , 0 /*flags*/ , wxT("Helpstring") , wxT("group"))
+       wxPROPERTY( Filter , wxString , SetFilter , GetFilter  , EMPTY_MACROVALUE , 0 /*flags*/ , wxT("Helpstring") , wxT("group") )
+       wxPROPERTY( DefaultFilter , int , SetFilterIndex, GetFilterIndex, EMPTY_MACROVALUE , 0 /*flags*/ , wxT("Helpstring") , wxT("group") )
+    wxPROPERTY_FLAGS( WindowStyle, wxGenericDirCtrlStyle, long, SetWindowStyleFlag, GetWindowStyleFlag, EMPTY_MACROVALUE , 0, wxT("Helpstring"), wxT("group") )
 wxEND_PROPERTIES_TABLE()
 
 wxBEGIN_HANDLERS_TABLE(wxGenericDirCtrl)
@@ -523,10 +525,10 @@ IMPLEMENT_DYNAMIC_CLASS(wxGenericDirCtrl, wxControl)
 #endif
 
 BEGIN_EVENT_TABLE(wxGenericDirCtrl, wxControl)
-  EVT_TREE_ITEM_EXPANDING     (-1, wxGenericDirCtrl::OnExpandItem)
-  EVT_TREE_ITEM_COLLAPSED     (-1, wxGenericDirCtrl::OnCollapseItem)
-  EVT_TREE_BEGIN_LABEL_EDIT   (-1, wxGenericDirCtrl::OnBeginEditItem)
-  EVT_TREE_END_LABEL_EDIT     (-1, wxGenericDirCtrl::OnEndEditItem)
+  EVT_TREE_ITEM_EXPANDING     (wxID_TREECTRL, wxGenericDirCtrl::OnExpandItem)
+  EVT_TREE_ITEM_COLLAPSED     (wxID_TREECTRL, wxGenericDirCtrl::OnCollapseItem)
+  EVT_TREE_BEGIN_LABEL_EDIT   (wxID_TREECTRL, wxGenericDirCtrl::OnBeginEditItem)
+  EVT_TREE_END_LABEL_EDIT     (wxID_TREECTRL, wxGenericDirCtrl::OnEndEditItem)
   EVT_SIZE                    (wxGenericDirCtrl::OnSize)
 END_EVENT_TABLE()
 
@@ -602,6 +604,7 @@ bool wxGenericDirCtrl::Create(wxWindow *parent,
     if (!m_defaultPath.IsEmpty())
         ExpandPath(m_defaultPath);
 
+    SetBestSize(size);
     DoResize();
 
     return TRUE;
@@ -834,16 +837,24 @@ void wxGenericDirCtrl::ExpandDir(wxTreeItemId parentId)
         {
             int style = wxDIR_FILES;
             if (m_showHidden) style |= wxDIR_HIDDEN;
-            if (d.GetFirst(& eachFilename, m_currentFilterStr, style))
+            // Process each filter (ex: "JPEG Files (*.jpg;*.jpeg)|*.jpg;*.jpeg")
+            wxStringTokenizer strTok;
+            wxString curFilter;
+            strTok.SetString(m_currentFilterStr,wxT(";"));
+            while(strTok.HasMoreTokens())
             {
-                do
+                curFilter = strTok.GetNextToken();
+                if (d.GetFirst(& eachFilename, m_currentFilterStr, style))
                 {
-                    if ((eachFilename != wxT(".")) && (eachFilename != wxT("..")))
+                    do
                     {
-                        filenames.Add(eachFilename);
+                        if ((eachFilename != wxT(".")) && (eachFilename != wxT("..")))
+                        {
+                            filenames.Add(eachFilename);
+                        }
                     }
+                    while (d.GetNext(& eachFilename));
                 }
-                while (d.GetNext(& eachFilename));
             }
         }
         filenames.Sort(wxDirCtrlStringCompareFunction);
@@ -1518,13 +1529,15 @@ wxImageList *wxFileIconsTable::GetSmallImageList()
     return m_smallImageList;
 }
 
-#if wxUSE_MIMETYPE
+#if wxUSE_MIMETYPE && wxUSE_IMAGE
 // VS: we don't need this function w/o wxMimeTypesManager because we'll only have
 //     one icon and we won't resize it
 
 static wxBitmap CreateAntialiasedBitmap(const wxImage& img)
 {
-    wxImage smallimg (16, 16);
+    const unsigned int size = 16;
+    
+    wxImage smallimg (size, size);
     unsigned char *p1, *p2, *ps;
     unsigned char mr = img.GetMaskRed(),
                   mg = img.GetMaskGreen(),
@@ -1533,12 +1546,12 @@ static wxBitmap CreateAntialiasedBitmap(const wxImage& img)
     unsigned x, y;
     unsigned sr, sg, sb, smask;
 
-    p1 = img.GetData(), p2 = img.GetData() + 3 * 32, ps = smallimg.GetData();
+    p1 = img.GetData(), p2 = img.GetData() + 3 * size*2, ps = smallimg.GetData();
     smallimg.SetMaskColour(mr, mr, mr);
 
-    for (y = 0; y < 16; y++)
+    for (y = 0; y < size; y++)
     {
-        for (x = 0; x < 16; x++)
+        for (x = 0; x < size; x++)
         {
             sr = sg = sb = smask = 0;
             if (p1[0] != mr || p1[1] != mg || p1[2] != mb)
@@ -1564,12 +1577,14 @@ static wxBitmap CreateAntialiasedBitmap(const wxImage& img)
                 ps[0] = sr >> 2, ps[1] = sg >> 2, ps[2] = sb >> 2;
             ps += 3;
         }
-        p1 += 32 * 3, p2 += 32 * 3;
+        p1 += size*2 * 3, p2 += size*2 * 3;
     }
-
+    
     return wxBitmap(smallimg);
 }
 
+// This function is currently not unused anymore
+#if 0
 // finds empty borders and return non-empty area of image:
 static wxImage CutEmptyBorders(const wxImage& img)
 {
@@ -1613,6 +1628,8 @@ static wxImage CutEmptyBorders(const wxImage& img)
 
     return img.GetSubImage(wxRect(left, top, right - left + 1, bottom - top + 1));
 }
+#endif // #if 0
+
 #endif // wxUSE_MIMETYPE
 
 int wxFileIconsTable::GetIconID(const wxString& extension, const wxString& mime)
@@ -1633,11 +1650,15 @@ int wxFileIconsTable::GetIconID(const wxString& extension, const wxString& mime)
 
     wxIconLocation iconLoc;
     wxIcon ic;
-    if ( ft && ft->GetIcon(&iconLoc) )
+
     {
-        ic = wxIcon(iconLoc);
+        wxLogNull logNull;
+        if ( ft && ft->GetIcon(&iconLoc) )
+        {
+            ic = wxIcon( iconLoc.GetFileName() );
+        }
     }
-
+    
     delete ft;
 
     if ( !ic.Ok() )
@@ -1650,18 +1671,33 @@ int wxFileIconsTable::GetIconID(const wxString& extension, const wxString& mime)
     wxBitmap bmp;
     bmp.CopyFromIcon(ic);
 
+    if ( !bmp.Ok() )
+    {
+        int newid = file;
+        m_HashTable->Put(extension, new wxFileIconEntry(newid));
+        return newid;
+    }
+
+    const unsigned int size = 16;
+    
     int id = m_smallImageList->GetImageCount();
-    if ((bmp.GetWidth() == 16) && (bmp.GetHeight() == 16))
+    if ((bmp.GetWidth() == (int) size) && (bmp.GetHeight() == (int) size))
+    {
         m_smallImageList->Add(bmp);
+    }
+#if wxUSE_IMAGE
     else
     {
         wxImage img = bmp.ConvertToImage();
 
-        if ((img.GetWidth() != 32) || (img.GetHeight() != 32))
-            m_smallImageList->Add(CreateAntialiasedBitmap(CutEmptyBorders(img).Rescale(32, 32)));
+        if ((img.GetWidth() != size*2) || (img.GetHeight() != size*2))
+//            m_smallImageList->Add(CreateAntialiasedBitmap(CutEmptyBorders(img).Rescale(size*2, size*2)));
+            m_smallImageList->Add(CreateAntialiasedBitmap(img.Rescale(size*2, size*2)));
         else
             m_smallImageList->Add(CreateAntialiasedBitmap(img));
     }
+#endif // wxUSE_IMAGE
+
     m_HashTable->Put(extension, new wxFileIconEntry(id));
     return id;