목차

파일 탐색기 가이드

전용 브라우저에서 제공하는 xplusgetfolderlist, xplusgetfilelist, xplusgetfilestate API를 이용한 파일 탐색기 예제이다.

예시

템플릿 위치: /HTML5/UTIL/XPLUS/xplus_filebrowser

템플릿 파일

화면 스크립트

// 폴더 이름 배열을 트리에 표시
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);
}