Fixes to run the new Explorer on Windows
[ede] / libede / src / FileSystemBox.ec
index b880c75..9527e28 100644 (file)
@@ -321,6 +321,29 @@ public:
 
          if(icon)
          {
+            w = icon.width;
+            h = icon.height;
+         }
+         if(type == pictureFile && fsb.previewPictures && bitmap)
+         {
+            surface.SetForeground(white);
+            surface.blend = true;
+   //#ifndef __linux__
+            //surface.Filter(bitmap, (clientSize.w - w) / 2,(clientSize.h - h) / 2, 0,0, w, h, bitmap.width, bitmap.height);
+            //surface.Filter(bitmap, x + indent/* * indentSize*/ + 2, y, 0, 0, w, h, bitmap.width, bitmap.height);
+            surface.Filter(bitmap, x,y,0,0, w, h, bitmap.width, bitmap.height);
+   //#else
+            // Until Filter / Stretch works with X
+            //surface.Blit(bitmap, (clientSize.w - bitmap.width) / 2,(clientSize.h - bitmap.height) / 2, 0,0, bitmap.width, bitmap.height);
+   //         surface.blend = true;
+            //surface.Blit(bitmap, x + indent/* * indentSize*/ + 2, y,0,0, w, h);
+            //surface.Blit(bitmap, x,y,0,0, bitmap.width, bitmap.height);
+   //#endif
+            //bitmap.Free();
+            //delete bitmap;
+         }
+         else if(icon)
+         {
             //surface.blend = true;
             //surface.alphaWrite = blend;
             surface.SetForeground(white);
@@ -402,7 +425,7 @@ static FileSystemNode MakeFileSystemNode(const FileStats stats,
    
    FileSystemNode node { stats = stats };
 
-   //if(stats.attribs.isFile) // TODO fix this in ecere
+   //if(stats.attribs.isFile) // -- should work now
    if(stats.attribs.isDirectory)
    {
       extension[0] = '\0';
@@ -450,7 +473,7 @@ static FileSystemNode MakeFileSystemNode(const FileStats stats,
 
    if(node.type == pictureFile && previewPicture)
    {
-      node.bitmap = Bitmap { };
+      node.bitmap = Bitmap { alphaBlend = true };
       node.bitmap.Load(filePath, null, displaySystem);
    }
 
@@ -560,6 +583,11 @@ public:
       return null;
    }
 
+   void Refresh()
+   {
+      Load();
+   }
+
 private:
    FileSystemBoxBits bits;
 
@@ -592,9 +620,9 @@ private:
       }
    }
 
-   DataField nameField { dataType = "FileSystemNode", width = 240, userData = this };
+   DataField nameField { dataType = "FileSystemNode", width = 240, userData = this, freeData = false };
    DataField typeField { header = "Type", dataType = /*"String"*/ "char *", width = 40, freeData = false };
-   DataField sizeField { header = "Size", dataType = "FileSize", width = 96, alignment = right };
+   DataField sizeField { header = "Size", dataType = "FileSize", width = 96, alignment = right, freeData = false };
 
    bool OnPostCreate()
    {
@@ -833,7 +861,7 @@ private:
       {
          if((!bits.foldersOnly && !bits.filesOnly) ||
             (bits.foldersOnly && listing.stats.attribs.isDirectory) ||
-            (bits.filesOnly && !listing.stats.attribs.isDirectory/*listing.stats.attribs.isFile*/)) // TOCHECK: isFile broken?
+            (bits.filesOnly && listing.stats.attribs.isFile))
          {
             FileSystemNode node = MakeFileSystemNode(listing.stats, listing.name, listing.path, bits.previewPictures, displaySystem);
             DataRow row = list.AddRow();
@@ -868,14 +896,14 @@ private:
       root = MakeFileSystemNode(FileStats { attribs = FileExists(path)}, path, path, bits.previewPictures, displaySystem);
    #ifdef __WIN32__
       //root.name = rootName;
-      AddTreeNode(root, true, false, null, list);
+      AddTreeNode(root, true, false, null);//, list);
    #else
       //root.name = "/";
    #endif
       AddTreeNode(root, false, true, null);
 
    // How can this make sense for linux? 
-   #ifdef __WIN32__
+   /*#ifdef __WIN32__
       while(listing.Find())
       {
          int len = strlen(listing.name);
@@ -909,7 +937,7 @@ private:
       node.row.collapsed = true;
       Sort(nameField, 1);
       SelectRow(root.row);
-   #endif
+   #endif*/
       LoadTreeNode(root);
       list.Sort(nameField, 1);
    }
@@ -923,13 +951,13 @@ private:
          {
             FileListing listing { path, extensions = extensions };
             if(node.children.count == 1)
-            DeleteNode(node.children.first);
+               DeleteNode(node.children.first);
 
             while(listing.Find())
             {
-               if((!bits.foldersOnly && !bits.filesOnly) ||
+               if(!listing.stats.attribs.isRemovable && ((!bits.foldersOnly && !bits.filesOnly) ||
                   (bits.foldersOnly && listing.stats.attribs.isDirectory) ||
-                  (bits.filesOnly && !listing.stats.attribs.isDirectory/*listing.stats.attribs.isFile*/)) // TOCHECK: isFile broken?
+                  (bits.filesOnly && listing.stats.attribs.isFile)))
                {
                   FileSystemNode child = MakeFileSystemNode(listing.stats, listing.name, listing.path, bits.previewPictures, displaySystem);
                   AddTreeNode(child, true, false, node);
@@ -970,7 +998,7 @@ private:
          {
             if((!bits.foldersOnly && !bits.filesOnly) ||
                (bits.foldersOnly && listing.stats.attribs.isDirectory) ||
-               (bits.filesOnly && !listing.stats.attribs.isDirectory/*listing.stats.attribs.isFile*/)) // TOCHECK: isFile broken?
+               (bits.filesOnly && listing.stats.attribs.isFile))
             {
                FileSystemNode child = MakeFileSystemNode(listing.stats, listing.name, listing.path, bits.previewPictures, displaySystem);
                AddTreeNode(child, true, false, parent);