diff --git a/uppsrc/CtrlLib/FileSel.cpp b/uppsrc/CtrlLib/FileSel.cpp index 20dc10c07..785a2d9a4 100644 --- a/uppsrc/CtrlLib/FileSel.cpp +++ b/uppsrc/CtrlLib/FileSel.cpp @@ -565,7 +565,7 @@ static auxthread_t auxthread__ sExeIconThread(void *) return 0; } -void LazyFileIcons::Done(Image img) +void LazyExeFileIcons::Done(Image img) { if(pos >= ndx.GetCount()) return; @@ -580,7 +580,7 @@ void LazyFileIcons::Done(Image img) pos++; } -String LazyFileIcons::Path() +String LazyExeFileIcons::Path() { if(pos >= ndx.GetCount()) return Null; @@ -591,7 +591,7 @@ String LazyFileIcons::Path() return ToSystemCharset(AppendFileName(dir, f.name)); } -void LazyFileIcons::Do() +void LazyExeFileIcons::Do() { int start = msecs(); for(;;) { @@ -604,7 +604,8 @@ void LazyFileIcons::Do() sExeMutex.Enter(); bool running = sExeRunning; if(!running) { - done = path == sExePath; + path == sExePath; + done = path.GetCount(); memcpy(&info, &sExeInfo, sizeof(info)); *sExePath = '\0'; memset(&sExeInfo, 0, sizeof(sExeInfo)); @@ -633,7 +634,7 @@ void LazyFileIcons::Do() } } -void LazyFileIcons::ReOrder() +void LazyExeFileIcons::ReOrder() { // gather .exe files; sort based on length so that small .exe get resolved first ndx.Clear(); Vector len; @@ -648,7 +649,7 @@ void LazyFileIcons::ReOrder() Restart(0); } -void LazyFileIcons::Start(FileList& list_, const String& dir_, Callback3 WhenIcon_) +void LazyExeFileIcons::Start(FileList& list_, const String& dir_, Callback3 WhenIcon_) { list = &list_; dir = dir_; @@ -865,8 +866,111 @@ void FileSel::SearchLoad() #ifdef GUI_WIN lazyicons.Start(list, d, WhenIcon); #endif +#ifdef _MULTITHREADED + StartLI(); +#endif } +#ifdef _MULTITHREADED + +StaticMutex FileSel::li_mutex; +void (*FileSel::li_current)(const String& path, Image& result); +String FileSel::li_path; +Image FileSel::li_result; +bool FileSel::li_running; +int FileSel::li_pos; + +void FileSel::LIThread() +{ + String path; + void (*li)(const String& path, Image& result); + { + Mutex::Lock __(li_mutex); + path = li_path; + li = li_current; + } + Image result; + if(path.GetCount()) + li(path, result); + if(!IsNull(result) && result.GetWidth() > 16 || result.GetHeight() > 16) + result = Rescale(result, 16, 16); + { + Mutex::Lock __(li_mutex); + li_result = result; + li_running = false; + } +} + +String FileSel::LIPath() +{ + return li_pos >= 0 && li_pos < list.GetCount() ? FilePath(list.Get(li_pos).name) : Null; +} + +void FileSel::DoLI() +{ + int start = msecs(); + for(;;) { + for(;;) { + bool done = false; + String path = LIPath(); + if(IsNull(path)) + return; + bool running; + Image img; + { + Mutex::Lock __(li_mutex); + running = li_running; + if(!running) { + done = li_path == path && li_current == WhenIconLazy; + img = li_result; + } + } + if(done) { + if(li_pos < 0 || li_pos >= list.GetCount()) + return; + if(!IsNull(img)) { + const FileList::File& f = list.Get(li_pos); + WhenIcon(f.isdir, f.name, img); + if(f.hidden) + img = Contrast(img, 200); + list.SetIcon(li_pos, img); + } + li_pos++; + } + if(!running) + break; + Sleep(0); + if(msecs(start) > 10 || Ctrl::IsWaitingEvent()) { + ScheduleLI(); + return; + } + } + + String path = LIPath(); + if(IsNull(path)) + return; + { + Mutex::Lock __(li_mutex); + if(!li_running) { + li_current = WhenIconLazy; + li_path = path; + li_running = true; + Thread::Start(callback(LIThread)); + } + } + } +} + +void FileSel::StartLI() +{ + if(WhenIconLazy) { + li_pos = 0; + ScheduleLI(); + } +} + +#endif + String TrimDot(String f) { int i = f.Find('.'); if(i >= 0 && i == f.GetLength() - 1) @@ -2037,6 +2141,8 @@ FileSel::FileSel() { list.AutoHideSb(); places.AutoHideSb(); + + WhenIconLazy = NULL; } FileSel::~FileSel() {} diff --git a/uppsrc/CtrlLib/FileSel.h b/uppsrc/CtrlLib/FileSel.h index e7bc868ee..7554c2f7a 100644 --- a/uppsrc/CtrlLib/FileSel.h +++ b/uppsrc/CtrlLib/FileSel.h @@ -129,7 +129,7 @@ void SortByExt(FileList& list); #ifdef GUI_WIN // Helper class for lazy (using aux thread) evaluation of .exe icons in Win32 -class LazyFileIcons { +class LazyExeFileIcons { TimeCallback tm; String dir; FileList *list; @@ -140,7 +140,7 @@ class LazyFileIcons { AuxMutex mutex; void Do(); - void Restart(int delay) { tm.KillSet(delay, callback(this, &LazyFileIcons::Do)); } + void Restart(int delay) { tm.KillSet(delay, callback(this, &LazyExeFileIcons::Do)); } String Path(); void Done(Image img); @@ -183,7 +183,7 @@ protected: #endif #ifdef GUI_WIN - LazyFileIcons lazyicons; + LazyExeFileIcons lazyicons; #endif DisplayCtrl preview_display; @@ -202,6 +202,22 @@ protected: bool bidname; bool appmodal; +#ifdef _MULTITHREADED + static StaticMutex li_mutex; + static void (*li_current)(const String& path, Image& result); + static String li_path; + static Image li_result; + static bool li_running; + static int li_pos; + TimeCallback li_tm; + + static void LIThread(); + String LIPath(); + void StartLI(); + void DoLI(); + void ScheduleLI() { li_tm.KillSet(0, THISBACK(DoLI)); } +#endif + void LoadNet(); void SelectNet(); bool PatternMatch(const char *fn); @@ -237,9 +253,12 @@ protected: using WithFileSelectorLayout::Title; typedef FileSel CLASSNAME; -public: +public: Callback3 WhenIcon; +#ifdef _MULTITHREADED + void (*WhenIconLazy)(const String& path, Image& result); +#endif void Serialize(Stream& s); diff --git a/uppsrc/CtrlLib/src.tpp/FileSel$en-us.tpp b/uppsrc/CtrlLib/src.tpp/FileSel$en-us.tpp index e0a6cd7a6..52303bb51 100644 --- a/uppsrc/CtrlLib/src.tpp/FileSel$en-us.tpp +++ b/uppsrc/CtrlLib/src.tpp/FileSel$en-us.tpp @@ -17,275 +17,7 @@ torLayout][@(0.0.255) <][_^TopWindow^ TopWindow][@(0.0.255) >]_&] [s0; &] [s2;%% @@image:1755&1627 -ԁ흉Ń₎ꮸ졒тܲє -΢ɤʤ܄ϝہϹك쑜 -ԕщľӳǟ뛏挱ɗƢĉˏގ瞅ߧ -șġƣ釭Ȧͱަ͊ -ْف뭆߉ݔԔ޽ⷚً෵˔ -覬߲Шâ͔вﺵѭ̔û߻ -Ͻ˥䉖ȻɬϺݮ᰽Ƿҷ -ƛƛܕ񿋦Ϸ稺Һܗðܑ߼ -׹獴ؔ͡؛Ư͟ɴ暦ݭ˷ -þӴ楘к׉ҺԊފ꿻˭Ρ؍߈ -Ŏ̾轟즡ȼݪÿ޼Ď -Ѱ杨죽܊ޝڧƮ蓳ϟƿܣӻ -瞾ߘ޼˾ԥۙڻ귆Œߣѣ -۷߾׌壟Κ޷ -ƣλ׹ފ˷疔߾ -طܳū凜׸߸Ϟىۗݘԛۖ -ѵᅯʟ±ßܷߺ䋗嫜͞ -൧ܱшթ߷تɽ럧ӱ -ȍۖƾ򎟝ܓоͷ -Է̦ௌͨʙƯۘϟ -бҜոޘҨߘۙ -ū⡆𼹜ԍ缯ޏ桽чޟձ߶ˑӱǾ -ǎߙ܍ѱߘ㑽ۭ鏏ƛ -ܷԷ׵싱ɺ玭Ӟӛߏ٦Ƿ -܈ûꯚΟℎß󆮛 -́ïן҈̓朌ٓ -ҫ玧ڷẶ߼Կݞ̶ɌÁ -히ٶלßɳ㵿̷̼Ɓ잿ձ -މܓһ͌۸ڃɿ遲ϳオ -뙖𛏦Ӈ⣬ͽҿ֛Ӈθޑ -ޘ̌ٓ줽֓ϱލƟݪζ뷈 -©ҩެό׍ؿЫ -ٻ篎ϙæ㰧Ҟ𙎥皅ḕ -οÜdžǼ铽ϴ˻ȱ㛌 -۴æ߶Ջ׿ۮ̽ݜܴ -ًхϞӷ阕Εчˎﲩϓ -߾ޓǘӋ⁇۶ճ対߾ϙ߿ -ܕΞŃڻۯᚻ֗쟙ù -采ё×̙޹ٗ۷޲ۓԔnjشǜҼ眱 -׽ȑӃԟȑ뻟Դٴ -̛֟ǿп眵烃޿ޔڿǏ -ͮڗ圽⧷ܝާ׶ӚḋՂͭם֧ -ӳ뽗ٓշ韇߳ӿޣ٘ -Ƙ˱ί웻ؖ姿Ö姼щľ -ԗ͗޿ɿ岁Ёޮև -쟮߳⎩㽯ظ忼ɯٻ쭓Ӵ -跌ﯸǝ盄ٷӑ -̤փʖ졻ﰻ蜝 -ֳ񏖽ۢӷǯ쩟ʬǭݾאƈ泊κðݧ -˙𺡴ǷˡǾجܺ᷼ڳó˜쥋 -׎ةꘆḠǧᘆ˱زðܾގϯʝ -˸ч׮ɾٛꠉۄ̑Ã˖ވ -ǂ֒ϻŴش˻ԏ˒Å -ӛᑸօڔک׮וŮϥ٫ -ˏե΢ŋͳⱗؠӥʧ -ٿٳ汃à󽓪ʓ߾˵לϿ -ؒ֩޼֢ª蔀֚ʌЂᙂҴ -ʎ㫲ضޑюޑ÷͘ݜޗީ߁ -ʖޗאۓ҂ӛݢ޵շȘȦȁɊَ몙ߥʿ٢ -ѵ򪇂˂֐˿ݺ׃̝Уǡߛȉ -ۇ㯮˰Ҙٻتƞĵ۹дѥ귨攈 -얭誚į倜λ퍖 -▙ܑƜ򃐚ڠޗ޵홗ę٫ڽ˦ -Ǜ햑ًٚöđŻ͖˽ژæƉ -Ƀ򴳣Ұ۲ۮ³֯筒ׁœ -҇ǯ迗ۺÕ󸷐ܜĢޣ -ǷٴϦ۸ٜŖЕٚ݅ѷڭŁǜֳҀ -ߔȎڹNJ́ڐΙУŎ -սųǎ𤃯͎֒þŦձݢխ -向׏ǖʾҎϾ̵앥ŵ߶ -ܓƆ⯗֞瑛ʼn˥篝 -蠏ߒل®ۊǜ˽攓؛篩٬戂ٻ -ծޭ麮njٟގׅԹ -ټŸǷکϼɇ׭󆵖ģɺ綰ӻ޷ -툺ʎϬ°ﰗௌцᘆ䥌Αﳃ -Ϫޚᢏхœˈ˔骉ȣˣƼ̍ -ԴԭҨү̝ۼیӥLJۨۦ񩄬ĂҴŘݏ˖ -ޗѮ̍ԆԔĭ˄ä⚇۹պݺΌ -ѷطƼВ¤լ߰Γҥ -߅Ǭ釚ͿߺʣŬݏ˛׵߱ -؉ݘӭҌ̅ݿǺۑ -ت቞ћه묝ސն쯽؃Ȫλʾ栾ڶĬȽ -қҶˬ⩰ŜĉՙҖߦǫӕȎ -ػ韒ߝ֣ۗפұƒ -Ɣه鯵풸ܖؤƜ߂ڮޱӕ޽駦 -̉ݿђҵ޾ڛїƳ렻ȍƵҦ͝ɲ榯첱ލ -ާߺ甥Ȣ𝎏ҹLJ악犹޺ -ŹЉϵڂ”ġǚϗρ쭜ШՃ”nj쭜ШЫ̯ާ -ώ׶ƖᄝݹڂЏ𶣛띈ɪެ -򠮈⬴Ď˗ǛӖڶņٺɢ -뻒őצۋ̼ۈ͓ݧʟ򯡒ٚ˔ -݉ԕ׌ݖۢхŇÛ눽䂓ͫ -֕՟޳뢜ҭ͒¥Ʋڐ -֞鹤ݶȄ𫧽̈́ハ뫡ΟվԤڄӖ -ˡΫ寪Ĺꪙェ窆ټռڰѿ -į·ޗ诵ս޾յޭǜ† -ޖơصޗՃ㌭㰞ךɲ؈ĄڴޢӶ봳е -˻䦼̵̽թՊ쵨 -ոϡ֡Ą™ت߄©”˄ -ǷڕƉ֗檁ޅ’ͷ෌ػ흳̺Ĉ -߮׷Ɓߒ䯶ك̫뵪ҜɊ޵ -ځ۸πﰇ˓ȬҰϏښ㥕 -٫ޢüȒڟǹϔ˪Аǯʸƪ -쁩ōĴ᫽Ճ߫ӥӒ⅁Ϫޢԏ͇ -ɰްҦ³Ԑ -˒ڟڪӁޱ嫽lj̤ -ӱה㧅ژˉ͗ߪԭިٲƕ™Ǽխ -՗֒ްׇ̂כҔً̕ҒȂ儔Ɲܺ뢃ު܅ -Ɲ䜧ϼоϚ٫ՃՉ߹ʛͷ -̜˅ݽǎߜ݅Ūꅣף򓽤⬳Ģ -ܟ׫Ցηϔߵܬćϋǹ -磭إѩՑӅǡ̦㫶̢в愭 -߰׵ϬˬʫԶ܉㕓ȜœۺᅭՆ͑Ъ -͵ʹҫҗثѲӘ➯ՁֲͱŪՊý -ǻނ̡̜؛޶ٵډӫܙ˒њ֩Ծ -풸ഏגՃۺηԻђ˦®ﰦն -󉜺Ӻގīǡػය -܌ⰷ샅€ӐчШڐ”Ȅո -≰̜ݸҪ˗ѳ񩰾ʾԂ -ςń؆۷Ğȵ͕ۺǪ -Չ͑ڣɗ߀Ыˇ͙Վ󘋩ߋ͵ -كù᮫զӍڥͩұ߷ғԞ -⯶𾙜ٖӫˋօ߻ʇރ٘փƬՕ -ԹҞįƪۢҵُ޺꯵݂ߪ -ʦ̍ԒϕμǿճګǞ -浩DŽщ㦫퀇ޟ¤Ɲ䮴鄰 -񄰅ًØڴԭ̆꛰ʵ㨗ۨߌ -䲡ݏıęեƧÝڈߩ۲ -Ҟ֕񿰾ݡӺ륶ѣε􉹝 -ה鲹ڝؽ㱺ԯԪѽۇﺬ썒ٚޚ -օᝏ徏ӢԀ˔ߚꟊڿګⷙǏ类뮢Ȗ -멟毹옰듶զЙԅە菓㨱Ί܀ -鷺㯴͟἗Է˒ԑڴ됖򪡶ˑا -ےױۢ凈蛩ˈԯ׹̡㭭뉦 -ŕԽҦ؛ĉˋӮ׋ȥDz竐 -¹ڂ”ծ֣즶ڧޠ -毎ɂԁᄁօ֮ޒȽۍΦҥ -̡ͥצו۫īΥ몭⩡͒۾ -dzʬ뽤ԕثםʉҲڍ񋽽ܕ -ލ𶍳̀ίʭڇܴԦ٤֦؞䄯ڱϥڻޖ -ʢ״¸ޢɩѱ֦ʹ؟ԧұ -㎉ճ޶Վݢöࠍѵ߲銴ÿٛۈӦ -󳗕Яނ۽įᑽͪ􎎥šҰ -鯵۱ըҽ똃ˠ睭ϑˢ۾Ǭͥޢ㖘Ģ -՞ﮰҁԴԱͱŇؾމÏ򟩆 -̱ÐܺܥكЉŜ˜Ղ؋ -ޠ뾚尷ޠʶ˹Ӱђȉޟގ -ύ쑵٫ҽȈேɻہߖڒ꛹ -Ȕԇվ뱔󺫮Ɗ̰עԐķ͛ߛǥ -갗Рͺڬ̫ʫ߫ -ߥԣƶկѰثԷލ餦 -ΰߛ݂뿗۳Û呧ۏț -˓䏪栟籫Ǟӌ搬ː˜Ղ؋ -܅ƝˆӐ򷟽揌򸛜 -ުŦ绠߄̡㥩Ƕ祿ɼԸْکـ -ژؔᲟ؄׮Ɵ޿Ȫ뾲㨸ېھ۟ -˳͹Խͅ؎⩧ɀ垦ڼ֫Ë -૖砽݀κڲੇ㌎ɺNjĆͦ˙ -㌣殒׬՜Ԅ̋ᲅҙ׋Ѣ -؛ۄ߸Ƿٶ熟ݺڿܖع׮ -㖦ѱDžԧՃȤکвכ튂 -Ëν̭ەՐՌֹҶҬ -ˤΗⲅҋҒҐ£ˆӐч򡄩Ш”ф毮 -Ӑ雵ėӍʹ㓲Ҩܚԕ욇 -᧏ŔӝϠҫ鞖ͺ։˽¢ϰφ -ꄓױޞ蓅걤흓Śջڥ銴Ԡԭ̣ -둻٫˔ޚĜ鋑ɪۇڎȾ쮭ޗ -ڢٱ򺪱ըْ鏩˫҉Ÿ -󪔻ٛڌĜދƜ尭ΗݯїƦަ -ͭԶߪڛ׀æŸϙ̿ͬՒ -駢웕֩ꑻ갷ʰᤓכ쇃̢ -ҌՍ؄쮒ᾬոҪ󙽐¤ү䮴ꠄԑˆ -٫ފձՕݤ -嬨ߦ驶ߒĖҲΊ܃Î⺔ʔ -矤Ҫމӓ흪ʥ®ϻʥ߫ڠۈ -քث栤ྕҨܤï֘˒ﮂݸ܍й -ǐ܋ǸՅ߫ښԃԆյ؛ʊݱ -ڒެҚ䧀ۙڜŗÙ찫ɖ쵵ǧ﨤 -搖Ʌ⭺ǭȏĥꗄĦռƢߓڂԂ -̵޺ш⑂ڳ¼ʶϔ͉ΐ -˜Ղ؋ϮŌľŘ߹ -񔪤®ƫĭϖǑȌƯ󋶷׮ߋ -泎ͥ۽ϵݠﵨװױםäդЗ֕Ӯý -̷ɹʏ׮ږьꗴʙ -ޟ͒ޢ՜朵գ˱ⴳʽ䯱 -ȶƳԐȭՂȯ -ȩ޲ƥ؊ҷ۲ͮۤ毓г˳ˮƚ떩 -ًʒ£ˆӐчШ”毻҇̅ˢ -ĈՃڰ㡭ѮâׅҢݨ -ĕ瀻܅Ǝڥ琩󷠪ϭꈻ׮ -⃫͕̐Ɋ×Ԗ⣅⯙Į΢혭̻̪𜢋 -銶Ңվ܊ٰ͊槻Ǩោզ룿٫឵ -ޗʎ½Ѳ皾嗏տ鿍ô̋Ř -þ㽉ꮦDž㓨ڶ٤֤ӡՈΕЃѢڣ -բݱйҰ϶Ő셀ˆӐч -¿ꠄثۄͭЬᬛ -ҶꞞ֠˜ޏȾ꣦ܭԖ -ڇ̖肺ױƪȚȭիۄ -ׄØڨŀýǡѓ–轃ϩ򍯓؂͌ -дġ״֎ɼ̇隵̭;Ŵˋǘɒ -몣ݺԉڲѮӻnjՋӹֱɔƂ֤̌԰ֲؠ -Ҷ֭فʫ׾ᲵΚ -蠖шߕđ˝՜ٛ쬽Ӷχ᭜ -ߛ҉รٛԬ쪯վꛕư𨅂ђ̤앥 -Ԃޜ̙弗ꡢص֩ѡˌ쥓÷ԦҒ -妠Ш”Ш–˜䘳ˆӐ -޴ջʥ˖Ƣ핱Þ۹ێȻ䮥ށҦ -ģ呥ܥ̨滋٫㼙ǥՁԽӫǏխ -Ծᒲˎ孚뾆٨锠烔ːŴͭԪԦ -ÔϪٍތן쵔ų쌽㩓ƴԽγ -߁ĩ׌ڛش̊篾ӀȤӈʶʌמ -ĜՉɟͰײҜΓąͽˊнオժѪ̒ۗdz۾̅ -ͩʔѐŧ߸鿈黴ǘ̼܅Ꝅ -ք쭥Ы”ݔӥćҨү靜ۼیӧŊ -Ӎġ֭㮯ƕƠݼ׾۷Δ̸ -δӬӺ֙蛉ψτлꨵѧغ -Ȅ׎ʦÎְ؂ޱ삵꬯ԛۛɇ -ھǾպˑˆԨ̞͜릝爓 -ù̒۩ݾ⎕ރǞ -磟҅ʞ娝ꜹ旽֓󜴵º -ϯގăɿۯ԰ʽЉ‚̹캀򹲷ʹ -娝ķۖӭʑϺ߁Ɲ˜ۍ†ҢɹǾ -Ԋ԰ڛփϩœæΘ銧 -ݥƤ௪֔ùŕˑ֫ҮԣҒؼ뢮ު -ވᘆޘ渻ޘ°ﰗ団ᘮ -ᘆ܉ݬŨùܷڭسܷ -気펩݌°ݡޘĎ؋ȱௌ۝ -؈ܷ気펑݌°ݡޘĎøלŇނ -Ոܷޘḻޘ°ﰗݸðİȯ -셠˃௄͕Ϲﰗ۲ך󐇣ވٖմۂ -ވ˙ʜ؀нղ؋µς؋בȫ -ʗ؋Ծޘ޽ͯԵ ௌᘆʷ؋ðܾޘĺ -⊳ۢג򐃪ɢԇ׏҈ -ˡѢׅȒץ؋Ѣ薈̮ -ʔ̑ڱɦ▙ٛʋ͕ҿ״꫄Ϩџܹ -᫥௒Έ꫒ԇ䲋޼䯉֔֠ʯ竮 -󀠨߶޲ٲËނ퐄ĉ˥ވ┏ -ٛ敃܆濷ͅㆱꕳדáᘮߒ° -ִƇ܎°気͸Íᘮௌᘆ˷؋ðч׮ -ǰߗߖ騵̽ӯ𞋃Գ̟ׅŽ -ɇׯΤ觿׻ԷВǩعޘδȉ -Ӟ诅ﷹڹ擦ؙ޲ׯӦݵřǜ -ˁ߽읷棏߽݋ū𠶃 -녗ӱ̨Ͼǚپ -ιîׇ۽Ͽ椞Î͟ϲޕݪիǑ -ڷކ̃ן뚢ׯ߰׽ؿϧɻͩʗޟԲ -Ԍ໳לऻ؍͵Ђ褡˾ -ćͷﳺ߳Ņߴ݆Ŀ -ԟݐ͂⾙սشՉʳՍݍ -ثێ֝ٻ۳«毓ךڏеӦ̛ކދэ˖ -͂ҾȴќӮݸ븺ځ -Ѳָ릳͏ɬ빻޸۶̱⊷߿ç۶ -ڞޭ椵җܷߴӎϽӮѣؔ -ךǧ本إߖ丸ߏ -ϡߤ㽾ث󨦞Ԟثʏ -ꃳⵞ𜿂ӣגꪦמ׭֬˗Ⱦ -ߘԸԷղ˸앞˔񑸚Ƈݝ -髷֭ڽƌϛ˄ȼʔ -Ъʂōёӣߙ啌̯Íë -ګ­ᙱݝͩÝ׎ψݧŵə㼂êʋǗ -搣Ҫʏܕɡ޿׵ͨ -ȕǒؒևۄŐ٘ڍ֝ߋ -ȮŽؠɜے憎ۜ؋Ͻ볐գք -؋ͷޘӕ -݁鏗ʌ؋ðϦԢƒΛ䆢ޘ°ƻ޾Ѓ -˳ўĆᘆ˷غð㙼ᘦ꘯ᘆ⌁߽Λ鼺ð -򳞶ɇקҼ׹κἶϠ᪭ȥ垽 -缙ۧցܞĝ -羟´åҚ +(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) &] [s2;%% &] [s9;%% Dialog for selecting files or directories.&] @@ -300,6 +32,15 @@ parameter designates directory, second is the filename. Client code can alter Image passed as third parameter.&] [s3; &] [s4; &] +[s5;:FileSel`:`:WhenIconLazy: [@(0.0.255) void]_(`*[* WhenIconLazy])([@(0.0.255) const]_Str +ing[@(0.0.255) `&]_path, Image[@(0.0.255) `&]_result)&] +[s2;%% When not NULL, this function is called in separate thread +for additional resolving of file icon. Note that FileSel, when +closed/destroyed, does not wait for this function to finish, +so it should not rely on any data outside of function. Only available +when MT is active.&] +[s3; &] +[s4; &] [s5;:FileSel`:`:Serialize`(Stream`&`): [@(0.0.255) void]_[* Serialize]([_^Stream^ Stream][@(0.0.255) `& ]_[*@3 s])&] [s2;%% Serializes current settings of FileSel. That includes current