100行lua代碼實現簡單目錄瀏覽器

 

lae下載地址:html

https://github.com/ouloba/laetool.gitgit

lae下載地址(國內):https://pan.baidu.com/s/1ckMy0Qgithub

相關視頻:瀏覽器

http://www.tudou.com/listplay/aly7NDWz_sQ/AaqZ81jIt-k.html編輯器

教程:ide

lae界面開發工具入門介紹之一<新建工程篇>工具

lae界面開發工具入門之介紹二--<渲染組件篇>佈局

lae界面開發工具入門之介紹三--<佈局篇>開發工具

 lae界面開發工具入門之介紹四--<祕籍篇-拷貝粘貼>ui

lae界面開發工具入門之介紹五--<祕籍篇-雜項>

lae界面開發工具入門之介紹六--<祕籍篇-狀態篇>

 

關於lae工具問題單獨介紹!

--lua代碼

lua編輯器 
csdn下載

github下載地址,csdn沒有更新版本功能,這裏改成git,可實時得到最新的版本
下載地址:

 

--目錄瀏覽器下載地址

https://github.com/ouloba/folder-explorer.git

--輔助接口
LXZDoFile("LXZHelper.lua");
LXZDoFile("serial.lua");

--每幀調用,root窗口status中IsActive設置爲true,便可觸發OnUpdate事件。
local function OnUpdate(window, msg, sender)
 UpdateWindow();
end

--更新目錄子目錄或者文件列表
local function UpdateDirectry(dir)
 local root = HelperGetRoot();
 
 --set current dir. 
 lfs.chdir(dir);
 HelperSetWindowText(root:GetLXZWindow("directry"), dir);
 
 --
 local items = root:GetLXZWindow("folders:area:items"); --目錄文件容器
 local item = root:GetLXZWindow("folders:item"); --目錄文件項 
 local path = lfs.currentdir();
 
 --清除容器中內容
 items:ClearChilds();
 
 --遍歷該目錄下的子目錄文件
 local cnt = 0;
 for file in lfs.dir(lfs.currentdir()) do
  local wnd = item:Clone(); --克隆一個目錄文件項"folders:item"
  wnd:Show();                      --顯示
  HelperSetWindowText(wnd:GetChild("text"), file); --設置目錄或者文件名
  items:AddChild(wnd);   --加入items容器中
  
  local f = path.."\\"..file;
  local attr = lfs.attributes(f);    
  if attr and attr.mode=="directory" then
   wnd:GetChild("icon"):SetState(0); --經過0狀態設置目錄圖標
  else
   wnd:GetChild("icon"):SetState(1);--經過1狀態設置文件名圖標
  end  
  cnt=cnt+1;
 end
 
 --若是沒法訪問該目錄,則添加"."與".."
 if cnt==0 then
  local wnd = item:Clone();
  wnd:Show();
  HelperSetWindowText(wnd:GetChild("text"), ".");
  items:AddChild(wnd);  
  
  local wnd = item:Clone();
  wnd:Show();
  HelperSetWindowText(wnd:GetChild("text"), "..");
  items:AddChild(wnd);  
 end
 
 --垂直滾動條適應內容大小。
 local msg = CLXZMessage:new_local();
 local wnd = root:GetLXZWindow("folders:vertical slider");
 wnd:ProcMessage("OnReset", msg, wnd);
 
end

--點擊目錄或者文件項
local function OnClickItem(window, msg, sender)
 local file=HelperGetWindowText(sender:GetChild("text"));
 local path = lfs.currentdir();
 
 local f = path.."\\"..file;
  local attr,err = lfs.attributes (f)
  if attr== nil then
  LXZMessageBox("error:"..err);
  return;
  end
 
 -- LXZMessageBox("type(attr)"..type(attr).."f:"..f)
     assert (type(attr) == "table");
     if attr.mode == "directory" then --若是是目錄
  UpdateDirectry(f);  
  end

end

--ui加載時觸發該事件
local function OnLoad(window, msg, sender)
 local root = HelperGetRoot();
 
 --set default.
 local default_dir = "c:\\";
 HelperSetWindowText(root:GetLXZWindow("directry"), default_dir);
 
 --set folder list.
 UpdateDirectry(default_dir);
end

--事件與接口綁定
local event_callback = {}
event_callback ["OnUpdate"] = OnUpdate;
event_callback ["OnLoad"] = OnLoad;
event_callback ["OnClickItem"] = OnClickItem;

--事件分發器
function main_dispacher(window, cmd, msg, sender)
--- LXZAPI_OutputDebugStr("cmd 1:"..cmd);
 if(event_callback[cmd] ~= nil) then
--  LXZAPI_OutputDebugStr("cmd 2:"..cmd);
  event_callback[cmd](window, msg, sender);
 end
end

增長權限、建立時間、修改時間等

--增長lua代碼

    

    if attr then            
            HelperSetWindowText(wnd:GetChild("access time"), os.date("%c", attr.access) );
            HelperSetWindowText(wnd:GetChild("modify time"), os.date("%c", attr.modification));
            HelperSetWindowText(wnd:GetChild("change time"), os.date("%c", attr.change));
            HelperSetWindowText(wnd:GetChild("permissions"), attr.permissions);
        end

--界面修改以下

--增長瀏覽圖片的功能

--修改lua代碼,增長事件

--獲取擴展名  
function getextension(filename)  
    return filename:match(".+%.(%w+)$")  
end  


--鼠標進入
local function OnMouseEnterItem(window, msg, sender)
    local file=HelperGetWindowText(sender:GetChild("text"));
    local path = lfs.currentdir();
    
    local f = path.."\\"..file;
     local attr,err = lfs.attributes (f)
     if attr== nil then
        LXZMessageBox("error:"..err);
        return;
     end
     
     local root = HelperGetRoot();    
     assert (type(attr) == "table");
     local ext = getextension(file);
     
     LXZAPI_OutputDebugStr("OnMouseEnterItem:"..f.." mode:"..attr.mode);
     
     if attr.mode == "file" and (ext=="png" or ext=="PNG") then --若是是圖片文件
        LXZAPI_OutputDebugStr("OnMouseEnterItem:"..f.." ext:"..ext.." mode:"..attr.mode);
        local wnd = root:GetLXZWindow ("folders:show picture");
        HelperSetWindowPictureFile(wnd,f);
        wnd:Show();
        HelperCoroutine(function(thread)
            AddWndUpdateFunc(wnd, EffectFaceOut, {from=255, End=200,step=3, old=255, hide=true}, thread);        
            coroutine.yield();
            local texture = ILXZTexture:GetTexture(f);
            if texture then
                texture:RemoveTexture();
            end
        end);
     end
end

表現以下

相關文章
相關標籤/搜索