X-Git-Url: https://ecere.com/cgi-bin/gitweb.cgi?p=ede;a=blobdiff_plain;f=libede%2Fsrc%2FFileSystemBox.ec;h=e184693e9848f0e13e5790a52f5ea0a2035ab1ce;hp=f21d8a6cd70007e4a8db4c60bc011b22ad30b1f5;hb=47c68b7269adbb7d1b22fefb8b4cecbd3afb1c0c;hpb=2b25fa110619a854b35d01d7952f95b9c1f3893c diff --git a/libede/src/FileSystemBox.ec b/libede/src/FileSystemBox.ec index f21d8a6..e184693 100644 --- a/libede/src/FileSystemBox.ec +++ b/libede/src/FileSystemBox.ec @@ -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; @@ -203,6 +203,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 { @@ -229,16 +230,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() @@ -262,6 +322,7 @@ private: InitFileIcons(); list.AddField(nameField); + bits.autoLoad = true; } ~FileSystemBox() { @@ -284,7 +345,8 @@ private: bool OnPostCreate() { - Load(); + if(bits.autoLoad) + Load(); return true; } @@ -413,8 +475,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) @@ -432,12 +495,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; } @@ -666,14 +725,14 @@ private: (bits.filesOnly && listing.stats.attribs.isFile)) { FileSystemNode child = MakeFileSystemNode(listing.stats, listing.name, listing.path, bits.previewPictures, displaySystem); - AddTreeNode(child, true, false, parent); + AddTreeNode(child, listing.stats.attribs.isFile, !listing.stats.attribs.isFile, parent); added = true; } } if(!added) added = true; } - //parent.childrenLoaded = true; + parent.childrenLoaded = true; } void AddTreeNode(FileSystemNode node, bool loaded, bool addLoader, FileSystemNode addTo)