123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250 |
- /*
- * Copyright (c) Contributors to the Open 3D Engine Project.
- * For complete copyright and license terms please see the LICENSE at the root of this distribution.
- *
- * SPDX-License-Identifier: Apache-2.0 OR MIT
- *
- */
- #include "EditorDefs.h"
- #include "PropertyGenericCtrl.h"
- // Qt
- #include <QMessageBox>
- #include <QHBoxLayout>
- #include <QtWidgets/QLabel>
- #include <QLineEdit>
- #include <QStringListModel>
- #include <QToolButton>
- // CryCommon
- #include <CryCommon/ILocalizationManager.h>
- // Editor
- #include "SelectLightAnimationDialog.h"
- #include "SelectSequenceDialog.h"
- #include "QtViewPaneManager.h"
- AZ_PUSH_DISABLE_DLL_EXPORT_MEMBER_WARNING
- #include <QtWidgets/QListView>
- AZ_POP_DISABLE_DLL_EXPORT_MEMBER_WARNING
- GenericPopupPropertyEditor::GenericPopupPropertyEditor(QWidget *pParent, bool showTwoButtons)
- :QWidget(pParent)
- {
- m_valueLabel = new QLabel;
- QToolButton *mainButton = new QToolButton;
- mainButton->setAutoRaise(true);
- mainButton->setIcon(QIcon(QStringLiteral(":/stylesheet/img/UI20/browse-edit.svg")));
- connect(mainButton, &QToolButton::clicked, this, &GenericPopupPropertyEditor::onEditClicked);
- QHBoxLayout *mainLayout = new QHBoxLayout(this);
- mainLayout->addWidget(m_valueLabel, 1);
- mainLayout->addWidget(mainButton);
- mainLayout->setContentsMargins(0, 0, 0, 0);
- if (showTwoButtons)
- {
- QToolButton *button2 = new QToolButton;
- button2->setAutoRaise(true);
- button2->setIcon(QIcon(QStringLiteral(":/stylesheet/img/UI20/more.svg")));
- connect(button2, &QToolButton::clicked, this, &GenericPopupPropertyEditor::onButton2Clicked);
- mainLayout->insertWidget(1, button2);
- }
- }
- void GenericPopupPropertyEditor::SetValue(const QString &value, bool notify)
- {
- if (m_value != value)
- {
- m_value = value;
- m_valueLabel->setText(m_value);
- if (notify)
- emit ValueChanged(m_value);
- }
- }
- void GenericPopupPropertyEditor::SetPropertyType(PropertyType type)
- {
- m_propertyType = type;
- }
- void SequencePropertyEditor::onEditClicked()
- {
- CSelectSequenceDialog gtDlg(this);
- gtDlg.PreSelectItem(GetValue());
- if (gtDlg.exec() == QDialog::Accepted)
- SetValue(gtDlg.GetSelectedItem());
- }
- void SequenceIdPropertyEditor::onEditClicked()
- {
- CSelectSequenceDialog gtDlg;
- uint32 id = GetValue().toUInt();
- IAnimSequence *pSeq = GetIEditor()->GetMovieSystem()->FindSequenceById(id);
- if (pSeq)
- gtDlg.PreSelectItem(pSeq->GetName());
- if (gtDlg.exec() == QDialog::Accepted)
- {
- pSeq = GetIEditor()->GetMovieSystem()->FindLegacySequenceByName(gtDlg.GetSelectedItem().toUtf8().data());
- assert(pSeq);
- if (pSeq->GetId() > 0)
- {
- // This sequence is a new one with a valid ID.
- SetValue(QString::number(pSeq->GetId()));
- }
- else
- {
- // This sequence is an old one without an ID.
- QMessageBox::warning(this, tr("Old Sequence"), tr("This is an old sequence without an ID.\nSo it cannot be used with the new ID-based linking."));
- }
- }
- }
- void LocalStringPropertyEditor::onEditClicked()
- {
- std::vector<IVariable::IGetCustomItems::SItem> items;
- ILocalizationManager* pMgr = gEnv->pSystem->GetLocalizationManager();
- if (!pMgr)
- return;
- int nCount = pMgr->GetLocalizedStringCount();
- if (nCount <= 0)
- return;
- items.reserve(nCount);
- IVariable::IGetCustomItems::SItem item;
- SLocalizedInfoEditor sInfo;
- for (int i = 0; i < nCount; ++i)
- {
- if (pMgr->GetLocalizedInfoByIndex(i, sInfo))
- {
- item.desc = tr("English Text:\r\n");
- AZStd::wstring utf8TranslatedTextW;
- AZStd::to_wstring(utf8TranslatedTextW, sInfo.sUtf8TranslatedText);
- item.desc += QString::fromWCharArray(utf8TranslatedTextW.c_str());
- item.name = sInfo.sKey;
- items.push_back(item);
- }
- }
- CGenericSelectItemDialog gtDlg;
- const bool bUseTree = true;
- if (bUseTree)
- {
- gtDlg.SetMode(CGenericSelectItemDialog::eMODE_TREE);
- gtDlg.SetTreeSeparator("/");
- }
- gtDlg.SetItems(items);
- gtDlg.setWindowTitle(tr("Choose Localized String"));
- QString preselect = GetValue();
- if (!preselect.isEmpty() && preselect.at(0) == '@')
- preselect = preselect.mid(1);
- gtDlg.PreSelectItem(preselect);
- if (gtDlg.exec() == QDialog::Accepted)
- {
- preselect = "@";
- preselect += gtDlg.GetSelectedItem();
- SetValue(preselect);
- }
- }
- void LightAnimationPropertyEditor::onEditClicked()
- {
- // First, check if there is any light animation defined.
- bool bLightAnimationExists = false;
- IMovieSystem *pMovieSystem = GetIEditor()->GetMovieSystem();
- for (int i = 0; i < pMovieSystem->GetNumSequences(); ++i)
- {
- IAnimSequence *pSequence = pMovieSystem->GetSequence(i);
- if (pSequence->GetFlags() & IAnimSequence::eSeqFlags_LightAnimationSet)
- {
- bLightAnimationExists = pSequence->GetNodeCount() > 0;
- break;
- }
- }
- if (bLightAnimationExists) // If exists, show the selection dialog.
- {
- CSelectLightAnimationDialog dlg;
- dlg.PreSelectItem(GetValue());
- if (dlg.exec() == QDialog::Accepted)
- SetValue(dlg.GetSelectedItem());
- }
- else // If not, remind the user of creating one in TrackView.
- {
- QMessageBox::warning(this, tr("No Available Animation"), tr("There is no available light animation.\nPlease create one in TrackView, first."));
- }
- }
- ListEditWidget::ListEditWidget(QWidget *pParent /*= nullptr*/)
- :QWidget(pParent)
- {
- m_valueEdit = new QLineEdit;
- m_model = new QStringListModel(this);
- m_listView = new QListView;
- m_listView->setModel(m_model);
- m_listView->setMaximumHeight(50);
- m_listView->setVisible(false);
- QToolButton *expandButton = new QToolButton();
- expandButton->setCheckable(true);
- expandButton->setText("+");
-
- QToolButton *editButton = new QToolButton();
- editButton->setText("..");
- connect(editButton, &QAbstractButton::clicked, this, &ListEditWidget::OnEditClicked);
- connect(expandButton, &QAbstractButton::toggled, m_listView, &QWidget::setVisible);
- connect(m_model, &QAbstractItemModel::dataChanged, this, &ListEditWidget::OnModelDataChange);
- connect(m_valueEdit, &QLineEdit::editingFinished, this, [this](){SetValue(m_valueEdit->text(), true); } );
- QVBoxLayout *mainLayout = new QVBoxLayout(this);
- QHBoxLayout *topLayout = new QHBoxLayout;
- topLayout->addWidget(expandButton);
- topLayout->addWidget(m_valueEdit,1);
- topLayout->addWidget(editButton);
- mainLayout->addLayout(topLayout);
- mainLayout->addWidget(m_listView,1);
- mainLayout->setContentsMargins(1,1,1,1);
- }
- void ListEditWidget::SetValue(const QString &value, bool notify /*= true*/)
- {
- if (m_value != value)
- {
- m_value = value;
- m_valueEdit->setText(value);
- QStringList list = m_value.split(",", Qt::SkipEmptyParts);
- m_model->setStringList(list);
- if (notify)
- emit ValueChanged(m_value);
- }
- }
- void ListEditWidget::OnModelDataChange()
- {
- m_value = m_model->stringList().join(",");
- m_valueEdit->setText(m_value);
- emit ValueChanged(m_value);
- }
- QWidget* ListEditWidget::GetFirstInTabOrder()
- {
- return m_valueEdit;
- }
- QWidget* ListEditWidget::GetLastInTabOrder()
- {
- return m_listView;
- }
- #include <Controls/ReflectedPropertyControl/moc_PropertyGenericCtrl.cpp>
|