X-Git-Url: http://ecere.com/cgi-bin/gitweb.cgi?p=ede;a=blobdiff_plain;f=libede%2Fsrc%2FFileSystemBox.ec;h=b880c7570eff15c3641b0a737c28020bc4511920;hp=b73a3d3eae8b34e7526fd48828db44a0ee8d098e;hb=2838761ce69e0172c3a6d3a0ec62b180b061851b;hpb=22f5f68389b5f429aa201afd6ca429c190f3320a diff --git a/libede/src/FileSystemBox.ec b/libede/src/FileSystemBox.ec index b73a3d3..b880c75 100644 --- a/libede/src/FileSystemBox.ec +++ b/libede/src/FileSystemBox.ec @@ -391,7 +391,9 @@ public: } return node; }*/ -static FileSystemNode MakeFileSystemNode(const FileStats stats, const char * fileName, const char * filePath, const bool previewPicture, const DisplaySystem displaySystem) +static FileSystemNode MakeFileSystemNode(const FileStats stats, + const char * fileName, const char * filePath, + const bool previewPicture, const DisplaySystem displaySystem) { int len = strlen(fileName); char info[MAX_LOCATION]; @@ -457,7 +459,7 @@ static FileSystemNode MakeFileSystemNode(const FileStats stats, const char * fil class FileSystemBoxBits { - bool foldersOnly:1, details:1, treeBranches:1, previewPictures:1; + bool foldersOnly:1, filesOnly:1, details:1, treeBranches:1, previewPictures:1, navigateFolders: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; @@ -484,6 +486,7 @@ public: FileSystemNode selection; virtual bool Window::NotifyNodeSelect(FileSystemBox box, FileSystemNode node); + virtual bool Window::NotifyNodeOpen(FileSystemBox box, FileSystemNode node); property char * path { @@ -492,6 +495,8 @@ public: delete path; if(value && value[0]) path = CopyString(value); + if(locationBox) + locationBox.path = value; if(created) Load(); } @@ -500,7 +505,8 @@ public: //isset { return path && path[0]; } } - property bool foldersOnly { set { bits.foldersOnly = value; } get { return bits.foldersOnly; } }; + property bool foldersOnly { set { bits.foldersOnly = value; bits.filesOnly = !value; } get { return bits.foldersOnly; } }; + property bool filesOnly { set { bits.filesOnly = value; bits.foldersOnly = !value; } get { return bits.filesOnly; } }; property bool previewPictures { set { bits.previewPictures = value; } get { return bits.previewPictures; } }; property char * extensions { set { delete extensions; if(value && value[0]) extensions = CopyString(value); } get { return extensions; } } property bool details { set { bits.details = value; } get { return bits.details; } }; @@ -515,6 +521,7 @@ public: } get { return bits.treeBranches; } }; + property bool navigateFolders { set { bits.navigateFolders = value; bits.foldersOnly = !value; } get { return bits.navigateFolders; } }; property FileSystemNode node { @@ -530,6 +537,8 @@ public: } } + PathBox locationBox; + void Select(FileSystemNode node) { if(node.row) @@ -716,8 +725,35 @@ private: return true; } + bool NotifyDoubleClick(ListBox listBox, int x, int y, Modifiers mods) + { + return OpenNode(); + } + + bool NotifyKeyDown(ListBox listBox, DataRow row, Key key, unichar ch) + { + bool result; + if((SmartKey)key == enter) + result = OpenNode(); + else + result = true; + return true; + } }; + bool OpenNode() + { + bool result; + if(selection && selection.type.isFolder && bits.navigateFolders) + { + property::path = selection.path; + result = true; + } + else + result = NotifyNodeOpen(this.master, this, selection); + return result; + } + // Edit Menu Menu editMenu { menu, "Edit", e }; MenuItem itemEditCut @@ -795,7 +831,9 @@ private: list.Clear(); while(listing.Find()) { - if(!bits.foldersOnly || listing.stats.attribs.isDirectory) + if((!bits.foldersOnly && !bits.filesOnly) || + (bits.foldersOnly && listing.stats.attribs.isDirectory) || + (bits.filesOnly && !listing.stats.attribs.isDirectory/*listing.stats.attribs.isFile*/)) // TOCHECK: isFile broken? { FileSystemNode node = MakeFileSystemNode(listing.stats, listing.name, listing.path, bits.previewPictures, displaySystem); DataRow row = list.AddRow(); @@ -889,7 +927,9 @@ private: while(listing.Find()) { - if(!bits.foldersOnly || listing.stats.attribs.isDirectory) + if((!bits.foldersOnly && !bits.filesOnly) || + (bits.foldersOnly && listing.stats.attribs.isDirectory) || + (bits.filesOnly && !listing.stats.attribs.isDirectory/*listing.stats.attribs.isFile*/)) // TOCHECK: isFile broken? { FileSystemNode child = MakeFileSystemNode(listing.stats, listing.name, listing.path, bits.previewPictures, displaySystem); AddTreeNode(child, true, false, node); @@ -928,7 +968,9 @@ private: FileListing listing { path, extensions = extensions }; while(listing.Find()) { - if(!bits.foldersOnly || listing.stats.attribs.isDirectory) + if((!bits.foldersOnly && !bits.filesOnly) || + (bits.foldersOnly && listing.stats.attribs.isDirectory) || + (bits.filesOnly && !listing.stats.attribs.isDirectory/*listing.stats.attribs.isFile*/)) // TOCHECK: isFile broken? { FileSystemNode child = MakeFileSystemNode(listing.stats, listing.name, listing.path, bits.previewPictures, displaySystem); AddTreeNode(child, true, false, parent);