====== 파일 탐색기 가이드 ====== 전용 브라우저에서 제공하는 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); }