void CInArchive::ReadUnpackInfo( const CObjectVector<CByteBuffer> *dataVector, CObjectVector<CFolder> &folders) { WaitAttribute(NID::kFolder); CNum numFolders = ReadNum(); { CStreamSwitch streamSwitch; streamSwitch.Set(this, dataVector); folders.Clear(); folders.Reserve(numFolders); for (CNum i = 0; i < numFolders; i++) { folders.Add(CFolder()); GetNextFolderItem(folders.Back()); } } WaitAttribute(NID::kCodersUnpackSize); CNum i; for (i = 0; i < numFolders; i++) { CFolder &folder = folders[i]; CNum numOutStreams = folder.GetNumOutStreams(); folder.UnpackSizes.Reserve(numOutStreams); for (CNum j = 0; j < numOutStreams; j++) folder.UnpackSizes.Add(ReadNumber()); } for (;;) { UInt64 type = ReadID(); if (type == NID::kEnd) return; if (type == NID::kCRC) { CBoolVector crcsDefined; CRecordVector<UInt32> crcs; ReadHashDigests(numFolders, crcsDefined, crcs); for (i = 0; i < numFolders; i++) { CFolder &folder = folders[i]; folder.UnpackCRCDefined = crcsDefined[i]; folder.UnpackCRC = crcs[i]; } continue; } SkipData(); } }
////////////////////////////////////////////////////////////////////////// // // ////////////////////////////////////////////////////////////////////////// // Create a new folder in the specified item. QTreeWidgetItem *CMainWindow::CreateFolder(QTreeWidgetItem *p_pItem, const QDir &p_oPath) { // Retrieves parent folder. CFolder *pParentFolder = p_pItem->data(0, Qt::UserRole).value<CFolder*>(); CFolder *pFolder = SAM_NEW CFolder(p_oPath, pParentFolder); pParentFolder->AddFolder(pFolder); QVariant oData = qVariantFromValue<CFolder*>(pFolder); QTreeWidgetItem *pItem = new QTreeWidgetItem(); pItem->setIcon(0, QIcon(QStringLiteral(":/data/32x32/directory.png"))); pItem->setFlags(pItem->flags() | Qt::ItemIsEditable); pItem->setData(0, Qt::UserRole, oData); pItem->setText(0, p_oPath.dirName()); p_pItem->addChild(pItem); ui->projectsTreeWidget->setCurrentItem(pItem); return pItem; }