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(); }
// 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()); }
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); }
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); } } }
void AppendField(MessageField & field) { AppendEntry(field.Key); AppendEntry(field.Value); }