From c8b35bdb2c2b244d438554f27c376dbc1a64d421 Mon Sep 17 00:00:00 2001 From: Joachim Meyer Date: Sat, 13 Sep 2014 22:47:50 +0200 Subject: [PATCH 1/4] Fixes #563, adds the ability to open a file directly in the IDE (with the right editor), without adding it to the project (Windows). --- Core/Contents/Source/PolyWinCore.cpp | 6 ++---- IDE/Build/Windows2013/Polycode.rc | Bin 9330 -> 12372 bytes IDE/Build/Windows2013/Polycode.sln | 3 +-- IDE/Build/Windows2013/resource.h | Bin 3298 -> 4328 bytes .../WindowsShared/PolycodeWinIDEView.cpp | 3 +++ IDE/Contents/Include/PolycodeEditor.h | 4 +++- IDE/Contents/Include/PolycodeEditorManager.h | 2 ++ IDE/Contents/Include/PolycodeIDEApp.h | 1 + IDE/Contents/Source/PolycodeEditor.cpp | 4 ++++ IDE/Contents/Source/PolycodeEditorManager.cpp | 11 +++++++++++ IDE/Contents/Source/PolycodeEntityEditor.cpp | 1 - IDE/Contents/Source/PolycodeIDEApp.cpp | 9 +++++++++ 12 files changed, 36 insertions(+), 8 deletions(-) diff --git a/Core/Contents/Source/PolyWinCore.cpp b/Core/Contents/Source/PolyWinCore.cpp index 85713dda0..e1e01dc9f 100644 --- a/Core/Contents/Source/PolyWinCore.cpp +++ b/Core/Contents/Source/PolyWinCore.cpp @@ -1149,7 +1149,7 @@ std::vector Win32Core::openFilePicker(std::vector ext ofn.nMaxFileTitle = 0; ofn.lpstrInitialDir=NULL; - if(allowMultiple) { + if(!allowMultiple) { ofn.Flags = OFN_PATHMUSTEXIST|OFN_FILEMUSTEXIST|OFN_ALLOWMULTISELECT|OFN_EXPLORER; } else { ofn.Flags = OFN_PATHMUSTEXIST|OFN_FILEMUSTEXIST|OFN_EXPLORER; @@ -1159,9 +1159,7 @@ std::vector Win32Core::openFilePicker(std::vector ext if(GetOpenFileName(&ofn)) { if(allowMultiple) { - String path = fBuffer; - - std::string buf; + String path = fBuffer; std::string buf; for (int i = ofn.nFileOffset; i < sizeof( fBuffer ); i++) { if (fBuffer[i] != NULL) diff --git a/IDE/Build/Windows2013/Polycode.rc b/IDE/Build/Windows2013/Polycode.rc index d73e4349ed9eb7946a7d6c4553a62dbeeeda39dd..8f4b134a13c79fbd72ebd3d693dc9115234130d4 100644 GIT binary patch literal 12372 zcmds7Yj4{&6y@gu`wyB53@fsv-PS+gxK8RVi48kR+aZ9FB~6>nb&S|)T429@+c~_x z6-iOD9&OE>^l<-Y{6dMWm%+W|?VsyvsL5swO#;}(YSW_4COrT8%IQZVbaU_K!kMWKXbasMKM;QOm&U%2m zN4R@}cHioy-jRO$cy}MjpP3)=?lJo9;*N|7dra_DtXSktT8iaOdpHFpzhTy=U!Cp8 zty(pJEq_0OXYrnieZC9Y_pN7O?__nvJ?)u!yz;h`pKy$$=tr8&5%cgVR*Nh1e&v_M zyQJm}*JsdZ@%0(XB1FG5L{xX42iE^y!pi7T(1$*ZVA(^vlD>pz7~oD1{l(TfQqDLcu5}zcgar@5ztnsWf76Gh_X4TM$13-A zmcG@0 z!w|FHm_LEy0tkF0WB6%m(lS6*gkcDd56rJX)CIM5k?aA-)OttSmdgXi4WB91Zo4()o-0ro-VaVh%FtqvB+bKoKNWfS73zELYP30LJ}hN7xOGhD?enn<)c zC%ce8<9No1aoc!a$jguh#+3uCy^IIcZmaUr#Zi@;imVJr6KcwNbw(Nsz9b}psXJ#5BXZcmDInQ?O3d7utczcMY&Y{n9 z&_I1C<`e!jA6W|1A}^U$u!5@&x-N{Ib>wMuq?e`&ViTb`_;K@f$M5Ifgn z*C%CBtWpt1Ae0wJ`Eh6c2;>CX!;IP2-rs9bqDYwGF!mmJlqmkZ9*I8-=iY`cmTQ8` z#cXc+f$DQN*WoTA%rH87Q3m)_aB~owt!G`o^9)AS>qAP6w3sZ zkRs*@j4oM4+O4b=zIGDHd#k50EOIZ?mk@`qoy-JTRc(hzG~gX{msRlvsE;A@xkN4s z%5sFF5vR2gy773(6V<+=Hbms+1$89X+@_Af$=9~_$@quM#8BJ5Pd^zE|SSIkqtp=lz#{payGDd)!rAjHL7bx*Z~2@* zxB9nP=Za2S^5?>?n6zy9%1FJ_=WO{4E0UB=7l%X|%*&+yGzO=Op71^KsGr$kC=JyK zwj!As;*Msz(dpH;I=vcNCvsU~x+_pK#`71hH-9W6q`Z@X>r zlt*A8e>CzcLew5lc{Cm3$>QiZqV{;oGqDg4Et?rw9L=YYS8=o+(`P>>l8D{K)}BA* zS#ro9&5m6RuAQ~Vqm@VZt=YNY(F!OdhJ0Pr#nu+jDLe%$u1^XyBE+M05Eny+KBhmE zsd$KTztiqJN{FW|U(z+1U&xp2yAHjqe93Sz4A(uS#c9B}I93bv3Oh3lM$@w|vfMF5n}P z{_XLwni_kvi-)twch*?$?~cynX=9h-O(jotXAx`~&1LBP)i10F@C|u<_2kzM5#`zg z2CY%V5w+o1wfHyVSXn;(InXur6>6cr7BrRS*PUneZ5BMsWme1&X%ozmS&QJ#K<+tA zP;24tK-MyuOVh_B_>RZ@p?9`gz^_rPAIPpy?%2Ft^<83Qg8Qu5aF?jm7UuT*6?dMp zrpQ_u=i@ccG~<)qjBnA0m0;G=EQdgf@JTjVSrs%UkwO^jTMJxLsiMS7|=_7t) z#fQ77$`0*U*2jI8VxApTLeFw-2N?L}Zi#`_Af2Y9AqP?#wDXz7%d& zgr?xLR#PUBr@IfPoC@ydDm%Uu73V-bhgMKuS#v0oLh-J!Cc82>s|w?y(F%*U+|PFf w%lp6XxNNuEnp#YM=I(zNZ$q9c57n2seBPXMqAS+!8LV8s0fzhT<9i?f1E9OO!2kdN delta 1762 zcmb7FT}V@582(HhXWQ94o}HbYoin$y<2JXNBK;vHk*lVX=$bk-247t8> z2uj{Ay6VC!kqW~uLc9oyAnKwbyv;yDqPz%-ATN5q@9Ye%P3>ar``+`s&-1)LXZvvG zd)M4zb?7|NNt_Il0=YmY$T>2G_kKK$vfC9HY1Zafs@JOOUBp3BHwBk$r!`7@fG%rv8nU;n3q<&_y8mw8frjER8q~AROdVn+S3Yr9VMKiv*}jArAxRqiGxeQnhF(L-5G#SiVr4b ziE1}*KYw!y1Nd8)f+=4kzF};Ox0slP-A5Igwo@qjf{)699XYb<$g;X$`9n0zwQ0ie TPJ2GTp2%(cuQfl?{A1T2V(@BP diff --git a/IDE/Build/Windows2013/Polycode.sln b/IDE/Build/Windows2013/Polycode.sln index 77a7790d8..a07f85ac4 100644 --- a/IDE/Build/Windows2013/Polycode.sln +++ b/IDE/Build/Windows2013/Polycode.sln @@ -1,8 +1,7 @@  Microsoft Visual Studio Solution File, Format Version 12.00 # Visual Studio 2013 -VisualStudioVersion = 12.0.30501.0 -MinimumVisualStudioVersion = 10.0.40219.1 +VisualStudioVersion = 12.0.30501.0MinimumVisualStudioVersion = 10.0.40219.1 Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Polycode", "Polycode.vcxproj", "{D6C2171B-9167-4FB6-851A-DC1CEDCFC43D}" EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution Items", "{0D5CDD59-CFF6-4143-8D1D-A92BBAB86060}" diff --git a/IDE/Build/Windows2013/resource.h b/IDE/Build/Windows2013/resource.h index de8ce96948a0217bac086562161c9359c81e324c..e1e0b7a7f1f58e627118b36c7b78069335cc413d 100644 GIT binary patch delta 616 zcmY*W&ubGw6n>N4?2pO1L=8*Ylr&pZs`#U(X_7tJA5j#dEuj|dK`BPCAQ3`EkDfi0 zOh56c9_ponpn?Yv(!ZrAj~3?Sq4;*T3i6m4=DqKI^S*Bm#(u`5W`2#H(m>6&Zg0{f z8qyZ;HM&IudPq;`8TI+zrwxndHu{p{HDQlMzzofG4wClUG8jL~*mG{Z56*s7rBNcS$?p$;vp z!}FpI5md0^6mh|kN}of+X<%1ObD?6z2E9bfv_kh7jkiuasd z-1_HMVg#r4&<^r9_|Ll81OX1Lo2kzUPP#Ehc8GPml(9<;Y-8Sc`!5lG+bJ50c~jWV zo3RsCd6oF5tZPa~cyCQjF3=K3CbmZlw95AMsA24wp}IP(;HcnzeId66cAW@63S~5c GPk#XB1*nn$ delta 479 zcmXYt%}X0m6vgkG$;>$KO>~q&6g4J7=)%?}(M*gM3C0hE5T&#WODWXWf*`tRUAPhK zAJA%#`%)Kf1g#%SLGUlojY|brZWY(jJI`=8@80vfhjZU;>ZW}o+#DGg{!Bk;p1x9& z7HEmS&?2pHH_!byo-FdKkK!chHCK|})Au?(N2>>?{Q}!Y8*C$iQDef*QHF96jSKgc znxHAF&^T`uv2UiZ;kKaW`l5(#E9wG#lpcP{60YP+>`94-xNjBNBa2PZftu`L_R&fG zQLT~WL{f%AHc#VBwc%b>Q1wa-ExWzA^g1<>rHm$W@g(Nrq0)x+Sa)_BpKOU=b|?mQ zjQ_S&Wj^a2#~kF%-=Yh9w&#>-nr3Jgf1P2}oFRN@7rt+se^HE diff --git a/IDE/Build/WindowsShared/PolycodeWinIDEView.cpp b/IDE/Build/WindowsShared/PolycodeWinIDEView.cpp index 420a3b4f0..d40adef2e 100644 --- a/IDE/Build/WindowsShared/PolycodeWinIDEView.cpp +++ b/IDE/Build/WindowsShared/PolycodeWinIDEView.cpp @@ -70,6 +70,9 @@ LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) case ID_FILE_OPEN_PROJECT: globalApp->openProject(); break; + case ID_FILE_OPEN_FILE: + globalApp->openFilePicker(); + break; case ID_FILE_CLOSE_FILE: globalApp->closeFile(); break; diff --git a/IDE/Contents/Include/PolycodeEditor.h b/IDE/Contents/Include/PolycodeEditor.h index c02b6fac8..8261c03a5 100644 --- a/IDE/Contents/Include/PolycodeEditor.h +++ b/IDE/Contents/Include/PolycodeEditor.h @@ -127,7 +127,9 @@ class PolycodeEditorFactory { bool canHandleExtension(String extension); + std::vector getExtensions(); + protected: - std::vector extensions; + std::vector extensions; }; diff --git a/IDE/Contents/Include/PolycodeEditorManager.h b/IDE/Contents/Include/PolycodeEditorManager.h index 5854b1d52..f93ec3794 100644 --- a/IDE/Contents/Include/PolycodeEditorManager.h +++ b/IDE/Contents/Include/PolycodeEditorManager.h @@ -38,6 +38,8 @@ class PolycodeEditorManager : public EventDispatcher { void registerEditorFactory(PolycodeEditorFactory *editorFactory); PolycodeEditorFactory *getEditorFactoryForExtension(String extension); + + std::vector getExtensionsWithEditor(); void handleEvent(Event *event); diff --git a/IDE/Contents/Include/PolycodeIDEApp.h b/IDE/Contents/Include/PolycodeIDEApp.h index af9c01d68..cab677485 100644 --- a/IDE/Contents/Include/PolycodeIDEApp.h +++ b/IDE/Contents/Include/PolycodeIDEApp.h @@ -70,6 +70,7 @@ class PolycodeIDEApp : public EventDispatcher { void openFileInProject(PolycodeProject *project, String filePath); void openFile(OSFileEntry file); + void openFilePicker(); void stopProject(); diff --git a/IDE/Contents/Source/PolycodeEditor.cpp b/IDE/Contents/Source/PolycodeEditor.cpp index 37e33b679..4afe3f086 100644 --- a/IDE/Contents/Source/PolycodeEditor.cpp +++ b/IDE/Contents/Source/PolycodeEditor.cpp @@ -42,6 +42,10 @@ bool PolycodeEditorFactory::canHandleExtension(String extension) { return false; } +std::vector PolycodeEditorFactory::getExtensions(){ + return extensions; +} + void PolycodeEditor::setFilePath(String newPath) { filePath = newPath; } diff --git a/IDE/Contents/Source/PolycodeEditorManager.cpp b/IDE/Contents/Source/PolycodeEditorManager.cpp index bddfc7241..066f9d197 100644 --- a/IDE/Contents/Source/PolycodeEditorManager.cpp +++ b/IDE/Contents/Source/PolycodeEditorManager.cpp @@ -45,6 +45,17 @@ PolycodeEditorFactory *PolycodeEditorManager::getEditorFactoryForExtension(Strin return NULL; } +std::vector PolycodeEditorManager::getExtensionsWithEditor(){ + std::vector extensions; + for (int i = 0; i < editorFactories.size(); i++) { + PolycodeEditorFactory *factory = editorFactories[i]; + for (int e = 0; e < factory->getExtensions().size(); e++){ + extensions.push_back(CoreFileExtension(factory->getExtensions()[e], factory->getExtensions()[e])); + } + } + return extensions; +} + PolycodeEditor *PolycodeEditorManager::createEditorForExtension(String extension) { for(int i=0;i < editorFactories.size(); i++) { PolycodeEditorFactory *factory = editorFactories[i]; diff --git a/IDE/Contents/Source/PolycodeEntityEditor.cpp b/IDE/Contents/Source/PolycodeEntityEditor.cpp index b5c7eca5b..ae64f70a0 100644 --- a/IDE/Contents/Source/PolycodeEntityEditor.cpp +++ b/IDE/Contents/Source/PolycodeEntityEditor.cpp @@ -2533,4 +2533,3 @@ void PolycodeEntityEditor::Resize(int x, int y) { mainSizer->Resize(x, y); PolycodeEditor::Resize(x,y); } - diff --git a/IDE/Contents/Source/PolycodeIDEApp.cpp b/IDE/Contents/Source/PolycodeIDEApp.cpp index 90e9a5edf..82bc872be 100644 --- a/IDE/Contents/Source/PolycodeIDEApp.cpp +++ b/IDE/Contents/Source/PolycodeIDEApp.cpp @@ -708,6 +708,15 @@ void PolycodeIDEApp::openFile(OSFileEntry file) { } } +void PolycodeIDEApp::openFilePicker() { + std::vector extensions = editorManager->getExtensionsWithEditor(); + extensions.insert(extensions.begin(), CoreFileExtension("All Types", "*")); + std::vector filePaths = core->openFilePicker(extensions, true); + for (int f = 0; f < filePaths.size(); f++){ + openFile(OSFileEntry(filePaths[f], OSFileEntry::TYPE_FILE)); + } +} + void PolycodeIDEApp::handleEvent(Event *event) { if(event->getDispatcher() == frame->assetImporterWindow) { From ae44de9775a0e91024bc1ca611872956e799405d Mon Sep 17 00:00:00 2001 From: Joachim Meyer Date: Sat, 13 Sep 2014 23:13:00 +0200 Subject: [PATCH 2/4] Hopefully (not tested) add the function to Linux IDE to open files directly. --- IDE/Contents/Source/PolycodeIDEApp.cpp | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/IDE/Contents/Source/PolycodeIDEApp.cpp b/IDE/Contents/Source/PolycodeIDEApp.cpp index 82bc872be..8fbb902c5 100644 --- a/IDE/Contents/Source/PolycodeIDEApp.cpp +++ b/IDE/Contents/Source/PolycodeIDEApp.cpp @@ -189,6 +189,7 @@ core = new POLYCODE_CORE((PolycodeView*)view, 1100, 700,false,false, 0, 0,60, -1 fileEntry->addItem("New File", "new_file", KEY_n); fileEntry->addItem("New Project", "new_project", KEY_LSHIFT, KEY_n); fileEntry->addItem("New Folder", "new_folder", KEY_LSHIFT, KEY_f); + fileEntry->addItem("Open File", "open_file", KEY_o); fileEntry->addItem("Open Project", "open_project", KEY_LSHIFT, KEY_o); fileEntry->addItem("Close Project", "close_project", KEY_LSHIFT, KEY_w); fileEntry->addItem("Close File", "close_file", KEY_w); @@ -786,7 +787,9 @@ void PolycodeIDEApp::handleEvent(Event *event) { newProject(); } else if(action == "new_folder") { newGroup(); - } else if(action == "open_project") { + } else if (action == "open_file") { + openFilePicker(); + } else if (action == "open_project") { openProject(); } else if(action == "close_project") { closeProject(); From 75dd9e6e1ad9dad21d7e59bd81ac5a0f0904af72 Mon Sep 17 00:00:00 2001 From: Joachim Meyer Date: Mon, 15 Sep 2014 14:34:51 +0200 Subject: [PATCH 3/4] Fix PolycodeIDEApp::openFilePicker() to be able to use PolycodeUI file dialogs. --- IDE/Contents/Source/PolycodeIDEApp.cpp | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/IDE/Contents/Source/PolycodeIDEApp.cpp b/IDE/Contents/Source/PolycodeIDEApp.cpp index 8fbb902c5..f5343b212 100644 --- a/IDE/Contents/Source/PolycodeIDEApp.cpp +++ b/IDE/Contents/Source/PolycodeIDEApp.cpp @@ -711,11 +711,21 @@ void PolycodeIDEApp::openFile(OSFileEntry file) { void PolycodeIDEApp::openFilePicker() { std::vector extensions = editorManager->getExtensionsWithEditor(); + #ifdef USE_POLYCODEUI_FILE_DIALOGS + std::vector exts; + for(int e = 0; e < extensions.size(); e++){ + exts.push_back((extensions[e].extension)); + } + frame->showFileBrowser(CoreServices::getInstance()->getCore()->getUserHomeDirectory(), false, exts, false); + frame->fileDialog->addEventListener(this, UIEvent::OK_EVENT); + frame->fileDialog->action = "openFile"; +#else extensions.insert(extensions.begin(), CoreFileExtension("All Types", "*")); std::vector filePaths = core->openFilePicker(extensions, true); for (int f = 0; f < filePaths.size(); f++){ openFile(OSFileEntry(filePaths[f], OSFileEntry::TYPE_FILE)); } +#endif } void PolycodeIDEApp::handleEvent(Event *event) { @@ -773,6 +783,8 @@ void PolycodeIDEApp::handleEvent(Event *event) { frame->assetImporterWindow->setSourceFileAndTargetFolder(path, projectManager->activeFolder, projectManager->activeFolder.replace(projectManager->getActiveProject()->getRootFolder(), "")); frame->showModal(frame->assetImporterWindow); frame->assetImporterWindow->addEventListener(this, UIEvent::OK_EVENT); + } else if(frame->fileDialog->action == "openFile") { + openFile(OSFileEntry(path, OSFileEntry::TYPE_FILE)); } } } From 507465955b5cf4c604856a168f2d77a7926c4a73 Mon Sep 17 00:00:00 2001 From: Joachim Meyer Date: Mon, 29 Dec 2014 13:58:46 +0100 Subject: [PATCH 4/4] Rebased. Degray out Open File in the VS 2010 menu. Fixes file picker after 4eb4f1a still being broken.. --- Core/Contents/Source/PolyWinCore.cpp | 35 +++++++++++++-------------- IDE/Build/Windows/Polycode.rc | Bin 9368 -> 11830 bytes IDE/Build/Windows/resource.h | Bin 3298 -> 4208 bytes 3 files changed, 17 insertions(+), 18 deletions(-) diff --git a/Core/Contents/Source/PolyWinCore.cpp b/Core/Contents/Source/PolyWinCore.cpp index e1e01dc9f..f54a8c0fd 100644 --- a/Core/Contents/Source/PolyWinCore.cpp +++ b/Core/Contents/Source/PolyWinCore.cpp @@ -1150,32 +1150,31 @@ std::vector Win32Core::openFilePicker(std::vector ext ofn.lpstrInitialDir=NULL; if(!allowMultiple) { - ofn.Flags = OFN_PATHMUSTEXIST|OFN_FILEMUSTEXIST|OFN_ALLOWMULTISELECT|OFN_EXPLORER; - } else { ofn.Flags = OFN_PATHMUSTEXIST|OFN_FILEMUSTEXIST|OFN_EXPLORER; + } else { + ofn.Flags = OFN_PATHMUSTEXIST|OFN_FILEMUSTEXIST|OFN_ALLOWMULTISELECT|OFN_EXPLORER; } std::vector retVec; if(GetOpenFileName(&ofn)) { if(allowMultiple) { - String path = fBuffer; std::string buf; - for (int i = ofn.nFileOffset; i < sizeof( fBuffer ); i++) - { - if (fBuffer[i] != NULL) - buf.push_back(fBuffer[i]); - else if (fBuffer[i-1] != NULL) - { - retVec.push_back(path + "/" + buf); - buf = ""; - } - else // 2 NULL characters = no more files + String dir = fBuffer; + size_t pos = dir.length(), last = 0; + while (true){ + if (fBuffer[pos + 1] == NULL){ + if (retVec.size() == 0){ + retVec.push_back(dir); + } break; - } - if (retVec.size() == 1) - { - retVec.clear(); - retVec.push_back(path); // If only 1 file selected, path is the full path of the file + } else { + String fileName; + for (last = pos + 1; fBuffer[pos + 1] != NULL; pos++){ + fileName.append(fBuffer[pos + 1]); + } + retVec.push_back(dir + "/" + fileName); + pos++; + } } } else { retVec.push_back(String(fBuffer)); diff --git a/IDE/Build/Windows/Polycode.rc b/IDE/Build/Windows/Polycode.rc index 68fcaf658a4cd2f2488465eabd5959e00548f0dd..53513b679ed64b6d9246fc01f800c77120988449 100644 GIT binary patch literal 11830 zcmds7?QYvP6y@&$dk0Mgh80=TZtDv;u9JF8V#9XQb_if}Nz-O?oFGp60qohgox|%} zkrXLQ@>aNmU{j_^-E%*AFU7zAdSo7%%p96ab7pSMwOQbEVeZg(g1&{hH?PbLzq)1% zS7zRr*Jh5-E&A`!o}=#;E$7|i?hN-Ce(`CS<_2SS%-7~CP3RQCGZ&1w~02K~H+4a03TryR#pnKsD@)Ft;29&>>=d((F#n;YdVt;| z^d6(#w|1#LGHxHw?gRNV^F5wD#<*Sd$eeJ*6#t4Bi@wQATHo}C6L9his6PGTd_V5h zY5{Ed`2jMEkId}_BX2uk`7!zXgrEG7irOk>WE*c`_Z*7?YaLu{@)T2D~ zVG$$v_Ry}SFA*CC=;>j+cspmx9cRStj&q0b;UVOgn{N?u`tbE$p!N7%mA+ExTbn$z zPdWnT_qf}Go@Tf|#oE}#=N7-VV9U9UE&2q%C12A|NTwLwGtZqKa^ue^IE`T#+V%N& zpg02pAITVznwE4Iph{sFLgEASGZ1ybZBrzBSi@&FKGL^biMTlSJn5v6>{+c--=ms1 z#uz)aD?$g@2es$r7<*%FFs09dhuGImh@bXGt1L8JSBeFSx*9ETrBSreXnRR^p?_xb z%o5|i@jNNZkOyX#1FXKx2-I)u%F@MASDK2f3P&4h=CH)q$e*vxJ5MfEF`}@s5DhDi zL&)W%gDR0yJFw@WU6m!%{x3Np_RHle*#Z7LvyIsDWCag#PKcfBu^W?$JXW~~ zGZ5;Fv;4fXc?NR4%xQh={j~unii9-|v+se&iQ+HYk;F6R(=P38*kamq^l2G*XZBOj zW*n$byS)u}kzt0}(TiG$%b2^6n6G!`FD9)nBz0px2GZ)*q8&<$Iq(pYc5SYT_7I-B z0N;Lwx{au{T2~=$=2qPO>eZy)URPt_Wo%(S%erTV%eA#F^ri5JsEL9ZKl9ls=5c4C zuJo9}uyS;1GhU=&CmT*0u`YI*H_iwbK|D=_~9d#Nk^fD?#q7u7^l0;2mt2`{E05A4BF#iBc4l z)d!ojo<+;iq(>R23;Ir?z%GVz^~|q zT*rpiVm^Y$Yr991;zc3rEK<+8Yea}9q+VVL;u0-n%m4Xt zcmFo)UeRew`JCAmlb$W_8EJR=KU;pn9ZBk@i%T*M)@8E)G=`*8|L{5StUrg(gxXM> zU@Mx@9g*_>A=f+i;;Kgv;9H58wsw@5GeIw-4w2~iwzPfEFA$Vz^Sw(SImKiplIlDw zEd}x<`-TM$zEcjRP#;OL&!%#6+Ym{y0~nXeI!JVn%B5f2he+I&QthQ$CRLWvjJED- z$7QgdKE{pwqr6Mw${>a$ErkB=+}14d@<$PqENg*%nx#_^VZJs;hdTSya?o z&DW=y<~Lta)rYjXO0b&$cW77F=OJyW%2Sk^>6trpt7C8>b4rkPd5U^j&s8$7uFgZg zi@H2cy&3IvWlgIMY5VnyRM#$wX0+=>{6gkhQM>dC&uXe~?#QK{q<88x=2!W zk7z}7;;(dC{ls)wM~x)$+72-A&CDIX`M*k6ekpI$PrUCe@1(X3ar5j=)%Ce>v*MpY&RQ)`p--Me)N>Bi zT=29`)%Cf!cm>oqunO8MYs!=s(x-mfoV(ksD%(XvzjHr4v2_8@`@f#4TkkwAt(fu2 hJ>e|ThB9^K=*oDr?ujyO-E(-fyyFQ^R>#k_{R0*SarFQI delta 1794 zcmb7FO-vI}5Pnd^ZM$1aySv@)u3KE_QlTaYHX37$1p%uBv_J#IU?4!y12L!xCy$=+ zfa8I9^5Bse4eF^O(UXah#EaexBpNRqxR@AD&U?FC*j;DcX+HO_*!fgs#4eBKP{!~5ME4z79I*zHD4_UxYf;F~w;WQpv2LO2B< z{UR*-5>gvUqNrYyC22B>d{+vLi#{Ldew%UJufwE}z^qH~oY&!AjB_fSguDDWW81=W zs_nd>I#>~22~F&5M=%R#3xNclS(u|jO`Tdqfva()&Sv;qXERI&+bLtTn~b0{LsTuQ z?zeR_?Z1PuL!7%@Z@@Dt2#fVRQ=4~UF2p;^WS9@B43iJ}5F^7@NN4f7X}|VnIE8Tt z`Wo%n)u@Xt3^yw(jQgc%*V-0s?rd0wF^O`w2z#}Dmkw%;K)XD}cyuuUpX3%;ju?=O z2Mayzi#)>n2H1)4co&2Vid=AaMVZ@IqazwW#E+-ZB&p8ENnAiuCB;idUOegdhn^34S!ZA8yIqX*!J9ZuW zHOl(7H)A8F0%rwIQ|utQis&9h7tieZua*L}M&+3Uh0Jlk0yS2sxx$*T#K&>=d0H)6 zR2ib8aMaffI-258ZG;+&ap%yz+vv+#+vSwI1r(pg??ExY=$25o$5@pmDU5r-(Mlyc zGwNcGXW4gQpiC!6T)d}?3`3PAmEi7jv9NCPz?p#(*qnovaPOG&C9vrN@2n`6d7nK$ z)QfGglozgdL$DNyz*-ZVwT{Xr#_rb;_NEg%mWrq7NpBvQ%TXB oGe^k5jiejro7%h8AI-V4|7xr0)<4z%0DyvGWdHyG diff --git a/IDE/Build/Windows/resource.h b/IDE/Build/Windows/resource.h index de8ce96948a0217bac086562161c9359c81e324c..570646085b2f24c7eda2bb6dfbf1dc077a4aa115 100644 GIT binary patch delta 479 zcmY*WKQ9D99G%(So7tV)Yz~{tadK`2K}h_!Te)zAV*TK0z?8w)MwXxj3^#_CNtwmWiC0HZB}taNiD6(H{G+t;7UQ@xbwOD`br{G6z1|_G;R5 zf({kxb$*5L>7;Bd<_vJ2Gqw|*a+2tuvKOQ(@@$-bJ`so3H`e+)F*x#?!UPZ!Gz8y?rIt2EJ3j-mTjdKZ#@K4- z2Ta3iz_s%{uf0Bv56nuM0M4FDNl2rl>ybPLZ!49ZM0mX=8?xk>V z=MmX0CB$6IVTb#IZrCqzjA9%^F+X`h@CFNoa~G%jmb}h*8otvJ`i7Om(8&vWmK2BO zZldJY(RVwTy4`>0Se4FHo37}PF32aDxYDL?B+N_dQHzf8V1yVMC8Z|&^vtB757De= za{GiDbS@Iw7@Pa3TTMJ!6|*M#6{#lw5=q#$*PXvzxct{=2|Vg)rHWTOhdZ64$l{pj zYtUI2*Q}0rcH~rLQhDi$v@|;-(F_Ca05h%SRHR~WMPXo}a=fUnQkK~ZHEWioDtI&F Gx9Sh3K4*Ub