@@ -14,27 +14,53 @@ enum ReadType {
1414 Bytes ;
1515}
1616
17+ abstract Filter (FileFilter ) from FileFilter to FileFilter {
18+ public inline function new (ext : String , ? desc : String ) {
19+ this = {
20+ ext : ext ,
21+ desc : desc != null ? desc : ' ${ext .toUpperCase ()} File'
22+ }
23+ }
24+
25+ @:from static inline function fromObject (obj : {ext : String , ? desc : String }): Filter {
26+ return new Filter (obj .ext , obj .desc );
27+ }
28+
29+ @:from static inline function fromOpenFLFilter (filter : openfl.net. FileFilter ): Filter {
30+ return new Filter (filter .extension , filter .description );
31+ }
32+
33+ public var ext (get , never ): String ;
34+ public var desc (get , never ): String ;
35+
36+ function get_ext (): String return this .ext ;
37+ function get_desc (): String return this .desc ;
38+ }
39+
1740class ImprovedFileHandling {
1841 public static var lastPath : String = " " ;
19- public static function openFile (title : String , ? filters : Array < FileFilter >, ? preserve_cwd : Bool = true ): String {
42+ public static function openFile (title : String , ? filters : OneOrMore < Filter >, ? preserve_cwd : Bool = true ): String {
2043 if (filters != null ) {
2144 for (filter in filters ) {
22- filter .desc = filter .desc != null ? filter .desc : filter .ext .toUpperCase () + " File" ;
45+ var f : FileFilter = filter ;
46+ f .desc = f .desc != null ? f .desc : f .ext .toUpperCase () + " File" ;
2347 }
2448 }
25- return FilePopup .open (title , filters , preserve_cwd );
49+ return FilePopup .open (title , cast filters , preserve_cwd );
2650 }
2751
28- public static function saveFile (title : String , ? filter : FileFilter , ? preserve_cwd : Bool = true ): String {
52+ public static function saveFile (title : String , ? filter : Filter , ? preserve_cwd : Bool = true ): String {
2953 if (filter != null ) {
30- filter .desc = filter .desc != null ? filter .desc : ' ${filter .ext .toUpperCase ()} File' ;
54+ var f : FileFilter = filter ;
55+ f .desc = f .desc != null ? f .desc : ' ${f .ext .toUpperCase ()} File' ;
3156 }
32- var filePath = FilePopup .save (title , filter , preserve_cwd );
57+ var filePath = FilePopup .save (title , cast filter , preserve_cwd );
3358 if (filePath != null && filter != null ) {
34- var ext = " ." + filter .ext ;
59+ var f : FileFilter = filter ;
60+ var ext = " ." + f .ext ;
3561 if (! filePath .endsWith (ext )) {
3662 if (filePath .endsWith (" ." )) {
37- filePath + = filter .ext ;
63+ filePath + = f .ext ;
3864 } else {
3965 filePath + = ext ;
4066 }
@@ -48,10 +74,11 @@ class ImprovedFileHandling {
4874 return FilePopup .folder (title , preserve_cwd ).trim ();
4975 }
5076
51- public static function loadFile (title : String , ? filters : Array < FileFilter >, readType : ReadType , ? operation : Dynamic -> Dynamic , ? preserve_cwd : Bool = true ): Dynamic {
77+ public static function loadFile (title : String , ? filters : OneOrMore < Filter >, readType : ReadType , ? operation : Dynamic -> Dynamic , ? preserve_cwd : Bool = true ): Dynamic {
5278 if (filters != null ) {
5379 for (filter in filters ) {
54- filter .desc = filter .desc != null ? filter .desc : ' ${filter .ext .toUpperCase ()} File' ;
80+ var f : FileFilter = filter ;
81+ f .desc = f .desc != null ? f .desc : ' ${f .ext .toUpperCase ()} File' ;
5582 }
5683 }
5784 var filePath = openFile (title , filters , preserve_cwd );
@@ -64,16 +91,18 @@ class ImprovedFileHandling {
6491 return null ;
6592 }
6693
67- public static function saveOperation (title : String , ? filter : FileFilter , writeType : ReadType , data : Dynamic , ? preserve_cwd : Bool = true ): Bool {
94+ public static function saveOperation (title : String , ? filter : Filter , writeType : ReadType , data : Dynamic , ? preserve_cwd : Bool = true ): Bool {
6895 if (filter != null ) {
69- filter .desc = filter .desc != null ? filter .desc : ' ${filter .ext .toUpperCase ()} File' ;
96+ var f : FileFilter = filter ;
97+ f .desc = f .desc != null ? f .desc : ' ${f .ext .toUpperCase ()} File' ;
7098 }
7199 var filePath = saveFile (title , filter , preserve_cwd );
72100 if (filePath != null && filePath .trim () != " " ) {
73- var ext = " ." + filter .ext ;
101+ var f : FileFilter = filter ;
102+ var ext = " ." + f .ext ;
74103 if (! filePath .endsWith (ext )) {
75104 if (filePath .endsWith (" ." )) {
76- filePath + = filter .ext ;
105+ filePath + = f .ext ;
77106 } else {
78107 filePath + = ext ;
79108 }
@@ -98,24 +127,26 @@ class ImprovedFileHandling {
98127 */
99128 public static function multiSaveOperation (
100129 title : String ,
101- ? filter : FileFilter ,
130+ ? filter : Filter ,
102131 writeType : ReadType ,
103132 mainData : Dynamic ,
104133 ? extraFiles : Array <{name : String , data : Dynamic }>,
105134 ? preserve_cwd : Bool = true
106135 ): Bool {
107136 if (filter != null ) {
108- filter .desc = filter .desc != null ? filter .desc : ' ${filter .ext .toUpperCase ()} File' ;
137+ var f : FileFilter = filter ;
138+ f .desc = f .desc != null ? f .desc : ' ${f .ext .toUpperCase ()} File' ;
109139 }
110140 var filePaths : Array <String > = [];
111141
112142 // Save main file
113143 var mainFilePath = saveFile (title , filter , preserve_cwd );
114144 if (mainFilePath != null && mainFilePath .trim () != " " ) {
115- var ext = " ." + filter .ext ;
145+ var f : FileFilter = filter ;
146+ var ext = " ." + f .ext ;
116147 if (! mainFilePath .endsWith (ext )) {
117148 if (mainFilePath .endsWith (" ." )) {
118- mainFilePath + = filter .ext ;
149+ mainFilePath + = f .ext ;
119150 } else {
120151 mainFilePath + = ext ;
121152 }
@@ -133,7 +164,7 @@ class ImprovedFileHandling {
133164 var extraPath = Path .join ([dir , extra .name ]);
134165 if (! extraPath .endsWith (ext )) {
135166 if (extraPath .endsWith (" ." )) {
136- extraPath + = filter .ext ;
167+ extraPath + = f .ext ;
137168 } else {
138169 extraPath + = ext ;
139170 }
0 commit comments