mirror of
https://github.com/chibicitiberiu/rainmeter-studio.git
synced 2024-02-24 04:33:31 +00:00
205 lines
4.1 KiB
C++
205 lines
4.1 KiB
C++
/*
|
|
Copyright (C) 2012 Brian Ferguson
|
|
|
|
This program is free software; you can redistribute it and/or
|
|
modify it under the terms of the GNU General Public License
|
|
as published by the Free Software Foundation; either version 2
|
|
of the License, or (at your option) any later version.
|
|
|
|
This program is distributed in the hope that it will be useful,
|
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
GNU General Public License for more details.
|
|
|
|
You should have received a copy of the GNU General Public License
|
|
along with this program; if not, write to the Free Software
|
|
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
|
*/
|
|
|
|
#include "StdAfx.h"
|
|
|
|
enum MeasureType
|
|
{
|
|
TYPE_FOLDERPATH,
|
|
TYPE_FOLDERSIZE,
|
|
TYPE_FILECOUNT,
|
|
TYPE_FOLDERCOUNT,
|
|
TYPE_FILENAME,
|
|
TYPE_FILETYPE,
|
|
TYPE_FILESIZE,
|
|
TYPE_FILEDATE,
|
|
TYPE_FILEPATH,
|
|
TYPE_ICON
|
|
};
|
|
|
|
enum DateType
|
|
{
|
|
DTYPE_MODIFIED,
|
|
DTYPE_CREATED,
|
|
DTYPE_ACCESSED
|
|
};
|
|
|
|
enum SortType
|
|
{
|
|
STYPE_NAME,
|
|
STYPE_SIZE,
|
|
STYPE_TYPE,
|
|
STYPE_DATE
|
|
};
|
|
|
|
enum IconSize
|
|
{
|
|
IS_SMALL = 1, // 16x16
|
|
IS_MEDIUM = 0, // 32x32
|
|
IS_LARGE = 2, // 48x48
|
|
IS_EXLARGE = 4 // 256x256
|
|
};
|
|
|
|
enum RecursiveType
|
|
{
|
|
RECURSIVE_NONE,
|
|
RECURSIVE_PARTIAL,
|
|
RECURSIVE_FULL
|
|
};
|
|
|
|
struct FileInfo
|
|
{
|
|
std::wstring fileName;
|
|
std::wstring path;
|
|
std::wstring ext;
|
|
bool isFolder;
|
|
UINT64 size;
|
|
FILETIME createdTime;
|
|
FILETIME modifiedTime;
|
|
FILETIME accessedTime;
|
|
|
|
FileInfo() :
|
|
fileName(L""),
|
|
path(L""),
|
|
ext(L""),
|
|
isFolder(false),
|
|
size(0),
|
|
createdTime(),
|
|
modifiedTime(),
|
|
accessedTime() { }
|
|
};
|
|
|
|
struct ChildMeasure;
|
|
|
|
struct ParentMeasure
|
|
{
|
|
std::wstring path;
|
|
std::wstring wildcardSearch;
|
|
SortType sortType;
|
|
DateType sortDateType;
|
|
int count;
|
|
RecursiveType recursiveType;
|
|
bool sortAscending;
|
|
bool showDotDot;
|
|
bool showFile;
|
|
bool showFolder;
|
|
bool showHidden;
|
|
bool showSystem;
|
|
bool hideExtension;
|
|
std::vector<std::wstring> extensions;
|
|
std::wstring finishAction;
|
|
|
|
std::vector<ChildMeasure*> iconChildren;
|
|
std::vector<FileInfo> files;
|
|
int fileCount;
|
|
int folderCount;
|
|
UINT64 folderSize;
|
|
bool needsUpdating;
|
|
bool needsIcons;
|
|
int indexOffset;
|
|
HANDLE thread;
|
|
|
|
void* skin;
|
|
LPCWSTR name;
|
|
ChildMeasure* ownerChild;
|
|
|
|
ParentMeasure() :
|
|
path(L""),
|
|
wildcardSearch(L""),
|
|
folderSize(0),
|
|
sortType(STYPE_NAME),
|
|
sortDateType(DTYPE_MODIFIED),
|
|
count(0),
|
|
sortAscending(true),
|
|
showDotDot(true),
|
|
showFile(true),
|
|
showFolder(true),
|
|
showHidden(true),
|
|
showSystem(false),
|
|
hideExtension(false),
|
|
extensions(),
|
|
finishAction(),
|
|
iconChildren(),
|
|
files(),
|
|
skin(nullptr),
|
|
name(L""),
|
|
ownerChild(nullptr),
|
|
thread(nullptr),
|
|
fileCount(0),
|
|
folderCount(0),
|
|
needsUpdating(true),
|
|
needsIcons(true),
|
|
indexOffset(0),
|
|
recursiveType(RECURSIVE_NONE) { }
|
|
};
|
|
|
|
struct ChildMeasure
|
|
{
|
|
MeasureType type;
|
|
DateType date;
|
|
IconSize iconSize;
|
|
std::wstring iconPath;
|
|
int index;
|
|
bool ignoreCount;
|
|
|
|
std::wstring strValue;
|
|
ParentMeasure* parent;
|
|
|
|
ChildMeasure() :
|
|
type(TYPE_FOLDERPATH),
|
|
date(DTYPE_MODIFIED),
|
|
iconSize(IS_LARGE),
|
|
iconPath(L""),
|
|
index(1),
|
|
ignoreCount(false),
|
|
strValue(L""),
|
|
parent(nullptr) { }
|
|
};
|
|
|
|
std::vector<std::wstring> Tokenize(const std::wstring& str, const std::wstring& delimiters)
|
|
{
|
|
std::vector<std::wstring> tokens;
|
|
|
|
std::wstring::size_type lastPos = str.find_first_not_of(delimiters, 0);
|
|
std::wstring::size_type pos = str.find_first_of(delimiters, lastPos);
|
|
|
|
while (std::wstring::npos != pos || std::wstring::npos != lastPos)
|
|
{
|
|
tokens.emplace_back(str.substr(lastPos, pos - lastPos));
|
|
lastPos = str.find_first_not_of(delimiters, pos);
|
|
pos = str.find_first_of(delimiters, lastPos);
|
|
}
|
|
|
|
return tokens;
|
|
}
|
|
|
|
/*std::wstring UINT64_To_String(UINT64 value)
|
|
{
|
|
std::wstring result;
|
|
result.reserve(20); // Max of 20 digits possible
|
|
do
|
|
{
|
|
result += "0123456789"[value % 10];
|
|
value /= 10;
|
|
}
|
|
while(value);
|
|
|
|
std::reverse(result.begin(), result.end());
|
|
|
|
return result;
|
|
}*/ |