You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
storyWriter/ccharacterselectdialog.cpp

101 lines
2.7 KiB
C++

#include "ccharacterselectdialog.h"
#include "ui_ccharacterselectdialog.h"
cCharacterSelectDialog::cCharacterSelectDialog(QWidget *parent) :
QDialog(parent),
ui(new Ui::cCharacterSelectDialog)
{
ui->setupUi(this);
m_lpCharacterListModel = new QStandardItemModel(0, 1);
ui->m_lpCharacterList->setModel(m_lpCharacterListModel);
connect(ui->m_lpCharacterList, &QTreeView::doubleClicked, this, &cCharacterSelectDialog::onCharacterDoubleClicked);
}
cCharacterSelectDialog::~cCharacterSelectDialog()
{
delete ui;
}
void cCharacterSelectDialog::setCharacterList(cCharacterList* lpCharacterList, QList<cCharacterDescription *> characterDescriptionList)
{
QStandardItemModel* lpModel = m_lpCharacterListModel;
QStandardItem* lpRootItem = lpModel->invisibleRootItem();
QFont fontMainCharacter = lpRootItem->font();
QFont fontNonMainCharacter = lpRootItem->font();
lpModel->clear();
QStringList headerLabels = QStringList() << tr("name") << tr("creature") << tr("gender");
m_lpCharacterListModel->setHorizontalHeaderLabels(headerLabels);
fontMainCharacter.setBold(true);
fontNonMainCharacter.setItalic(true);
for(int x = 0;x < lpCharacterList->count();x++)
{
bool bFound = false;
cCharacter* lpCharacter = lpCharacterList->at(x);
for(int y = 0;y < characterDescriptionList.count();y++)
{
if(lpCharacter == characterDescriptionList.at(y)->character())
{
bFound = true;
break;
}
}
if(bFound)
continue;
QList<QStandardItem*> lpItems;
lpItems.append(new QStandardItem(lpCharacter->name()));
lpItems.append(new QStandardItem(lpCharacter->creature()));
lpItems.append(new QStandardItem(lpCharacter->genderText()));
for(int i = 0;i < headerLabels.count();i++)
{
lpItems[i]->setData(QVariant::fromValue(lpCharacter));
if(lpCharacter->mainCharacter())
lpItems[i]->setFont(fontMainCharacter);
else
lpItems[i]->setFont(fontNonMainCharacter);
if(lpCharacter->description())
lpItems[i]->setToolTip(lpCharacter->description()->toPlainText());
}
m_lpCharacterListModel->appendRow(lpItems);
}
ui->m_lpCharacterList->header()->setStretchLastSection(true);
ui->m_lpCharacterList->expandAll();
for(int i = 0;i < headerLabels.count();i++)
ui->m_lpCharacterList->resizeColumnToContents(i);
ui->m_lpCharacterList->setCurrentIndex(m_lpCharacterListModel->index(0, 0));
}
void cCharacterSelectDialog::onCharacterDoubleClicked(const QModelIndex& /*index*/)
{
this->accept();
}
cCharacter* cCharacterSelectDialog::selected()
{
if(!ui->m_lpCharacterList->currentIndex().isValid())
return(0);
QStandardItem* lpItem = m_lpCharacterListModel->itemFromIndex(ui->m_lpCharacterList->currentIndex());
if(!lpItem)
return(0);
return(qvariant_cast<cCharacter*>(lpItem->data()));
}