====== 파일 탐색기 가이드 ======
전용 브라우저에서 제공하는 xplusgetfolderlist, xplusgetfilelist, xplusgetfilestate API를 이용한 파일 탐색기 예제이다.
===== 예시 =====
템플릿 위치: /HTML5/UTIL/XPLUS/xplus_filebrowser
템플릿 파일
* [[xf5projecthome>template/screen/HTML5/UTIL/XPLUS/xplus_filebrowser.xml|xplus_filebrowser.xml]]
* [[xf5projecthome>template/screen/HTML5/UTIL/XPLUS/xplus_filebrowser.js|xplus_filebrowser.js]]
* [[xf5projecthome>template/template.html?xframe_screen_url=/HTML5/UTIL/XPLUS/xplus_filebrowser|새창으로 실행]]
echo '';
echo '';
echo '';
==== 화면 스크립트 ====
// 폴더 이름 배열을 트리에 표시
function DisplayFolderList(parent_item, folder_name_arr)
{
var i, folder_name_count, folder_name_arr, new_item, parent_folder_path;
parent_folder_path = this.tre_folderlist.getitemdata(parent_item);
if (parent_folder_path[parent_folder_path.length - 1] != "\\") {
parent_folder_path += "\\";
}
folder_name_count = folder_name_arr.length;
for (i = 0; i < folder_name_count; i++) {
// 트리에 추가
new_item = this.tre_folderlist.insertitem(folder_name_arr[i], 1, 2, parent_item, false);
// 트리에 추가된 아이템에 경로 정보 데이터 설정
this.tre_folderlist.setitemdata(new_item, parent_folder_path + folder_name_arr[i]);
}
this.tre_folderlist.refresh();
}
// 특정 폴더 파일 리스트를 구하여 표시
function DisplayFileList(folder_path)
{
var i, file_name_arr, file_name_count, file_state;
// 파일 목록 그리드 전체 삭제
this.grd_filelist.deleteall();
// 폴더 경로 값 보정
if (folder_path[folder_path.length - 1] != "\\") { folder_path += "\\"; }
// 파일 경로를 구함
file_name_arr = factory.xplusgetfilelist(folder_path);
if (!file_name_arr) { return; }
// 파일 목록에 대한 정보 추출 및 그리드에 표시
file_name_count = file_name_arr.length;
for (i = 0; i < file_name_count; i++) {
file_state = factory.xplusgetfilestate(folder_path + file_name_arr[i]);
row_index = this.grd_filelist.additemex(0, file_name_arr[i], false);
this.grd_filelist.setitemtext(row_index, 1, file_state.nfilesize);
this.grd_filelist.setitemtext(row_index, 2, file_state.strlastmodifytime);
}
this.grd_filelist.refresh();
}
function screen_on_load()
{
this.btn_getdriverlist_on_mouseup();
}
function btn_getdriverlist_on_mouseup(objInst)
{
var i, drive_count, drive_arr;
// 드라이브 리스트 초기화
this.cbo_drivelist.removeall();
// 드라이브 목록을 구함
drive_arr = factory.xplusgetfolderlist();
if (!drive_arr) { return; }
// 드라이브 목록을 콤보에 표시
drive_count = drive_arr.length;
for (i = 0; i < drive_count; i++) {
this.cbo_drivelist.addstring(i + ":" + drive_arr[i]);
}
// 첫번째 드라이브 선택
this.cbo_drivelist.setselectedindex(0);
}
// 드라이브 목록 변경 이벤트
function cbo_drivelist_on_itemchange(objInst, nprev_item, ncur_item, event_type)
{
var i, drive_path, folder_count, folder_arr, root_item, new_item;
// 기존 트리 모두 삭제
this.tre_folderlist.deleteallitems();
drive_path = this.cbo_drivelist.getselectedcomment();
// 트리 루트 아이템에 드라이브 표시
root_item = this.tre_folderlist.insertitem(drive_path, 0, 0, null);
this.tre_folderlist.setitemdata(root_item, drive_path);
// 드라이브 첫번째 디렉토리 목록을 구해서 트리에 추가
folder_arr = factory.xplusgetfolderlist(drive_path);
this.DisplayFolderList(root_item, folder_arr);
this.DisplayFileList(drive_path);
this.fld_folderpath.settext(drive_path);
this.tre_folderlist.expand(root_item, 2);
}
// 폴더 트리 더블클릭 이벤트
function tre_folderlist_on_itemdblclick(objInst, item)
{
var i, folder_name_arr, child_count, new_item, folder_path;
// 더블클릭한 아이템의 자식 아이템을 갯수를 구하여 0개 이상인 경우, 리턴
child_count = this.tre_folderlist.getchilditemcount(item, false);
if (child_count > 0) { return; }
// 더블클릭한 아이템의 하위 폴더 리스트를 구함
folder_path = this.tre_folderlist.getitemdata(item);
folder_name_arr = factory.xplusgetfolderlist(folder_path);
// 더블클릭한 아이템의 하위 폴더 리스트를 표시
this.DisplayFolderList(item, folder_name_arr);
child_count = this.tre_folderlist.getchilditemcount(item, false);
if (child_count > 0) {
this.tre_folderlist.expand(item, XFD_TREEITEM_TOGGLE, true);
}
}
// 폴더 트리 클릭 이벤트
function tre_folderlist_on_itemclick(objInst, item, iconclick, checkclick)
{
var folder_path, file_state, row_index, i, file_count, file_arr;
// 상단 텍스트에 선택한 폴더 경로 표시
folder_path = this.tre_folderlist.getitemdata(item);
this.fld_folderpath.settext(folder_path);
// 선택한 폴도의 파일 리스트 표시
this.DisplayFileList(folder_path);
}