diff options
| author | Bryan Galdrikian <[email protected]> | 2017-02-21 12:07:59 -0800 |
|---|---|---|
| committer | Bryan Galdrikian <[email protected]> | 2017-02-21 12:07:59 -0800 |
| commit | 446ce137c6823ba9eff273bdafdaf266287c7c98 (patch) | |
| tree | d20aab3e2ed08d7b3ca71c2f40db6a93ea00c459 /NvBlast/tools/ArtistTools/source/BlastPlugin/Window/BlastCompositePanel.cpp | |
| download | blast-1.0.0-beta.tar.xz blast-1.0.0-beta.zip | |
first commitv1.0.0-beta
Diffstat (limited to 'NvBlast/tools/ArtistTools/source/BlastPlugin/Window/BlastCompositePanel.cpp')
| -rw-r--r-- | NvBlast/tools/ArtistTools/source/BlastPlugin/Window/BlastCompositePanel.cpp | 306 |
1 files changed, 306 insertions, 0 deletions
diff --git a/NvBlast/tools/ArtistTools/source/BlastPlugin/Window/BlastCompositePanel.cpp b/NvBlast/tools/ArtistTools/source/BlastPlugin/Window/BlastCompositePanel.cpp new file mode 100644 index 0000000..b42a4f5 --- /dev/null +++ b/NvBlast/tools/ArtistTools/source/BlastPlugin/Window/BlastCompositePanel.cpp @@ -0,0 +1,306 @@ +#include "BlastCompositePanel.h" +#include "ui_BlastCompositePanel.h" +#include "ProjectParams.h" +#include <QtCore/QFileInfo> +#include <QtWidgets/QInputDialog> +#include <QtWidgets/QLineEdit> +#include <QtWidgets/QMessageBox> + +BlastCompositePanel::BlastCompositePanel(QWidget *parent) : + QWidget(parent), + ui(new Ui::BlastCompositePanel), + _selectedAsset(-1) +{ + ui->setupUi(this); + + ui->btnRemoveAsset->setEnabled(false); + ui->btnModifyLandmark->setEnabled(false); + ui->btnRemoveLandmark->setEnabled(false); +} + +BlastCompositePanel::~BlastCompositePanel() +{ + delete ui; +} + +void BlastCompositePanel::updateValues() +{ + BPParams& projectParams = BlastProject::ins().getParams(); + BPPComposite& composite = projectParams.blast.composite; + + ui->lineEditComposite->setText(composite.composite.buf); + + _updateAssetComboBox(); + + _updateAssetInstanceListWidget(); + + ui->spinBoxBondByThreshold->setValue(composite.bondThreshold); + ui->spinBoxNewBondStrength->setValue(composite.bondStrength); + + _updateLandmarkListWidget(); + + ui->checkBoxEnableLandmark->setChecked(false); + ui->spinBoxLandmarkRadius->setValue(false); +} + +void BlastCompositePanel::on_btnCollapse_clicked() +{ + +} + +void BlastCompositePanel::on_btnSave_clicked() +{ + BPParams& projectParams = BlastProject::ins().getParams(); + BPPComposite& composite = projectParams.blast.composite; + + QByteArray tmp = ui->lineEditComposite->text().toUtf8(); + copy(composite.composite, tmp.data()); +} + +void BlastCompositePanel::on_comboBoxAsset_currentIndexChanged(int index) +{ + _selectedAsset = index; +} + +void BlastCompositePanel::on_btnAddAsset_clicked() +{ + bool ok = false; + QString name = QInputDialog::getText(this, + tr("Blast Tool"), + tr("Please input name for new blast instance:"), + QLineEdit::Normal, + "", + &ok); + bool nameExist = BlastProject::ins().isAssetInstanceNameExist(name.toUtf8().data()); + if (ok && !name.isEmpty() && !nameExist) + { + BlastProject::ins().addAssetInstance(_selectedAsset, name.toUtf8().data()); + _updateAssetInstanceListWidget(); + ui->listWidgetBlastAsset->setCurrentRow(ui->listWidgetBlastAsset->count() - 1); + } + else if (ok && nameExist) + { + QMessageBox::warning(this, "Blast Tool", "The name you input is already exist!"); + } + else if (ok && name.isEmpty()) + { + QMessageBox::warning(this, "Blast Tool", "You need input a name for the new preset!"); + } +} + +void BlastCompositePanel::on_btnRemoveAsset_clicked() +{ + QList<QListWidgetItem*> items = ui->listWidgetBlastAsset->selectedItems(); + BlastProject::ins().removeAssetInstance(items.at(0)->text().toUtf8().data()); +} + +void BlastCompositePanel::on_listWidgetBlastAsset_itemSelectionChanged() +{ + QList<QListWidgetItem*> items = ui->listWidgetBlastAsset->selectedItems(); + if (items.count() > 0) + ui->btnRemoveAsset->setEnabled(true); + else + ui->btnRemoveAsset->setEnabled(false); +} + +void BlastCompositePanel::on_spinBoxBondByThreshold_valueChanged(double arg1) +{ + BPParams& projectParams = BlastProject::ins().getParams(); + BPPComposite& composite = projectParams.blast.composite; + composite.bondThreshold = arg1; +} + +void BlastCompositePanel::on_spinBoxNewBondStrength_valueChanged(double arg1) +{ + BPParams& projectParams = BlastProject::ins().getParams(); + BPPComposite& composite = projectParams.blast.composite; + composite.bondStrength = arg1; +} + +void BlastCompositePanel::on_btnAddLandmark_clicked() +{ + bool ok = false; + QString name = QInputDialog::getText(this, + tr("Blast Tool"), + tr("Please input name for new landmark:"), + QLineEdit::Normal, + "", + &ok); + bool nameExist = BlastProject::ins().isLandmarkNameExist(name.toUtf8().data()); + if (ok && !name.isEmpty() && !nameExist) + { + BlastProject::ins().addLandmark(name.toUtf8().data()); + _updateLandmarkListWidget(); + ui->listWidgetLandmark->setCurrentRow(ui->listWidgetLandmark->count() - 1); + } + else if (ok && nameExist) + { + QMessageBox::warning(this, "Blast Tool", "The name you input is already exist!"); + } + else if (ok && name.isEmpty()) + { + QMessageBox::warning(this, "Blast Tool", "You need input a name for the new landmark!"); + } +} + +void BlastCompositePanel::on_btnModifyLandmark_clicked() +{ + QList<QListWidgetItem*> items = ui->listWidgetLandmark->selectedItems(); + QByteArray tem = items.at(0)->text().toUtf8(); + const char* oldName = tem.data(); + + bool ok = false; + QString newName = QInputDialog::getText(this, + tr("Blast Tool"), + tr("Please input new name for the selected landmark:"), + QLineEdit::Normal, + oldName, + &ok); + bool nameExist = BlastProject::ins().isLandmarkNameExist(newName.toUtf8().data()); + if (ok && !newName.isEmpty() && !nameExist) + { + int selectIndex = ui->listWidgetLandmark->currentRow(); + BlastProject::ins().renameLandmark(oldName, newName.toUtf8().data()); + _updateLandmarkListWidget(); + ui->listWidgetLandmark->setCurrentRow(selectIndex); + } + else if (ok && nameExist) + { + QMessageBox::warning(this, "Blast Tool", "The name you input is already exist!"); + } + else if (ok && newName.isEmpty()) + { + QMessageBox::warning(this, "Blast Tool", "You need input a name for the new landmark!"); + } +} + +void BlastCompositePanel::on_btnRemoveLandmark_clicked() +{ + QList<QListWidgetItem*> items = ui->listWidgetLandmark->selectedItems(); + QByteArray tem = items.at(0)->text().toUtf8(); + const char* name = tem.data(); + BlastProject::ins().removeLandmark(name); + _updateLandmarkListWidget(); +} + +void BlastCompositePanel::on_listWidgetLandmark_itemSelectionChanged() +{ + _updateLandmarkUIs(); +} + +void BlastCompositePanel::on_checkBoxEnableLandmark_stateChanged(int arg1) +{ + QList<QListWidgetItem*> items = ui->listWidgetLandmark->selectedItems(); + + int count = items.count(); + for (int i = 0; i < count; ++i) + { + BPPLandmark* landmark = BlastProject::ins().getLandmark(items.at(0)->text().toUtf8().data()); + if (landmark != nullptr) + { + landmark->enable = ui->checkBoxEnableLandmark->isChecked(); + } + } +} + +void BlastCompositePanel::on_spinBoxLandmarkRadius_valueChanged(double arg1) +{ + QList<QListWidgetItem*> items = ui->listWidgetLandmark->selectedItems(); + + int count = items.count(); + for (int i = 0; i < count; ++i) + { + BPPLandmark* landmark = BlastProject::ins().getLandmark(items.at(0)->text().toUtf8().data()); + if (landmark != nullptr) + { + landmark->radius = ui->spinBoxLandmarkRadius->value(); + } + } +} + +void BlastCompositePanel::_updateAssetComboBox() +{ + BPParams& projectParams = BlastProject::ins().getParams(); + BPPAssetArray& blastAssetArray = projectParams.blast.blastAssets; + BPPComposite& composite = projectParams.blast.composite; + + ui->comboBoxAsset->clear(); + int countAssets = blastAssetArray.arraySizes[0]; + if (countAssets > 0) + { + QStringList assets; + for (int i = 0; i < countAssets; ++i) + { + QFileInfo fileInfo(blastAssetArray.buf[i].path.buf); + assets.append(fileInfo.baseName()); + } + ui->comboBoxAsset->addItems(assets); + } + else + { + ui->btnAddAsset->setEnabled(false); + ui->btnRemoveAsset->setEnabled(false); + } +} + +void BlastCompositePanel::_updateAssetInstanceListWidget() +{ + BPParams& projectParams = BlastProject::ins().getParams(); + BPPComposite& composite = projectParams.blast.composite; + + ui->listWidgetBlastAsset->clear(); + int countAssetInstances = composite.blastAssetInstances.arraySizes[0]; + if (countAssetInstances > 0) + { + QStringList assetInstances; + + for (int i = 0; i < countAssetInstances; ++i) + { + assetInstances.append(composite.blastAssetInstances.buf[i].name.buf); + } + ui->listWidgetBlastAsset->addItems(assetInstances); + } +} + +void BlastCompositePanel::_updateLandmarkListWidget() +{ + BPParams& projectParams = BlastProject::ins().getParams(); + BPPComposite& composite = projectParams.blast.composite; + + ui->listWidgetLandmark->clear(); + int countJoints = composite.landmarks.arraySizes[0]; + if (countJoints > 0) + { + QStringList landmarks; + + for (int i = 0; i < countJoints; ++i) + { + landmarks.append(composite.landmarks.buf[i].name.buf); + } + ui->listWidgetLandmark->addItems(landmarks); + } +} + +void BlastCompositePanel::_updateLandmarkUIs() +{ + QList<QListWidgetItem*> items = ui->listWidgetLandmark->selectedItems(); + + if (items.count() > 0) + { + BPPLandmark* landmark = BlastProject::ins().getLandmark(items.at(0)->text().toUtf8().data()); + if (landmark != nullptr) + { + ui->btnModifyLandmark->setEnabled(true); + ui->btnRemoveLandmark->setEnabled(true); + ui->checkBoxEnableLandmark->setChecked(landmark->enable); + ui->spinBoxLandmarkRadius->setValue(landmark->radius); + } + } + else + { + ui->btnModifyLandmark->setEnabled(false); + ui->btnRemoveLandmark->setEnabled(false); + ui->checkBoxEnableLandmark->setChecked(false); + ui->spinBoxLandmarkRadius->setValue(0.0f); + } +} |