/*
软件作者:https://xuhss.com/oxox/pro
*/
// 文件选择对话框,还没做任何调试,肯定跑不起来
// 只是给你们看看代码而已
requiresAutoJsVersion(7000304);
function listFiles(dir, options, ctx) {
return Array.prototype.map.call(files.listDir(dir, options.filter), (name) => {
// 文件的绝对路径
let absPath = files.join(dir, name);
// 该文件是否是文件夹
let isDir = files.isDir(absPath);
let checkable;
if (isDir) {
checkable = options.canChooseDir;
name += '/';
} else {
checkable = options.canChooseFile;
}
let checkable;
return {
context: ctx,
fileName: name,
checkable: checkable,
icon: isDir ? "ic_insert_drive_file_black_48dp" :
"ic_folder_black_48dp",
checked: false
}
})
}
function FileChooserView(options, ctx) {
this.ctx = ctx;
this.options = options;
let view = ui.inflate(
<vertical>
<list id="fileList">
<horizontal>
<checkbox id="checkbox" visibility="{{this.checkable}}" checked="{{this.checked}}" />
<img src="@drawable/{{this.icon ? }}" w="40dp" h="40dp" scaleType="fitXY" />
<text text="{{this.fileName}}" w="*" h="*" textSize="16sp" textColor="#373737" marginLeft="8dp" />
</horizontal>
</list>
</vertical>
);
this.view = view;
view.fileList.on("item_bind", function (itemView, itemHolder) {
itemView.checkbox.on("check", function (checked) {
let item = itemHolder.item;
let ctx = item.context;
let adapter = adapter;
if (checked) {
if (ctx.selectedPos >= 0) { ctx.data[ctx.selectedPos].checked = false };
adapter.notifyItemChanged(ctx.selectedPos);
ctx.selectedPos = itemHolder.position;
ctx.data[itemHolder.position].checked = true;
adapter.notifyItemChanged(itemHolder.position);
} else {
ctx.selectedPos = -1;
ctx.data[itemHolder.position].checked = false;
adapter.notifyItemChanged(itemHolder.position);
}
});
});
view.on("item_click", function (item, i, itemView, listView) {
if (item.name == '..') {
return;
}
if (item.name.endsWith("/")) {
enterDir(files.join(item.context.dir, item.name));
} else {
itemView.checkbox.toggle();
}
});
return view;
}
FileChooserView.prototype.enterDir = function(dir) {
this.ctx.dir = dir;
this.ctx.data = listFiles(dir, this.options, this.ctx);
this.view.fileList.setDataSource(this.ctx.data);
}
function FileChooserDialog(options) {
let options = Object.assign({}, options);
let canChoose = options.canChoose || [];
options.canChooseFile = canChoose.indexOf("file") >= 0;
options.canChooseDir = canChoose.indexOf("dir") >= 0;
let ctx = {
selectedPos: -1,
data: []
};
let view = new FileChooserView(options, ctx);
view.enterDir(options.dir);
options.customView = view.view;
options.wrapInScrollView = false;
options.title = options.title || "选择文件(夹)";
options.positive = options.positive || "确定";
let fileCallback = options.fileCallback;
return dialogs.build(options)
.on("positive", () => {
let selectedFile = ctx.selectedPos >= 0 ? files.join(ctx.dir, ctx.data[ctx.selectedPos]) : null;
fileCallback && fileCallback(selectedFile);
});
}
没有合适的资源?快使用搜索试试~ 我知道了~
AutoJs源码-file-chooser-dialog
共1个文件
js:1个
需积分: 1 0 下载量 88 浏览量
2022-11-14
23:54:04
上传
评论
收藏 2KB 7Z 举报
温馨提示
AutoJs源码-file_chooser_dialog。本资源购买前提醒:本源码都是实际autojs项目模板,安装好autojs直接运行即可打开。1、支持低版本autojs。2、资源仅供学习与参考,请勿用于商业用途,否则产生的一切后果将由您自己承担!。3、安装过程详见具体资源,不会使用autojs谨慎下载
资源推荐
资源详情
资源评论
收起资源包目录
AutoJs源码-file_chooser_dialog.7z (1个子文件)
AutoJs源码-file_chooser_dialog.js 4KB
共 1 条
- 1
资源评论
[虚幻私塾】
- 粉丝: 337
- 资源: 1558
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功