aboutsummaryrefslogtreecommitdiff
path: root/Src/Wasabi/bfc/file/wildcharsenum.cpp
blob: ae3e24e2d2ad1df4e5b6acdea313ccc54152f0c6 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
// NONPORTABLE NONPORTABLE NONPORTABLE
#include "precomp_wasabi_bfc.h"
#ifdef WIN32
#include <windows.h>
#endif
#include "wildcharsenum.h"
#include <bfc/parse/pathparse.h>
#include <bfc/parse/paramparser.h>
#include <bfc/file/readdir.h>

WildcharsEnumerator::WildcharsEnumerator(const wchar_t *_selection) : selection(_selection) 
{
	// Then scan.
	rescan();
}

WildcharsEnumerator::~WildcharsEnumerator() {
	finddatalist.deleteAll();
}

int WildcharsEnumerator::getNumFiles() 
{
	return finddatalist.getNumItems();
}

const wchar_t *WildcharsEnumerator::enumFile(int n) {
	StringW path = finddatalist.enumItem(n)->path;
	if (!path.isempty()) 
	{
		enumFileString = StringPathCombine(path.getValue(), finddatalist.enumItem(n)->filename.getValue());
		return enumFileString;
	}
	return finddatalist.enumItem(n)->filename;
}

void WildcharsEnumerator::rescan() 
{
	finddatalist.removeAll();
	ParamParser pp(selection, L";");
	for (int is = 0; is < pp.getNumItems(); is++)
	{
		StringW _selection = pp.enumItem(is);

		PathParserW parse(_selection);
		StringW path = L"";
		StringW mask = L"";

		for (int i=0;i<parse.getNumStrings()-1;i++)
			path.AppendFolder(parse.enumString(i));

		mask = parse.getLastString();

		// enum files and store a list
		ReadDir rd(path, mask, true);
		while (rd.next()) {
			finddatalist.addItem(new find_entry(rd.getPath(), rd.getFilename()));
		}
	}
}

int WildcharsEnumerator::isWildchars(const wchar_t *filename) 
{
	return (wcschr(filename, '*') || wcschr(filename, '?'));
}