Ejemplo n.º 1
0
    STARTDECL(scan_folder) (Value &fld, Value &divisor)
    {
        string folder = SanitizePath(fld.sval->str());
        fld.DEC();

        if (divisor.ival <= 0) divisor.ival = 1;

        #ifdef WIN32

        WIN32_FIND_DATA fdata;
        HANDLE fh = FindFirstFile((folder + "\\*.*").c_str(), &fdata);
        if (fh == INVALID_HANDLE_VALUE) return Value(0, V_NIL);

        auto list = g_vm->NewVector(0, V_VECTOR);

        do
        {
            if (strcmp(fdata.cFileName, ".") && strcmp(fdata.cFileName, ".."))
            {
                ULONGLONG size = (static_cast<ULONGLONG>(fdata.nFileSizeHigh) << (sizeof(uint) * 8)) | fdata.nFileSizeLow;
                AddDirItem(list, fdata.cFileName, fdata.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY ? -1 : size, divisor.ival);
            }
        }
        while(FindNextFile(fh, &fdata));
        FindClose(fh);
        return Value(list);

        #elif !defined(ANDROID)

        glob_t gl;
        string mask = folder + "/*";
        if (glob(mask.c_str(), GLOB_MARK | GLOB_TILDE, NULL, &gl)) return Value(0, V_NIL);

        auto list = g_vm->NewVector(0, V_VECTOR);

        for (size_t fi = 0; fi < gl.gl_pathc; fi++)
        {
            string xFileName = gl.gl_pathv[fi];
            bool isDir = xFileName[xFileName.length()-1] == '/';
            if (isDir) xFileName = xFileName.substr(0, xFileName.length() - 1);
            string cFileName = xFileName.substr(xFileName.find_last_of('/') + 1);
            struct stat st;
            stat(gl.gl_pathv[fi], &st);

            AddDirItem(list, cFileName.c_str(), isDir ? -1 : st.st_size, divisor.ival);
        }
        globfree(&gl);
        return Value(list);

        #else

        return Value(0, V_NIL);

        #endif
    }
Ejemplo n.º 2
0
void CBrowseDlg::FillMe() {
	m_ctlDirs.DeleteAllItems();

	// TODO: GetDeviceName
	CLocalizedString sMyDevice;
	sMyDevice.LoadString(IDS_MYDEVICE);

	m_hRootItem = AddDirItem(TVI_ROOT, sMyDevice, ICON_DEVICE, FALSE);
	AddPathItems(m_hRootItem, _T("\\"));
	m_ctlDirs.Expand(m_hRootItem, TVE_EXPAND);
}
Ejemplo n.º 3
0
void CBrowseDlg::AddPathItems(HTREEITEM hParent, CString strPath) {
	WIN32_FIND_DATA fd;
	CString mask;
	mask.Format(_T("%s*.*"), strPath);
	HANDLE hFind = FindFirstFile(mask, &fd);
	if (hFind != INVALID_HANDLE_VALUE) {
		do {
			if (fd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) {
				HTREEITEM hItem = AddDirItem(hParent, fd.cFileName, ICON_DIR, FALSE);

				// add one child, to display the plus sing
				CString strSubDir = strPath + fd.cFileName + _T("\\");
				AddPossibleChild(hItem, strSubDir);
			}
			else if (m_bFiles) {
				CString strFileName = CString(fd.cFileName);
				if (HasExt(strFileName)) {
					CString strFilePath = strPath + strFileName;
					SHFILEINFO sfi = { 0 };
					SHGetFileInfo(strFilePath, 0, &sfi, sizeof(sfi), SHGFI_ICON | SHGFI_SMALLICON); // | SHGFI_SYSICONINDEX);
					int nIdx = m_oImageList.Add(sfi.hIcon);
					if (nIdx == -1)
						nIdx = ICON_FILE;

					HTREEITEM hItem = AddDirItem(hParent, strFileName, nIdx, FALSE);
					DeleteObject(sfi.hIcon);
				}
			}
		} while (FindNextFile(hFind, &fd));
		FindClose(hFind);


		// Sort the items in the tree control using my callback procedure.
		TVSORTCB tvs;
		tvs.hParent = hParent;
		tvs.lpfnCompare = DirFileCompareProc;
		tvs.lParam = (LPARAM) &m_ctlDirs;
		m_ctlDirs.SortChildrenCB(&tvs);
	}
}
Ejemplo n.º 4
0
void CBrowseDlg::AddPossibleChild(HTREEITEM hParent, CString strPath) {
	WIN32_FIND_DATA fd;
	CString mask;
	mask.Format(_T("%s*.*"), strPath);
	HANDLE hFind = FindFirstFile(mask, &fd);
	if (hFind != INVALID_HANDLE_VALUE) {
		do {
			if (fd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) {
				AddDirItem(hParent, fd.cFileName, ICON_DIR, FALSE);
				break;
			}
			else if (m_bFiles) {
				CString strFileName = CString(fd.cFileName);
				if (HasExt(strFileName)) {
					AddDirItem(hParent, fd.cFileName, ICON_FILE, FALSE);
					break;
				}
			}
		} while (FindNextFile(hFind, &fd));
		FindClose(hFind);
	}
}
Ejemplo n.º 5
0
void CBrowseDlg::OnNewFolder() {
	HTREEITEM hSelItem = m_ctlDirs.GetSelectedItem();
	if (hSelItem == NULL) return;

	m_ctlDirs.ModifyStyle(0, TVS_EDITLABELS);

	m_ctlDirs.Expand(hSelItem, TVE_EXPAND);
	m_bExpandDelete = FALSE;
	HTREEITEM hNewItem = AddDirItem(hSelItem, _T(""), ICON_DIR, FALSE, TVI_FIRST);
	m_ctlDirs.Expand(hSelItem, TVE_EXPAND);
	m_bExpandDelete = TRUE;

	m_ctlDirs.EnsureVisible(hNewItem);
	m_ctlDirs.EditLabel(hNewItem);
}