CubeMapTextureBrowser::CubeMapTextureBrowser(SceneEditor2* currentScene, QWidget *parent) : QDialog(parent), ui(new Ui::CubeMapTextureBrowser), cubeListItemDelegate(QSize(FACE_IMAGE_SIZE, FACE_IMAGE_SIZE)) { scene = currentScene; ui->setupUi(this); ui->loadingWidget->setVisible(false); ui->listTextures->setItemDelegate(&cubeListItemDelegate); ConnectSignals(); FilePath projectPath = CubemapUtils::GetDialogSavedPath("Internal/CubemapLastProjDir", ProjectManager::Instance()->CurProjectDataSourcePath().GetAbsolutePathname()); ui->textRootPath->setText(projectPath.GetAbsolutePathname().c_str()); ReloadTextures(projectPath.GetAbsolutePathname()); UpdateCheckedState(); }
CubeMapTextureBrowser::CubeMapTextureBrowser(SceneEditor2* currentScene, QWidget *parent) : QDialog(parent), ui(new Ui::CubeMapTextureBrowser), cubeListItemDelegate(QSize(FACE_IMAGE_SIZE, FACE_IMAGE_SIZE)) { scene = currentScene; ui->setupUi(this); ui->loadingWidget->setVisible(false); ui->listTextures->setItemDelegate(&cubeListItemDelegate); ConnectSignals(); FilePath projectPath = CubemapUtils::GetDialogSavedPath(ResourceEditor::CUBEMAP_LAST_PROJECT_DIR_KEY, EditorSettings::Instance()->GetDataSourcePath().GetAbsolutePathname(), EditorSettings::Instance()->GetDataSourcePath().GetAbsolutePathname()); ui->textRootPath->setText(projectPath.GetAbsolutePathname().c_str()); ReloadTextures(projectPath.GetAbsolutePathname()); UpdateCheckedState(); }
void CubeMapTextureBrowser::ReloadTextures(const DAVA::String& rootPath) { cubeListItemDelegate.ClearCache(); ui->listTextures->clear(); ui->listTextures->setVisible(false); ui->loadingWidget->setVisible(true); this->paintEvent(NULL); ui->loadingWidget->update(); QApplication::processEvents(); QApplication::flush(); this->setUpdatesEnabled(false); QDir dir(rootPath.c_str()); QStringList filesList = dir.entryList(QStringList("*.tex")); size_t cubemapTextures = 0; if(filesList.size() > 0) { DAVA::Vector<CubeListItemDelegate::ListItemInfo> cubemapList; FilePath fp = rootPath; for(int i = 0; i < filesList.size(); ++i) { QString str = filesList.at(i); fp.ReplaceFilename(str.toStdString()); DAVA::TextureDescriptor* texDesc = DAVA::TextureDescriptor::CreateFromFile(fp); if(texDesc && texDesc->IsCubeMap()) { CubeListItemDelegate::ListItemInfo itemInfo; itemInfo.path = fp; itemInfo.valid = ValidateTextureAndFillThumbnails(fp, itemInfo.icons, itemInfo.actualSize); if(itemInfo.valid) { cubemapList.push_back(itemInfo); } else { //non-valid items should be always at the beginning of the list cubemapList.insert(cubemapList.begin(), itemInfo); } } SafeDelete(texDesc); } cubeListItemDelegate.UpdateCache(cubemapList); for(size_t i = 0; i < cubemapList.size(); ++i) { CubeListItemDelegate::ListItemInfo& itemInfo = cubemapList[i]; QListWidgetItem* listItem = new QListWidgetItem(); listItem->setData(Qt::CheckStateRole, false); listItem->setData(CUBELIST_DELEGATE_ITEMFULLPATH, itemInfo.path.GetAbsolutePathname().c_str()); listItem->setData(CUBELIST_DELEGATE_ITEMFILENAME, itemInfo.path.GetFilename().c_str()); ui->listTextures->addItem(listItem); } cubemapTextures = cubemapList.size(); ui->listTextures->setCurrentItem(ui->listTextures->item(0)); } this->setUpdatesEnabled(true); ui->listTextures->setVisible(cubemapTextures > 0); ui->loadingWidget->setVisible(false); UpdateCheckedState(); }
void CubeMapTextureBrowser::OnDeleteSelectedItemsClicked() { int checkedItemCount = GetCheckedItemsCount(); int answer = MB_FLAG_NO; if(checkedItemCount > 0) { QString text = QString("%1 item(s) will be deleted. Continue?").arg(QString().setNum(checkedItemCount)); answer = ShowQuestion("Confirmation", text.toStdString(), MB_FLAG_YES | MB_FLAG_NO, MB_FLAG_NO); } if(MB_FLAG_YES == answer) { DAVA::Vector<DAVA::String> failedToRemove; int itemCount = ui->listTextures->count(); for(int i = 0; i < itemCount; ++i) { QListWidgetItem* item = ui->listTextures->item(i); bool checkedState = item->data(Qt::CheckStateRole).toBool(); if(checkedState) { FilePath fp = item->data(CUBELIST_DELEGATE_ITEMFULLPATH).toString().toStdString(); if(fp.Exists()) { DAVA::Vector<DAVA::String> faceNames; CubemapUtils::GenerateFaceNames(fp.GetAbsolutePathname(), faceNames); for(size_t faceIndex = 0; faceIndex < faceNames.size(); ++faceIndex) { FilePath hackTex = faceNames[faceIndex]; hackTex.ReplaceExtension(".tex"); QFile::remove(hackTex.GetAbsolutePathname().c_str()); bool removeResult = QFile::remove(faceNames[faceIndex].c_str()); if(!removeResult) { failedToRemove.push_back(faceNames[faceIndex]); } } bool removeResult = QFile::remove(fp.GetAbsolutePathname().c_str()); if(!removeResult) { failedToRemove.push_back(fp.GetAbsolutePathname().c_str()); } } } } if(failedToRemove.size() > 0) { DAVA::String fileList; int count = failedToRemove.size(); for(int i = 0; i < count; ++i) { fileList += failedToRemove[i]; fileList += "\n"; } DAVA::String message = "Failed to remove the following files. Please delete them manually.\n"; message += fileList; ShowErrorDialog(message); } QString path = ui->textRootPath->text(); ReloadTexturesFromUI(path); UpdateCheckedState(); } }
void CubeMapTextureBrowser::OnItemCheckStateChanged(const QModelIndex &index) { UpdateCheckedState(); }