libede:FileSystemBox: details
[ede] / libede / src / FileSystemBox.ec
index ed93d96..294e414 100644 (file)
@@ -139,7 +139,7 @@ public enum _FileType
 
 class FileSystemBoxBits
 {
-   bool foldersOnly:1, filesOnly:1, details:1, treeBranches:1, previewPictures:1, navigateFolders:1;
+   bool foldersOnly:1, filesOnly:1, details:1, treeBranches:1, previewPictures:1, navigateFolders:1, autoLoad: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;
@@ -166,6 +166,7 @@ public:
    FileSystemNode selection;
 
    virtual bool Window::NotifyNodeSelect(FileSystemBox box, FileSystemNode node);
+   //virtual bool Window::NotifyNodeNavigate(FileSystemBox box, FileSystemNode node);
    virtual bool Window::NotifyNodeOpen(FileSystemBox box, FileSystemNode node);
    
    property char * path
@@ -203,6 +204,7 @@ public:
    };
    property bool navigateFolders { set { bits.navigateFolders = value; bits.filesOnly = !value; } get { return bits.navigateFolders; } };
    property bool multiSelect { set { list.multiSelect = value; } get { return list.multiSelect; } };
+   property bool autoLoad { set { bits.autoLoad = value; } get { return bits.autoLoad; } };
    
    property FileSystemNode node
    {
@@ -321,6 +323,7 @@ private:
       
       InitFileIcons();
       list.AddField(nameField);
+      bits.autoLoad = true;
    }
    ~FileSystemBox()
    {
@@ -338,12 +341,14 @@ private:
    }
 
    DataField nameField { dataType = "FileSystemNode", width = 240, userData = this, freeData = false };
+   DataField pathField { header = "Location", dataType = /*"String"*/ "char *", width = 100, freeData = false };
    DataField typeField { header = "Type", dataType = /*"String"*/ "char *", width = 40, freeData = false };
    DataField sizeField { header = "Size", dataType = "FileSize", width = 96, alignment = right, freeData = false };
 
    bool OnPostCreate()
    {
-      Load();
+      if(bits.autoLoad)
+         Load();
       return true;
    }
 
@@ -472,8 +477,9 @@ private:
 
       bool NotifyDoubleClick(ListBox listBox, int x, int y, Modifiers mods)
       {
+         bool result = !(selection && selection.type.isFolder && bits.navigateFolders);
          OpenNode();
-         return false;
+         return result;
       }
 
       bool NotifyKeyDown(ListBox listBox, DataRow row, Key key, unichar ch)
@@ -491,12 +497,8 @@ private:
    {
       bool result;
       if(selection && selection.type.isFolder && bits.navigateFolders)
-      {
          property::path = selection.path;
-         result = true;
-      }
-      else
-         result = NotifyNodeOpen(this.master, this, selection);
+      result = NotifyNodeOpen(this.master, this, selection);
       return result;
    }
 
@@ -582,14 +584,7 @@ private:
             (bits.filesOnly && listing.stats.attribs.isFile))
          {
             FileSystemNode node = MakeFileSystemNode(listing.stats, listing.name, listing.path, bits.previewPictures, displaySystem);
-            DataRow row = list.AddRow();
-            row.tag = (int)node;
-            row.SetData(nameField, node);
-            if(bits.details)
-            {
-               row.SetData(typeField, node.extension);
-               row.SetData(sizeField, (void *)node.stats.size);
-            }
+            AddNode(node);
          }
       }
       list.Sort(nameField, 1);
@@ -735,6 +730,18 @@ private:
       parent.childrenLoaded = true;
    }
 
+   void AddNode(FileSystemNode node)
+   {
+      DataRow row = list.AddRow();
+      row.tag = (int)node;
+      row.SetData(nameField, node);
+      if(bits.details)
+      {
+         row.SetData(typeField, node.extension);
+         row.SetData(sizeField, (void *)node.stats.size);
+      }
+   }
+
    void AddTreeNode(FileSystemNode node, bool loaded, bool addLoader, FileSystemNode addTo)
    {
       DataRow row = (addTo && addTo.row) ? addTo.row.AddRow() : list.AddRow();
@@ -747,6 +754,11 @@ private:
       row.tag = (int)node;
       node.row = row;
       row.SetData(null, node);
+      if(bits.details)
+      {
+         row.SetData(typeField, node.extension);
+         row.SetData(sizeField, (void *)node.stats.size);
+      }
 
       node.loaded = loaded;
       if(addLoader)
@@ -1871,12 +1883,15 @@ public:
          }
       }
       else
+      {
 /*#ifdef __WIN32__
          strcpy(outputPath, "/");
 #else*/
-         strcpy(outputPath, name);
+         //strcpy(outputPath, name);
+         strcpy(outputPath, path);
+         PathCat(outputPath, name);
 //#endif
-
+      }
    }
 
    bool IsChildOf(FileSystemNode node)
@@ -2108,7 +2123,8 @@ public:
    }
    return node;
 }*/
-static FileSystemNode MakeFileSystemNode(const FileStats stats,
+
+FileSystemNode MakeFileSystemNode(const FileStats stats,
       const char * fileName, const char * filePath,
       const bool previewPicture, const DisplaySystem displaySystem)
 {