X-Git-Url: https://ecere.com/cgi-bin/gitweb.cgi?p=ede;a=blobdiff_plain;f=libede%2Fsrc%2FFileSystemBox.ec;h=a4bfd345fc490a11bcfb601e97772566aec659bc;hp=aa2d30440a478f8eaa4926a43e55d3683b6454d3;hb=4fa4d899642bfbbdcfde6b84fc6d742364321b8d;hpb=af726215c6576ef2134150ca2c4a4f2f12d9f4eb diff --git a/libede/src/FileSystemBox.ec b/libede/src/FileSystemBox.ec index aa2d304..a4bfd34 100644 --- a/libede/src/FileSystemBox.ec +++ b/libede/src/FileSystemBox.ec @@ -229,16 +229,75 @@ public: } } + FileSystemNode SelectLocation(char * location) + { + int c; + char * temp; + char step[MAX_LOCATION]; + + //StringArray steps { growingFactor = 4 }; + Array steps { }; + FileSystemNode result = null; + FileSystemNode node = null; + + temp = CopyString(location); + while(temp[0]) + { + GetLastDirectory(temp, step); + StripLastDirectory(temp, temp); + steps.Add(CopyString(step)); + } + + for(c = steps.count - 1; c >= 0; c--) + { + char * t = steps[c]; + node = Find(steps[c], node); + if(!node) + break; + //Select(node); + } + if(node) + { + result = node; + Select(result); + } + + steps.Free(); + delete temp; + delete steps; + + return result; + } + FileSystemNode Find(const char * name, FileSystemNode parent) { - FileSystemNode node; - FileSystemNode start = parent ? parent : root; - if(!start.loaded || !start.childrenLoaded) - LoadTreeNode(start); - for(node = start.children.first; node; node = node.next) - if(node.name && !strcmpi(node.name, name)) - return node; - return null; + FileSystemNode node = null; + FileSystemNode result = null; + if(!parent/* && !strcmp(name, "/")*/) + { + DataRow row; + for(row = list.firstRow; row; row = row.next) + { + node = (FileSystemNode)row.tag; + if(node.name && !fstrcmp(node.name, name)) + break; + } + if(node) + result = node; + //result = root; + } + else + { + FileSystemNode start = parent ? parent : root; + if(!start.loaded || !start.childrenLoaded) + LoadTreeNode(start); + for(node = start.children.first; node; node = node.next) + if(node.name && !fstrcmp(node.name, name)) + break; + if(node) + result = node; + } + return result; } void Refresh() @@ -600,7 +659,7 @@ private: if(isRoot) { root.type = computer; - root.name = rootName; + root.label = rootName; } list.Sort(nameField, 1); @@ -1784,6 +1843,7 @@ public: int indent; char * path; char * name; + char * label; char * extension; char * info; DataRow row; @@ -1800,7 +1860,8 @@ public: FileSystemNode up; if(parent) { - strcpy(outputPath, name); + if(name) + strcpy(outputPath, name); for(up = parent; up; up = up.parent) { char temp[MAX_LOCATION]; @@ -1871,6 +1932,7 @@ public: } //if(name) delete name; + delete label; delete info; } @@ -1889,7 +1951,7 @@ public: int len; int w, h; //int textOffset; - char label[MAX_FILENAME]; + char string[MAX_FILENAME]; Bitmap icon; @@ -1904,10 +1966,10 @@ public: return; if(info) - sprintf(label, "%s [%s]", name, info); + sprintf(string, "%s [%s]", label ? label : name, info); else - strcpy(label, name); - len = strlen(label); + strcpy(string, label ? label : name); + len = strlen(string); if(!icon) { @@ -1919,7 +1981,7 @@ public: //textOffset = indent * indentSize + (icon ? (icon.width + 4) : 0); surface.TextOpacity(false); - surface.TextExtent(label, len, &w, &h); + surface.TextExtent(string, len, &w, &h); h = Max(h, 16); // Draw the current row stipple @@ -1929,7 +1991,7 @@ public: surface.Area(xStart - 3, y, xStart + w + 1, y + h - 1); //surface.WriteTextDots(alignment, x + textOffset, y + 2, width - textOffset, name, strlen(name)); - surface.WriteTextDots(alignment, xStart, y + 2, width, label, len); + surface.WriteTextDots(alignment, xStart, y + 2, width, string, len); if(!guiApp.textMode) {