libede:FileSystemBox & explorer: enabled multiSelect
[ede] / libede / src / FileSystemBox.ec
index 201b508..2a397ae 100644 (file)
@@ -201,7 +201,8 @@ public:
       }
       get { return bits.treeBranches; }
    };
-   property bool navigateFolders { set { bits.navigateFolders = value; bits.foldersOnly = !value; } get { return bits.navigateFolders; } };
+   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 FileSystemNode node
    {
@@ -518,7 +519,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();
@@ -536,6 +537,7 @@ private:
 
    void LoadTree()
    {
+      bool isRoot = !strcmp(path, "/");
       //char startPath[MAX_LOCATION];
       FileSystemNode parent;
       FileSystemNode node;
@@ -550,53 +552,58 @@ private:
 
       delete root;
    #ifdef __WIN32__
-      root = FileSystemNode { type = computer, loaded = true, childrenLoaded = true };
-      root.name = rootName;
-      AddTreeNode(root, true, false, null);
-   #else
-      root = MakeFileSystemNode(FileStats { attribs = FileExists(path)}, path, path, bits.previewPictures, displaySystem);
-      //root.name = "/";
-      root.type = computer;
-      AddTreeNode(root, false, true, null);
-   #endif
-
-   #ifdef __WIN32__
-      while(listing.Find())
+      if(isRoot)
       {
-         int len = strlen(listing.name);
-         char info[MAX_LOCATION];
-         char name[MAX_LOCATION];
-         if(listing.stats.attribs.isDrive && 
-               len > 3 && !strncmp(&listing.name[1], ": [", 3))
-         {
-            strncpy(name, listing.name, 2);
-            name[2] = 0;
-            strncpy(info, &listing.name[4], len - 5);
-            info[len - 5] = 0;
-         }
-         else
+         root = FileSystemNode { loaded = true, childrenLoaded = true };
+         AddTreeNode(root, true, false, null);
+         while(listing.Find())
          {
-            strcpy(name, listing.name);
-            info[0] = 0;
+            int len = strlen(listing.name);
+            char info[MAX_LOCATION];
+            char name[MAX_LOCATION];
+            if(listing.stats.attribs.isDrive &&
+                  len > 3 && !strncmp(&listing.name[1], ": [", 3))
+            {
+               strncpy(name, listing.name, 2);
+               name[2] = 0;
+               strncpy(info, &listing.name[4], len - 5);
+               info[len - 5] = 0;
+            }
+            else
+            {
+               strcpy(name, listing.name);
+               info[0] = 0;
+            }
+
+            parent = MakeFileSystemNode(listing.stats, name, listing.path, bits.previewPictures, displaySystem);
+            if(info[0])
+               parent.info = CopyString(info);
+            parent.loaded = true;
+            AddTreeNode(parent, !listing.stats.attribs.isDirectory, listing.stats.attribs.isDirectory, root);
+            if(!listing.stats.attribs.isDirectory)
+               parent.childrenLoaded = true;
          }
 
-         parent = MakeFileSystemNode(listing.stats, name);
-         if(info[0])
-            parent.info = CopyString(info);
-         parent.loaded = true;
-         AddTreeNode(parent, !listing.stats.attribs.isDirectory, listing.stats.attribs.isDirectory, root, this);
-         if(!listing.stats.attribs.isDirectory)
-            parent.childrenLoaded = true;
+         node = FileSystemNode { name = msNetwork, type = network };
+         AddTreeNode(node, false, true, null);
+         node.row.collapsed = true;
       }
-
-      node = FileSystemNode { name = msNetwork, type = network };
-      AddTreeNode(node, false, true, null, this);
-      node.row.collapsed = true;
-      Sort(nameField, 1);
-      SelectRow(root.row);
+      else
    #endif
-      LoadTreeNode(root);
+      {
+         root = MakeFileSystemNode(FileStats { attribs = FileExists(path)}, path, path, bits.previewPictures, displaySystem);
+         AddTreeNode(root, false, true, null);
+         LoadTreeNode(root);
+      }
+
+      if(isRoot)
+      {
+         root.type = computer;
+         root.name = rootName;
+      }
+
       list.Sort(nameField, 1);
+      list.SelectRow(root.row);
    }
 
    void LoadTreeNode(FileSystemNode node)
@@ -608,13 +615,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);
@@ -655,7 +662,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);
@@ -1698,7 +1705,7 @@ ExplorerFileItem MakeFileItem(const FileAttribs attribs, const char * fileName,
    
    ExplorerFileItem item { };
 
-   //if(attribs.isFile) // TODO fix this in ecere
+   //if(stats.attribs.isFile) // -- should work now
    if(attribs.isDirectory)
    {
       extension[0] = 0;
@@ -1802,11 +1809,11 @@ public:
          }
       }
       else
-#ifdef __WIN32__
+/*#ifdef __WIN32__
          strcpy(outputPath, "/");
-#else
+#else*/
          strcpy(outputPath, name);
-#endif
+//#endif
 
    }