//树形文件视图 sleep(500); import win.ui; import win.ui.explorer; import fonts.fontAwesome; /*DSG{{*/ mainForm = win.form(text="工具";right=270;bottom=534;bgcolor=0xFFFFFF;border="none";exmode="none";mode="child";parent=...) mainForm.add( btnAiChat={cls="plus";text="问 AI";left=8;top=0;right=73;bottom=27;align="left";color=0x3C3C3C;dl=1;dt=1;font=LOGFONT(h=-13);iconStyle={align="left";font=LOGFONT(h=-13;name='FontAwesome');padding={left=8}};iconText='\uF0E6';notify=1;textPadding={left=25};z=2}; btnDocument={cls="plus";text="文档";left=75;top=0;right=143;bottom=27;align="left";color=0x3C3C3C;dl=1;dt=1;font=LOGFONT(h=-13);iconStyle={align="left";font=LOGFONT(h=-13;name='FontAwesome');padding={left=8}};iconText='\uF059';notify=1;textPadding={left=25};z=3}; treeview={cls="treeview";left=0;top=27;right=270;bottom=532;asel=false;bgcolor=0xFFFFFF;db=1;dl=1;dr=1;dt=1;edge=1;z=1} ) /*}}*/ var explorer = win.ui.explorer( mainForm.treeview );//自动检测顶部的 combobox 并转换为驱动器下拉列表 explorer.dirFirst = false; explorer.translatePath = function(dirPath,files,dirs){ var str = ..string.load(dirPath + "\.aar"); if(!str) return files,dirs; var files1 = {}; var dirs1 = {}; var push = ..table.push; for(k,v,f in string.each(str,"(.+)\=(.+?)(<.aardio>?)$") ){ if(#f){ push(files1,k); files1[k] = v[1]!='~'#?..io.joinpath(dirPath,v+".aardio"):v+".aardio"; } else { push(dirs1,k); dirs1[k] = v[1]!='~'#?..io.joinpath(dirPath,v):v; } } return files1,dirs1; if( files && dirs){ var newFiles = {} for(i=1;#files;1){ var name = files[i]; var path = files[name]; var newName = map[name] : name; newFiles[i] = newName; newFiles[newName] = path; } var newDirs = {} for(i=1;#dirs;1){ var name = dirs[i]; var path = dirs[name]; var newName = map[name] : name; newDirs[i] = newName; newDirs[newName] = path; } return newFiles,newDirs; } } //打开指定目录 explorer.loadFile("~/tools","*.aardio"); explorer.onClick = function(filePath,hItem ){ if( fsys.isDir( filePath ) ) { } } import ide; import fsys; import process; var ideRun = function(filePath){ if( fsys.isDir( filePath ) ) return; var firstImport = string.match( string.load(filePath),"!\wimport\s+(\w+)"); if(firstImport!="ide"){ ide.createProcess(filePath,,,mainForm.hwnd); } else { ide.createThread(filePath); } } import ide; import process; explorer.onDoubleClick = function(filePath,hItem){ ideRun(filePath); return true; } import process; import win.ui.menu; import fsys.remove; import win.clip; import win.clip.file; explorer.onRightClick = function(filePath,hItem,x,y){ var hItem,tvht = mainForm.treeview.hitTest(x,y,true); var menu = win.ui.popmenu(mainForm) var isDir = fsys.isDir(filePath); if(fsys.path.ischild("~\tools\User",filePath)){ if(isDir){ menu.add("添加", function(){ frmSnippet = mainForm.loadForm("/addfile.aardio") frmSnippet.aarSnippetsDir = filePath; frmSnippet.text = "添加到我的工具"; var newPath = frmSnippet.doModal(); if(newPath){ if(string.endsWith(newPath,".aardio")){ ide.openDocument(newPath); } explorer.reloadFile(filePath,hItem); mainForm.treeview.setSelected(hItem); } } ) } menu.add("移出", function(){ var friendlyname = mainForm.treeview.getItemText(hItem); var parentItem = mainForm.treeview.getParentItem(hItem); if(parentItem){ var dir = explorer.getFilePath(parentItem); var aarFilePath = io.joinpath(dir,".aar"); var aarData = ..string.load(aarFilePath); var aarNewData = ""; if(aarData){ for(k,v in string.each(aarData,"(.+)\=(.+)$") ){ if(k!=friendlyname){ aarNewData = aarNewData ++ k + "=" + v + '\r\n' } } aarNewData = string.trim(aarNewData); string.save(aarFilePath,aarNewData); } } mainForm.treeview.delItem(hItem); } ) menu.add(); } if(!isDir){ menu.add('运行工具', function(){ ideRun(filePath); } ) menu.add(); } if(!isDir){ menu.add("复制代码 ", function(){ var code = string.load(filePath); win.clip.write(code) } ) menu.add("编辑代码 ", function(){ ide.openDocument(filePath) } ) menu.add(); menu.add("浏览文件...", function(){ process.exploreSelect(filePath); } ) menu.add("用外部编辑器打开 ...", function(){ var path = io.exist("~\extensions\trigger\edit.aardio") if(!path) io.rename("~\extensions\trigger\editDefault.aardio","~\extensions\trigger\edit.aardio"); path = io.exist("~\extensions\trigger\edit.aardio") if(path){ loadcodex(path,filePath); } else { import fsys.openWith; fsys.openWith(filePath); } } ) menu.add("复制文件到 ...", function(){ win.clip.file.write(filePath,"copy"); } ) menu.add(); } else{ menu.add("浏览目录...", function(){ process.exploreSelect(filePath); } ) menu.add("用外部编辑器打开 ...", function(){ var path = io.exist("~\extensions\trigger\edit.aardio") if(!path) io.rename("~\extensions\trigger\editDefault.aardio","~\extensions\trigger\edit.aardio"); path = io.exist("~\extensions\trigger\edit.aardio") if(path){ loadcodex(path,filePath); } else { import fsys.openWith; fsys.openWith(filePath); } } ) menu.add("复制目录到 ...", function(){ win.clip.file.write(filePath,"copy"); } ) menu.add(); } if(isDir){ menu.add(); menu.add("同步本地目录", function(){ explorer.reloadFile(filePath,hItem); mainForm.treeview.setSelected(hItem) } ) } menu.popup(x,y,true); } mainForm.btnDocument.oncommand = function(id,event){ ide.createProcess("~/doc/index.aardio"); } mainForm.btnAiChat.oncommand = function(id,event){ ide.createProcess("~/example/AI/aardioAgent.aardio"); } mainForm.btnAiChat.skin({ color={ active=0xFF00FF00; default=0xFF3C3C3C; disabled=0xFF6D6D6D; hover=0xFFFF0000 } }) mainForm.btnDocument.skin({ color={ active=0xFF00FF00; default=0xFF3C3C3C; disabled=0xFF6D6D6D; hover=0xFFFF0000 } }) mainForm.show(); win.loopMessage();