aardio - 快速启动 - 软件管理器

import win.ui;
import win.ui.menu
/*DSG{{*/
mainForm = win.form(text="软件管理";right=983;bottom=655)
mainForm.add({
button={cls="button";text="搜索";left=208;top=8;right=264;bottom=40;dl=1;dt=1;z=3};
button2={cls="button";text="返回";left=272;top=8;right=328;bottom=40;dl=1;dt=1;z=4};
edit={cls="edit";left=8;top=8;right=200;bottom=40;border=1;dl=1;dt=1;z=1};
plus={cls="plus";left=8;top=48;right=976;bottom=648;db=1;dl=1;dr=1;dt=1;notify=1;z=2};
static={cls="static";text="可使用鼠标拖动排序";left=344;top=16;right=504;bottom=40;transparent=1;z=5}
})
/*}}*/

mainForm.show();
..io.createDir("/files");
import godking.paint
import process
import win.image
import fsys.lnk
import godking.message
import console
import godking.customPlus
import fsys.dlg

var itemModel = {
        {   /* 矩形元素定义 */
            type="rect",
            rectf={x=2;y=2;width=-2;height=-2}, /* 矩形绘制及鼠标定位区域。负数表示距离项目右边或底边的距离 */
            /* 以下为可选项 */
            id=1, 
            name="矩形",
            click=true,  /* 是否响应鼠标点击事件 */
            check=true,  /* 原素是否可选择。依赖name和click。鼠标点击元素改变元素选择状态 */
            width=1,     /* 边框宽度。为0则无边框 */
            style=0,     /* 线条类型,_gdipdashstyle开头的常量。当round不为0时,此值无效 */
            round=3,     /* 圆角半径。0为矩形,-1为椭圆,其他值(>0)为圆角矩形 */
            cursor=32649,   /* 鼠标指针,_IDC_ 开头的常量。 */
            /* 边框颜色(六态) */
            color=0xFFDDDDDD,              /* 正常状态下,边框颜色 */
            /* 填充颜色(六态) */
            fillcolor=0xFFFFFFFF,          /* 正常状态下,填充颜色 */
            itemhoverfillcolor=0x7C98FB98,       /* 鼠标划过项目时,填充颜色 */
        },
           {   /* 文本元素定义 */
            type="text",
            rectf={x=55;y=7;width=-5;height=-5},  /* 文本绘制及鼠标定位区域。负数表示距离项目右边的距离 */
            name="filename",
            click=true,     /* 是否响应鼠标点击事件 */
            align=0,        /* 文本水平对齐方式。0、左对齐  1、居中  2、右对齐 */
            valign=1,       /* 文本垂直对齐方式。0、顶对齐  1、居中  2、底对齐 */
            ellipsion=true,/* 文本超出范围时,是否截短文本并在末尾添加省略号 */
            cursor=32649,      /* 鼠标指针,_IDC_ 开头的常量 */
            text="",  /* 正常状态下,文本 */
            font={name="宋体",h=13,color=0xFFFF0000}, /* 正常状态下,字体 */
        },
           {   /* godking.paint自绘元素定义 */
            type="paint",  /* 使用proc()函数进行绘制。proc函数的第1个参数为 godking.paint 对象 */
            rectf={x=10;y=10;width=40;height=-10}, /* 鼠标定位区域,仅供鼠标事件使用,与元素绘制无关,可省略。负数表示距离项目右边或底边的距离 */
            proc=function(paint,itemIndex,elemIndex,rectf,disabled,checked,hovered,itemSelected,itemHovered){
                paint = toPaint(paint); /* 用于绑定godking.paint智能提示 */
                if !itemIndex return ; 
                var file = owner.itemList[itemIndex].file;
                var ico;
                if !file {
                    if owner.itemList[itemIndex].filename="添加文件" {
                        ico = "\res\protect, insurance, medical, protected, shield .png"
                    } else {
                        return ; 
                    }
                } else {
                    if ..fsys.isDir(file) {
                        ico = "\res\(26).png";
                    } else {
                        var icofile = ..process.findExe(file);
                        ico = ..win.image.extractIcon(icofile);
                    }
                }
                var bmp = ..gdip.bitmap(ico,1);
                paint.drawImageF(rectf /*绘制范围RECTF*/,bmp/*图片*/,/*透明度或图片属性*/,true/*保持比例*/);
                if ..string.startsWith(file,"\files\"){
                    rectf.x += 20;
                    rectf.y -= 7;
                    rectf.height = 30;
                    rectf.width = 30;
                    paint.drawImageF(rectf /*绘制范围RECTF*/,"\res\location, pin, map, hospital, navigation .png"/*图片*/,/*透明度或图片属性*/,true/*保持比例*/);
                }
                bmp.dispose();
            };
            name="paint自绘",
            click=true,  /* 是否响应鼠标点击事件 */
            cursor=32649,    /* 鼠标指针,_IDC_ 开头的常量。 */
        }        
}

