X-Git-Url: https://ecere.com/cgi-bin/gitweb.cgi?p=ede;a=blobdiff_plain;f=libede%2Fsrc%2FFileSystemBox.ec;h=feebf15821763033ba2aafd604810dc2f71d2531;hp=201b508621227e9e833eba544b5336d0412a7100;hb=6bba07aea2613801a91d94f35584f86d1d6413df;hpb=83e8917d600247319d0cbe9dc79991d7bef99638 diff --git a/libede/src/FileSystemBox.ec b/libede/src/FileSystemBox.ec index 201b508..feebf15 100644 --- a/libede/src/FileSystemBox.ec +++ b/libede/src/FileSystemBox.ec @@ -8,7 +8,7 @@ static char * rootName = "File System"; #endif private: -define guiApp = ((GuiApplication)__thisModule); // how to do this in a dll? +define guiApp = (GuiApplication)((__thisModule).application); define selectionColor = guiApp.currentSkin.selectionColor; //Color { 10, 36, 106 }; static char * fileIconNames[] = @@ -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 } @@ -1923,7 +1930,7 @@ public: //surface.WriteTextDots(alignment, x + textOffset, y + 2, width - textOffset, name, strlen(name)); surface.WriteTextDots(alignment, xStart, y + 2, width, label, len); - //if(!guiApp.textMode) -- how to do this in a dll? + if(!guiApp.textMode) { if(displayFlags.current) {