// ---------------------------------------------------------------------------- // ArchiveEntryList::getItemText // // Called when the widget requests the text for [item] at [column] // ---------------------------------------------------------------------------- string ArchiveEntryList::getItemText(long item, long column, long index) const { // Get entry ArchiveEntry* entry = getEntry(index, false); // Check entry if (!entry) return "INVALID INDEX"; // Determine what column we want int col = columnType(column); if (col == 0) return entry->getName(); // Name column else if (col == 1) { // Size column if (entry->getType() == EntryType::folderType()) { // Entry is a folder, return the number of entries+subdirectories in it ArchiveTreeNode* dir = nullptr; // Get selected directory if (entry == entry_dir_back) dir = (ArchiveTreeNode*)current_dir->getParent(); // If it's the 'back directory', get the current dir's parent else dir = archive->getDir(entry->getName(), current_dir); // If it's null, return error if (!dir) return "INVALID DIRECTORY"; // Return the number of items in the directory return S_FMT("%d entries", dir->numEntries() + dir->nChildren()); } else return entry->getSizeString(); // Not a folder, just return the normal size string } else if (col == 2) return entry->getTypeString(); // Type column else if (col == 3) { // Index column if (entry->getType() == EntryType::folderType()) return ""; else return S_FMT("%d", entry->getParentDir()->entryIndex(entry)); } else return "INVALID COLUMN"; // Invalid column }
MapTextureBrowser::MapTextureBrowser(wxWindow* parent, int type, string texture) : BrowserWindow(parent) { // Init variables this->type = type; setSortType(1); // Set window title SetTitle("Browse Map Textures"); // Textures if (type == 0 || theGameConfiguration->mixTexFlats()) { // No texture '-' addItem(new MapTexBrowserItem("-", 0, 0), "Textures"); // Composite textures vector<TextureResource::tex_res_t> textures; theResourceManager->getAllTextures(textures, NULL); for (unsigned a = 0; a < textures.size(); a++) addItem(new MapTexBrowserItem(textures[a].tex->getName(), 0, textures[a].tex->getIndex()+1), "Textures/TEXTUREx"); // Texture namespace patches (TX_) if (theGameConfiguration->txTextures()) { vector<ArchiveEntry*> patches; theResourceManager->getAllPatchEntries(patches, NULL); for (unsigned a = 0; a < patches.size(); a++) { if (patches[a]->isInNamespace("textures")) { // Determine texture path if it's in a pk3 string path = patches[a]->getPath(); if (path.StartsWith("/textures/")) path.Remove(0, 9); else path = ""; addItem(new MapTexBrowserItem(patches[a]->getName(true), 0, a), "Textures/Textures (TX)" + path); } } } } // Flats if (type == 1 || theGameConfiguration->mixTexFlats()) { vector<ArchiveEntry*> flats; theResourceManager->getAllFlatEntries(flats, NULL); for (unsigned a = 0; a < flats.size(); a++) { ArchiveEntry* entry = flats[a]; // Determine flat path if it's in a pk3 string path = entry->getPath(); if (path.StartsWith("/flats/")) path.Remove(0, 6); else path = ""; addItem(new MapTexBrowserItem(entry->getName(true), 1, entry->getParentDir()->entryIndex(entry)), "Flats" + path); } } populateItemTree(); // Select initial texture (if any) if (!texture.IsEmpty()) selectItem(texture); }