var list;
try{
    if ..io.exist("\itemlist.dat"){
        var s = ..string.load("\itemlist.dat");
        if #s {
            list = eval(s);
        }
    }
}
if !#list {
    list = {
        {filename="添加文件"}
    }
} elseif list[#list]["filename"]!=="添加文件"{
    ..table.push(list,{filename="添加文件"})
}

var cst = godking.customPlus(mainForm.plus,itemModel,itemList,{
    itemWidth=150,     /*项目最小宽度,为0时根据colnum自动计算,所以不能与colnum同时=0*/
    itemHeight=70,    /*项目最小高度,为0时根据rownum自动计算,所以不能与rownum同时=0*/
    autoSizeWidth=true,    /*为true则自动将项目总宽度拉伸填满plus宽度,每个项目宽度不小于itemWidth*/
    autoSizeHeight=false,    /*为true则自动将项目总高度拉伸填满plus高度,每个项目高度不小于itemHeight*/
    rownum=0,      /*项目行数,为0时根据itemHeight自动计算,所以不能与itemHeight同时=0*/
    colnum=0,      /*项目列数,为0时根据itemWidth自动计算,所以不能与itemWidth同时=0*/
    padLeft=5,     /*plus左边空白距离*/
    padTop=5,     /*plus顶边空白距离*/
    padRight=5,     /*plus右边空白距离*/
    padBottom=5, /*plus底边空白距离*/
    autoFit=false,     /*是否自动调整plus组件宽度或高度(其中之一),保证能刚好显示全部行或列*/
                    /*当 itemHeight>0 且 colnum>0 且 rownum=0 时,自动调整plus高度,以能显示全部行*/
                    /*当 itemWidth>0 且 rownum>0 且 colnum=0 时,自动调整plus宽度,以能显示全部列*/
    vertical=false, /*是否将项目设置为竖向排列,行滚动方向设置为横向*/
    bkcolor=0xFFFFFFFF, /*背景颜色*/
    bkimg=null,   /*背景图像*/
    bkimgmode=0,  /*背景图平铺模式。0:拉伸填满;1:左上角;2:居中*/
    singleCheck=0,/*元素check单选模式。0:多选;1:每个项目内单选;2:整个列表单选*/
    dpi=0;        /*强制指定使用的dpi,为0则使用当前系统dpi*/
 })
cst.setItemList(list);
var oldlist;
var dragindex;

var save = function(){
    ..string.save("\itemlist.dat", ..table.tostring(cst.itemList))
}

var saveoldlist = function(){
    if oldlist ..string.save("\itemlist.dat", ..table.tostring(oldlist))
}

var menu = win.ui.popmenu(mainForm);
var menuopindex;

