Revert "Fixes to run the new Explorer on Windows"
[ede] / libede / src / FileSystemBox.ec
index b73a3d3..61f5df9 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);
@@ -391,7 +414,9 @@ public:
    }
    return node;
 }*/
-static FileSystemNode MakeFileSystemNode(const FileStats stats, const char * fileName, const char * filePath, const bool previewPicture, const DisplaySystem displaySystem)
+static FileSystemNode MakeFileSystemNode(const FileStats stats,
+      const char * fileName, const char * filePath,
+      const bool previewPicture, const DisplaySystem displaySystem)
 {
    int len = strlen(fileName);
    char info[MAX_LOCATION];
@@ -448,7 +473,7 @@ static FileSystemNode MakeFileSystemNode(const FileStats stats, const char * fil
 
    if(node.type == pictureFile && previewPicture)
    {
-      node.bitmap = Bitmap { };
+      node.bitmap = Bitmap { alphaBlend = true };
       node.bitmap.Load(filePath, null, displaySystem);
    }
 
@@ -457,7 +482,7 @@ static FileSystemNode MakeFileSystemNode(const FileStats stats, const char * fil
 
 class FileSystemBoxBits
 {
-   bool foldersOnly:1, details:1, treeBranches:1, previewPictures:1;
+   bool foldersOnly:1, filesOnly:1, details:1, treeBranches:1, previewPictures:1, navigateFolders:1;
    //bool header:1, freeSelect:1, fullRowSelect:1, multiSelect:1, autoScroll:1, alwaysHL : 1, moveRows:1, resizable:1;
    //bool moveFields:1, clearHeader:1, alwaysEdit:1, collapse:1, treeBranch:1, rootCollapse:1, heightSet:1;
    //bool sortable:1, noDragging:1, fillLastField:1, expandOnAdd:1;
@@ -484,6 +509,7 @@ public:
    FileSystemNode selection;
 
    virtual bool Window::NotifyNodeSelect(FileSystemBox box, FileSystemNode node);
+   virtual bool Window::NotifyNodeOpen(FileSystemBox box, FileSystemNode node);
    
    property char * path
    {
@@ -492,6 +518,8 @@ public:
          delete path;
          if(value && value[0])
             path = CopyString(value);
+         if(locationBox)
+            locationBox.path = value;
          if(created)
             Load();
       }
@@ -500,7 +528,8 @@ public:
       //isset { return path && path[0]; }
    }
 
-   property bool foldersOnly { set { bits.foldersOnly = value; } get { return bits.foldersOnly; } };
+   property bool foldersOnly { set { bits.foldersOnly = value; bits.filesOnly = !value; } get { return bits.foldersOnly; } };
+   property bool filesOnly { set { bits.filesOnly = value; bits.foldersOnly = !value; } get { return bits.filesOnly; } };
    property bool previewPictures { set { bits.previewPictures = value; } get { return bits.previewPictures; } };
    property char * extensions { set { delete extensions; if(value && value[0]) extensions = CopyString(value); } get { return extensions; } }
    property bool details { set { bits.details = value; } get { return bits.details; } };
@@ -515,6 +544,7 @@ public:
       }
       get { return bits.treeBranches; }
    };
+   property bool navigateFolders { set { bits.navigateFolders = value; bits.foldersOnly = !value; } get { return bits.navigateFolders; } };
    
    property FileSystemNode node
    {
@@ -530,6 +560,8 @@ public:
       }
    }
 
+   PathBox locationBox;
+
    void Select(FileSystemNode node)
    {
       if(node.row)
@@ -551,6 +583,11 @@ public:
       return null;
    }
 
+   void Refresh()
+   {
+      Load();
+   }
+
 private:
    FileSystemBoxBits bits;
 
@@ -583,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()
    {
@@ -716,8 +753,35 @@ private:
          return true;
       }
 
+      bool NotifyDoubleClick(ListBox listBox, int x, int y, Modifiers mods)
+      {
+         return OpenNode();
+      }
+
+      bool NotifyKeyDown(ListBox listBox, DataRow row, Key key, unichar ch)
+      {
+         bool result;
+         if((SmartKey)key == enter)
+            result = OpenNode();
+         else
+            result = true;
+         return true;
+      }
    };
 
+   bool OpenNode()
+   {
+      bool result;
+      if(selection && selection.type.isFolder && bits.navigateFolders)
+      {
+         property::path = selection.path;
+         result = true;
+      }
+      else
+         result = NotifyNodeOpen(this.master, this, selection);
+      return result;
+   }
+
    // Edit Menu
    Menu editMenu { menu, "Edit", e };
    MenuItem itemEditCut
@@ -795,7 +859,9 @@ private:
       list.Clear();
       while(listing.Find())
       {
-         if(!bits.foldersOnly || listing.stats.attribs.isDirectory)
+         if((!bits.foldersOnly && !bits.filesOnly) ||
+            (bits.foldersOnly && listing.stats.attribs.isDirectory) ||
+            (bits.filesOnly && !listing.stats.attribs.isDirectory/*listing.stats.attribs.isFile*/)) // TOCHECK: isFile broken?
          {
             FileSystemNode node = MakeFileSystemNode(listing.stats, listing.name, listing.path, bits.previewPictures, displaySystem);
             DataRow row = list.AddRow();
@@ -889,7 +955,9 @@ private:
 
             while(listing.Find())
             {
-               if(!bits.foldersOnly || listing.stats.attribs.isDirectory)
+               if((!bits.foldersOnly && !bits.filesOnly) ||
+                  (bits.foldersOnly && listing.stats.attribs.isDirectory) ||
+                  (bits.filesOnly && !listing.stats.attribs.isDirectory/*listing.stats.attribs.isFile*/)) // TOCHECK: isFile broken?
                {
                   FileSystemNode child = MakeFileSystemNode(listing.stats, listing.name, listing.path, bits.previewPictures, displaySystem);
                   AddTreeNode(child, true, false, node);
@@ -928,7 +996,9 @@ private:
          FileListing listing { path, extensions = extensions };
          while(listing.Find())
          {
-            if(!bits.foldersOnly || listing.stats.attribs.isDirectory)
+            if((!bits.foldersOnly && !bits.filesOnly) ||
+               (bits.foldersOnly && listing.stats.attribs.isDirectory) ||
+               (bits.filesOnly && !listing.stats.attribs.isDirectory/*listing.stats.attribs.isFile*/)) // TOCHECK: isFile broken?
             {
                FileSystemNode child = MakeFileSystemNode(listing.stats, listing.name, listing.path, bits.previewPictures, displaySystem);
                AddTreeNode(child, true, false, parent);