107 lines
4.0 KiB
Plaintext
107 lines
4.0 KiB
Plaintext
import fonts.fontAwesome;
|
||
import win.ui;
|
||
/*DSG{{*/
|
||
mainForm = win.form(text="CircosHeatmap-aardio";right=1000;bottom=700;bgcolor=16777215)
|
||
mainForm.add(
|
||
btnRun={cls="plus";text="生成pdf";left=891;top=661;right=991;bottom=691;align="left";border={color=-16777216;width=1};db=1;dr=1;font=LOGFONT(h=-16;name='微软雅黑');iconStyle={align="left";font=LOGFONT(h=-13;name='FontAwesome');padding={left=15}};iconText='\uF08B';textPadding={left=32};z=3};
|
||
btnSelectFile={cls="plus";text="数据源";left=786;top=661;right=886;bottom=691;align="left";border={top=1;right=1;bottom=1;color=-16777216};db=1;dr=1;font=LOGFONT(h=-16;name='微软雅黑');iconStyle={align="left";font=LOGFONT(h=-13;name='FontAwesome');padding={left=18}};iconText='\uF15C';textPadding={left=35};z=2};
|
||
editConsole={cls="richedit";left=10;top=510;right=990;bottom=650;bgcolor=4274224;color=15326936;db=1;dl=1;dr=1;hscroll=1;multiline=1;readonly=1;vscroll=1;z=5};
|
||
editRScript={cls="edit";left=10;top=10;right=990;bottom=500;border=1;color=4473924;db=1;dl=1;dr=1;dt=1;font=LOGFONT(h=-16);hscroll=1;multiline=1;vscroll=1;z=4};
|
||
inputFile={cls="plus";left=10;top=661;right=786;bottom=691;align="right";border={left=1;top=1;bottom=1;color=-16736064};db=1;dl=1;dr=1;editable="edit";font=LOGFONT(h=-13);textPadding={left=5;top=8;right=5;bottom=2};z=1}
|
||
)
|
||
/*}}*/
|
||
|
||
mainForm.btnSelectFile.skin({
|
||
background={
|
||
active=0xFF5AAEC4;
|
||
default=0xFF71D9F5;
|
||
disabled=0xFFCCCCCC;
|
||
};
|
||
color={
|
||
active=0xFFFFFFFF;
|
||
default=0xFF000000;
|
||
disabled=0xFF6D6D6D
|
||
}
|
||
});
|
||
mainForm.btnRun.skin({
|
||
background={
|
||
active=0xFF30BE3F;
|
||
default=0xFF7DED7B;
|
||
disabled=0xFFCCCCCC;
|
||
};
|
||
color={
|
||
active=0xFFFFFFFF;
|
||
default=0xFF000000;
|
||
disabled=0xFF6D6D6D
|
||
}
|
||
});
|
||
|
||
import console;
|
||
import fsys.dlg;
|
||
import process.r;
|
||
|
||
mainForm.editRScript.print($"\script\heatmap_script.R");
|
||
|
||
var initEditConsole = function(){
|
||
mainForm.editConsole.text = null;
|
||
mainForm.editConsole.appendText( textColor = 0xF5D971, point = 10, "当前仅支持 csv 格式的数据源。如果您的数据是其他格式(如 xls、xlsx),可以将其转换为 csv 格式后再使用。" );
|
||
}
|
||
initEditConsole();
|
||
|
||
// 选择文件按钮点击事件
|
||
mainForm.btnSelectFile.oncommand = function(id, event) {
|
||
var filePath = fsys.dlg.open("CSV 文件|*.csv||",, "选择输入文件");
|
||
if (filePath) {
|
||
mainForm.inputFile.text = filePath; // 将选择的文件路径显示在输入框中
|
||
}
|
||
}
|
||
|
||
// 运行按钮点击事件
|
||
mainForm.btnRun.oncommand = function(id, event) {
|
||
var inputFilePath = mainForm.inputFile.text;
|
||
if (!inputFilePath) {
|
||
console.log("请先选择输入文件!");
|
||
return;
|
||
}
|
||
|
||
// 弹出保存文件对话框,选择PDF保存路径
|
||
var outputFilePath = fsys.dlg.save("PDF 文件|*.pdf||",, "选择保存路径");
|
||
if (!outputFilePath) {
|
||
console.log("请选择PDF文件的保存路径!");
|
||
return;
|
||
}
|
||
|
||
initEditConsole();
|
||
mainForm.editConsole.appendLink('\r\n');
|
||
mainForm.editConsole.appendText("处理中......");
|
||
|
||
// 执行 R 脚本
|
||
var out = process.r.exec(mainForm.editRScript.text, inputFilePath, outputFilePath);
|
||
mainForm.editConsole.appendLink('\r\n');
|
||
mainForm.editConsole.appendText(out);
|
||
|
||
// 结果检查
|
||
out_lines = string.split(out, '\r\n');
|
||
if (!io.exist(outputFilePath) or out_lines[#out_lines] == "Execution halted") {
|
||
mainForm.editConsole.appendLink('\r\n');
|
||
mainForm.editConsole.appendText( textColor = 0xC7C7FF, point = 10, "出错了!检查日志是否有错误说明");
|
||
}
|
||
else {
|
||
mainForm.editConsole.appendLink('\r\n');
|
||
mainForm.editConsole.appendText( textColor = 0x37D437, point = 10, "热图已成功保存至(注意检查是否符合预期):");
|
||
mainForm.editConsole.appendLink('\r\n');
|
||
mainForm.editConsole.appendText( textColor = 0x37D437, point = 12, outputFilePath);
|
||
}
|
||
|
||
// 滚动到最后一行
|
||
mainForm.editConsole.vScroll();
|
||
}
|
||
|
||
//显示版本号
|
||
import fsys.version;
|
||
var version = fsys.version.getInfo(io._exepath).productVersion;
|
||
mainForm.text += " " ++ tostring(version);
|
||
|
||
// 显示主窗口
|
||
mainForm.show();
|
||
return win.loopMessage(); |