var getfile = function(file){ // 获取文件相对路径
    var infos = ..io.splitpath(file);
    var dir = ..string.lower(infos.dir)
    var fixdir = ..string.lower(..io.fullpath("\files\"))
    if dir===fixdir return "\files\"++infos.file;
    else return file;
}

var getfilepath = function(file){ //获取文件绝对路径
    if ..string.startsWith(file,"\files\",true) {
        return ..io.fullpath(file),1; //固定位置
    } else {
        return ..io.fullpath(file),0; //原始位置
    }
}

menu.add("删除",function(){
    if menuopindex and cst.itemList[menuopindex].file and cst.itemList[menuopindex].filename!=="添加文件" {
        if mainForm.msgAsk("确定要删除第【"++menuopindex++"】项【"++cst.itemList[menuopindex].filename++"】吗?") {
            var thisfile = cst.itemList[menuopindex].file;
            var file,fixed = getfilepath(thisfile);
            if ..io.exist(file) and fixed {
                if mainForm.msgAsk("是否同时删除固定文件:"++file ++"?") {
                    ..fsys.delete(file);
                }
            }
            cst.delItem(menuopindex);
            cst.update();
            if oldlist {
                for(i=#oldlist;1;-1){
                    if oldlist[i].file===thisfile {
                        ..table.remove(oldlist,i);
                    }
                }
                saveoldlist();
            } else {
                save();
            }
        }
    }
    menuopindex = null;
})

menu.add("固定",function(){
    if menuopindex and cst.itemList[menuopindex].file and cst.itemList[menuopindex].filename!=="添加文件" {
        var thisfile = cst.itemList[menuopindex].file;
        var file,fixed = getfilepath(thisfile);
        if fixed {
            menuopindex = null;
            return mainForm.msgInfo("此文件已经被固定!"); 
        }
        if mainForm.msgAsk("确定要固定第【"++menuopindex++"】项【"++cst.itemList[menuopindex].filename++"】吗?") {
            var newfile =  ..io.joinpath(..io.fullpath("\files\"),..io.splitpath(file).file);
            if ..fsys.copy(file,newfile) {
                var newpath = getfile(newfile);
                cst.itemList[menuopindex].file = newpath;
                cst.update();
                if oldlist {
                    for(i=#oldlist;1;-1){
                        if oldlist[i].file === thisfile {
                            oldlist[i].file = newpath;
                        }
                    }
                    saveoldlist();
                } else {
                    save();
                }
                mainForm.msgOk("已成功固定!")
            } else {
                mainForm.msgErr("固定失败!")
            }
        }
    }
    menuopindex = null;
})

menu.add("重命名",function(){
    if menuopindex and cst.itemList[menuopindex].file and cst.itemList[menuopindex].filename!=="添加文件" {
        var thisfile = cst.itemList[menuopindex].file;
        var file = io.fullpath(thisfile);
        var newname = mainForm.msgInput("请输入文件新名称(不包含扩展名)")
        if #newname {
            var infos = ..io.splitpath(file)
            var newfile = ..io.joinpath(infos.dir,newname++infos.ext)
            if fsys.rename(file,newfile){
                newfile = getfile(newfile);
                cst.itemList[menuopindex].file = newfile;
                cst.itemList[menuopindex].filename = newname++infos.ext;
                cst.update();
                if oldlist {
                    for(i=#oldlist;1;-1){
                        if oldlist[i].file === thisfile {
                            oldlist[i].file = newfile;
                            oldlist[i].filename = newname++infos.ext;
                        }
                    }
                    saveoldlist();
                } else {
                    save();
                }                
                mainForm.msgOk("已成功重命名!")
            } else {
                mainForm.msgErr("重命名失败!")
            }
        }
    }
    menuopindex = null;
})

cst.onRightClick = function(itemIndex/*项目索引*/,elemIndex/*元素索引*/,elemID/*元素id*/,elemName/*元素name*/,pageIndex/*当前页项目索引*/,x/*鼠标X坐标*/,y/*鼠标Y坐标*/,disabled/*项目是否禁用*/,itemRect/*项目区域*/,elemRect/*元素区域*/){
    if cst.itemList[itemIndex].file {
        menuopindex = itemIndex
        menu.popup()
    }
}

mainForm.plus.onDropFiles = function(files){
    for(i=1;#files;1){
        var file = getfile(files[i]);
        if (..string.endsWith(file,".lnk",true)) {
            file = ..fsys.lnk.getTarget(file);
        }
        cst.insertItem({
            file = file;
            filename = ..io.splitpath(file).file;
        },-1)
    }
    cst.update();
    save();
}

cst.onClick = function(itemIndex/*项目索引*/,elemIndex/*元素索引*/,elemID/*元素id*/,elemName/*元素name*/,pageIndex/*当前页项目索引*/,x/*鼠标X坐标*/,y/*鼠标Y坐标*/,disabled/*项目是否禁用*/,itemRect/*项目区域*/,elemRect/*元素区域*/){
    if !itemIndex or !dragindex or dragindex!==cst.curItem return ; 
    if cst.itemList[itemIndex].file {
        return process.execute(cst.itemList[itemIndex].file);
    } elseif cst.itemList[itemIndex].filename==="添加文件" {
        var t = ..fsys.dlg.open("所有文件|*.*","选择文件",,mainForm.hwnd,)
        if t {
            mainForm.plus.onDropFiles({t})
        }
    }
}

mainForm.adjust = function( cx,cy,wParam ) {     
    cst.resetLayout( )  
};

mainForm.button.oncommand = function(id,event){
    if #mainForm.edit.text {
        var s = "@"++mainForm.edit.text;
        oldlist := cst.itemList;
        var t = {};
        for(i=1;#oldlist;1){
            if ..string.find(oldlist[i].filename,s) {
                ..table.push(t,oldlist[i]);
            }
        }
        cst.setItemList(t);
    } else {
        if oldlist {
            cst.setItemList(oldlist);    
            oldlist = null;    
        }
    }
}

mainForm.plus.onMouseDown = function(wParam,lParam){
    dragindex = cst.curItem;
}

mainForm.plus.onMouseUp = function(wParam,lParam){
    if dragindex and cst.curItem and dragindex!==cst.curItem { // 拖动
        if oldlist { // 搜索结果不能拖动
            dragindex = null; // 防止触发onClick
            return ;
        }
        if cst.curItem===cst.itemCount or dragindex===cst.itemCount return ; 
        var t = cst.delItem(dragindex);
        cst.insertItem(t,cst.curItem);
        cst.update()
        dragindex = null; // 防止触发onClick
        save();
    }
}

mainForm.button2.oncommand = function(id,event){
    mainForm.edit.text=""
    mainForm.button.oncommand()
    
}

cst.update()
return win.loopMessage();

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

卢光庆

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值