X-Git-Url: https://ecere.com/cgi-bin/gitweb.cgi?p=ede;a=blobdiff_plain;f=libede%2Fsrc%2FFileSystemBox.ec;h=61f5df958bd841290a597f46a2c79fad354c8afd;hp=1a32a80eafb2f33cabde428ca18919708d80dcb3;hb=0e4fcdfc4d025c0e6136400d73f4c4b4f0bdb6d1;hpb=2a572a80b2e01b468735e0ab3b4f821301deb804 diff --git a/libede/src/FileSystemBox.ec b/libede/src/FileSystemBox.ec index 1a32a80..61f5df9 100644 --- a/libede/src/FileSystemBox.ec +++ b/libede/src/FileSystemBox.ec @@ -321,6 +321,29 @@ public: if(icon) { + w = icon.width; + h = icon.height; + } + if(type == pictureFile && fsb.previewPictures && bitmap) + { + surface.SetForeground(white); + surface.blend = true; + //#ifndef __linux__ + //surface.Filter(bitmap, (clientSize.w - w) / 2,(clientSize.h - h) / 2, 0,0, w, h, bitmap.width, bitmap.height); + //surface.Filter(bitmap, x + indent/* * indentSize*/ + 2, y, 0, 0, w, h, bitmap.width, bitmap.height); + surface.Filter(bitmap, x,y,0,0, w, h, bitmap.width, bitmap.height); + //#else + // Until Filter / Stretch works with X + //surface.Blit(bitmap, (clientSize.w - bitmap.width) / 2,(clientSize.h - bitmap.height) / 2, 0,0, bitmap.width, bitmap.height); + // surface.blend = true; + //surface.Blit(bitmap, x + indent/* * indentSize*/ + 2, y,0,0, w, h); + //surface.Blit(bitmap, x,y,0,0, bitmap.width, bitmap.height); + //#endif + //bitmap.Free(); + //delete bitmap; + } + else if(icon) + { //surface.blend = true; //surface.alphaWrite = blend; surface.SetForeground(white); @@ -450,7 +473,7 @@ static FileSystemNode MakeFileSystemNode(const FileStats stats, if(node.type == pictureFile && previewPicture) { - node.bitmap = Bitmap { }; + node.bitmap = Bitmap { alphaBlend = true }; node.bitmap.Load(filePath, null, displaySystem); } @@ -459,7 +482,7 @@ static FileSystemNode MakeFileSystemNode(const FileStats stats, class FileSystemBoxBits { - bool foldersOnly:1, filesOnly: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; @@ -486,6 +509,7 @@ public: FileSystemNode selection; virtual bool Window::NotifyNodeSelect(FileSystemBox box, FileSystemNode node); + virtual bool Window::NotifyNodeOpen(FileSystemBox box, FileSystemNode node); property char * path { @@ -494,6 +518,8 @@ public: delete path; if(value && value[0]) path = CopyString(value); + if(locationBox) + locationBox.path = value; if(created) Load(); } @@ -518,6 +544,7 @@ public: } get { return bits.treeBranches; } }; + property bool navigateFolders { set { bits.navigateFolders = value; bits.foldersOnly = !value; } get { return bits.navigateFolders; } }; property FileSystemNode node { @@ -533,6 +560,8 @@ public: } } + PathBox locationBox; + void Select(FileSystemNode node) { if(node.row) @@ -554,6 +583,11 @@ public: return null; } + void Refresh() + { + Load(); + } + private: FileSystemBoxBits bits; @@ -586,9 +620,9 @@ private: } } - DataField nameField { dataType = "FileSystemNode", width = 240, userData = this }; + DataField nameField { dataType = "FileSystemNode", width = 240, userData = this, freeData = false }; DataField typeField { header = "Type", dataType = /*"String"*/ "char *", width = 40, freeData = false }; - DataField sizeField { header = "Size", dataType = "FileSize", width = 96, alignment = right }; + DataField sizeField { header = "Size", dataType = "FileSize", width = 96, alignment = right, freeData = false }; bool OnPostCreate() { @@ -719,8 +753,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