示例#1
0
void TTreeView::Recompute()
{
	TableEntryRecord *te;
	XGDraw draw(this);
	draw.SetFont(XGFont::LoadFont(1));
		
	fWidth = 0;
	fLength = 0;
	fDrawList.SetSize(0);
	for (te = fRoot; te != NULL; te = te->next) {
		//te->fOpen = true;				/* All top level items are open. */ NOT ANYMORE!
		AppendEntry(draw,0,te);
	}
	RecalcScroll();
}
示例#2
0
// creates an archive from files (starting at index skipFiles);
// file paths may be relative to the current directory or absolute and
// may end in a colon followed by the desired path in the archive
// (this is required for absolute paths)
bool CreateArchive(const WCHAR *archivePath, WStrVec& files, size_t skipFiles=0)
{
    size_t prevDataLen = 0;
    ScopedMem<char> prevData(file::ReadAll(archivePath, &prevDataLen));
    lzma::SimpleArchive prevArchive;
    if (!lzma::ParseSimpleArchive(prevData, prevDataLen, &prevArchive))
        prevArchive.filesCount = 0;

    str::Str<char> data;
    str::Str<char> content;

    ByteWriterLE lzsaHeader(data.AppendBlanks(8), 8);
    lzsaHeader.Write32(LZMA_MAGIC_ID);
    lzsaHeader.Write32((uint32_t)(files.Count() - skipFiles));

    for (size_t i = skipFiles; i < files.Count(); i++) {
        ScopedMem<WCHAR> filePath(str::Dup(files.At(i)));
        WCHAR *sep = str::FindCharLast(filePath, ':');
        ScopedMem<char> utf8Name;
        if (sep) {
            utf8Name.Set(str::conv::ToUtf8(sep + 1));
            *sep = '\0';
        }
        else {
            utf8Name.Set(str::conv::ToUtf8(filePath));
        }

        str::TransChars(utf8Name, "/", "\\");
        if ('/' == *utf8Name || str::Find(utf8Name, "../")) {
            fprintf(stderr, "In-archive name must not be an absolute path: %s\n", utf8Name);
            return false;
        }

        int idx = GetIdxFromName(&prevArchive, utf8Name);
        lzma::FileInfo *fi = NULL;
        if (idx != -1)
            fi = &prevArchive.files[idx];
        if (!AppendEntry(data, content, filePath, utf8Name, fi))
            return false;
    }

    uint32_t headerCrc32 = crc32(0, (const uint8_t *)data.Get(), (uint32_t)data.Size());
    ByteWriterLE(data.AppendBlanks(4), 4).Write32(headerCrc32);
    if (!data.AppendChecked(content.Get(), content.Size()))
        return false;

    return file::WriteAll(archivePath, data.Get(), data.Size());
}
示例#3
0
void Environment::SetEnv(const TCHAR* key, const TCHAR* value)
{
	assert(key);
	assert(value);

	std::pair<size_t, size_t> keyPos = FindKey(m_env, key);


	std::vector<TCHAR> newEnv(m_env.begin(), m_env.begin()+keyPos.first);

	AppendEntry(newEnv, key, value);

	newEnv.insert(newEnv.end(), m_env.begin()+keyPos.second, m_env.end());

	m_env.swap(newEnv);
}
示例#4
0
void TTreeView::AppendEntry(XGDraw &draw, short inset, TableEntryRecord *r)
{
	TableDrawRecord data;
	TableEntryRecord *te;
	long width;
	char buffer[256];
	
	fLength++;
	data.inset = inset;
	data.entry = r;
	fDrawList.Append(sizeof(data),&data);
	
	GetItemData((uint32)r,buffer,sizeof(buffer));
	width = 5 + (inset + 1) * 22 + draw.StringWidth(buffer);
	if (width > fWidth) fWidth = width;
	
	if (r->fOpen) {
		inset++;
		for (te = r->child; te != NULL; te = te->next) {
			AppendEntry(draw,inset,te);
		}
	}
}
示例#5
0
 void AppendField(MessageField & field) {
     AppendEntry(field.Key);
     AppendEntry(field.Value);
 }