#include "gaboutstepdialog.h"
#include "ui_gaboutstepdialog.h"
#include "dm_guimanager.h"
#include "ct_abstractstepplugin.h"
#include "ct_result/abstract/ct_abstractresult.h"
#include "ct_itemdrawable/abstract/ct_abstractitemdrawable.h"
#include "ct_itemattributes/abstract/ct_abstractitemattribute.h"
#include "ct_risformat/ct_parseris.h"
#include "ct_categories/abstract/ct_abstractcategory.h"
#include "ct_global/ct_context.h"
#include "ct_categories/tools/ct_categorymanager.h"
GAboutStepDialog::GAboutStepDialog(CT_VirtualAbstractStep *step, QWidget *parent) :
QDialog(parent),
ui(new Ui::GAboutStepDialog)
{
ui->setupUi(this);
initView(step);
}
GAboutStepDialog::~GAboutStepDialog()
{
delete ui;
}
void GAboutStepDialog::initView(CT_VirtualAbstractStep *step)
{
ui->scrollArea->setWidgetResizable(true);
QString pluginName = GUI_MANAGER->getPluginManager()->getPluginName(step->pluginStaticCastT<>());
if (pluginName.left(5) == "plug_")
{
pluginName.remove(0, 5);
}
ui->pluginName->setText(pluginName);
ui->stepName->setText(step->pluginStaticCastT<>()->getKeyForStep(*step));
if (step->pluginStaticCastT<>()->getPluginURL() == step->URL())
{
ui->lb_wiki_link->setText(QString(tr("Aide en ligne : Page internet du plugin")).arg(step->pluginStaticCastT<>()->getPluginURL()));
} else {
ui->lb_wiki_link->setText(QString(tr("Aide en ligne : Page internet de cette étape")).arg(step->URL()));
}
ui->briefDescription->setText(step->description());
QStringList citations = step->getStepRISCitations();
if (citations.size() > 0)
{
ui->citation->setVisible(true);
ui->cb_ris->setVisible(true);
ui->ris->setVisible(false);
QString citation = tr("References :
");
QString risData;
for (int i = 0 ; i < citations.size() ; i++)
{
citation.append(CT_ParseRIS::parseRIS(citations.at(i)));
if (i < citations.size() - 1) {citation.append("
");}
risData.append(citations.at(i));
}
ui->citation->setText(citation);
ui->ris->setText(risData);
} else {
ui->citation->setVisible(false);
ui->cb_ris->setVisible(false);
ui->ris->setVisible(false);
}
ui->detailledDescription->setText(tr("Description détaillée :
") + step->detailledDescription());
// In models
QTreeWidgetItem *inRootItem = new QTreeWidgetItem(ui->inModels);
inRootItem->setData(0, Qt::DisplayRole, tr("Données en entrée :"));
inRootItem->setExpanded(true);
step->visitInResultModels([this, &inRootItem](const CT_InAbstractResultModel* child) -> bool {
this->recursiveCreateItemsForResultModel(inRootItem, child);
return true;
});
//ui->inModels->expandAll();
// Out models
QTreeWidgetItem *outRootItem = new QTreeWidgetItem(ui->outModels);
outRootItem->setData(0, Qt::DisplayRole, tr("Données en sortie :"));
outRootItem->setExpanded(true);
step->visitOutResultModels([this, &outRootItem](const CT_OutAbstractResultModel* child) -> bool {
this->recursiveCreateItemsForResultModel(outRootItem, child);
return true;
});
//ui->outModels->expandAll();
// Resize widgets to contents...
int inModelsItemCount = 0;
QTreeWidgetItemIterator iti(ui->inModels);
while (*iti) {
++inModelsItemCount;
++iti;
}
int outModelsItemCount = 0;
QTreeWidgetItemIterator ito(ui->outModels);
while (*ito) {
++outModelsItemCount;
++ito;
}
int inSize = (inModelsItemCount + 1)*ui->inModels->visualItemRect(inRootItem).height();
int outSize = (outModelsItemCount + 1)*ui->outModels->visualItemRect(outRootItem).height();
ui->inModels->setMinimumHeight(inSize);
ui->outModels->setMinimumHeight(outSize);
ui->inModels->setMaximumHeight(inSize);
ui->outModels->setMaximumHeight(outSize);
}
void GAboutStepDialog::recursiveCreateItemsForModel(QTreeWidgetItem *parent, const CT_OutAbstractModel *model) const
{
const CT_OutAbstractResultModel *rModel = dynamic_cast(model);
if(rModel != nullptr)
{
recursiveCreateItemsForResultModel(parent, rModel);
}
else
{
const CT_OutAbstractItemModel *iModel = dynamic_cast(model);
if(iModel != nullptr)
{
recursiveCreateItemsForItemModel(parent, iModel);
}
else
{
const CT_OutAbstractItemAttributeModel *iaModel = dynamic_cast(model);
if(iaModel != nullptr)
recursiveCreateItemsForItemAttributesModel(parent, iaModel);
else
qFatal("In GAboutStepDialog::recursiveCreateItemsForModel : model is not known");
}
}
}
void GAboutStepDialog::recursiveCreateItemsForModel(QTreeWidgetItem *parent, const CT_InAbstractModel *model) const
{
const CT_InAbstractResultModel *rModel = dynamic_cast(model);
if(rModel != nullptr)
{
recursiveCreateItemsForResultModel(parent, rModel);
}
else
{
const CT_InAbstractItemModel *iModel = dynamic_cast(model);
if(iModel != nullptr)
{
recursiveCreateItemsForItemModel(parent, iModel);
}
else
{
const CT_InAbstractItemAttributeModel *iaModel = dynamic_cast(model);
if(iaModel != nullptr)
recursiveCreateItemsForItemAttributesModel(parent, iaModel);
else
qFatal("In GAboutStepDialog::recursiveCreateItemsForModel : model is not known");
}
}
}
void GAboutStepDialog::recursiveCreateItemsForResultModel(QTreeWidgetItem *parent, const CT_OutAbstractResultModel *rModel) const
{
QTreeWidgetItem *item = new QTreeWidgetItem(parent);
//item->setText(0, QString("Result") + " / " + rModel->uniqueName() + " / " + rModel->modelTypeDisplayable() + " : " + rModel->resultName());
item->setText(0, QString("Result / %1").arg(rModel->uniqueIndex()));
item->setExpanded(true);
createForChildrens(item, rModel);
}
void GAboutStepDialog::recursiveCreateItemsForResultModel(QTreeWidgetItem *parent, const CT_InAbstractResultModel *rModel) const
{
QTreeWidgetItem *item = new QTreeWidgetItem(parent);
item->setText(0, "Result : " + rModel->displayableName());
setFontForInModel(item, rModel);
item->setExpanded(true);
createForChildrens(item, rModel);
}
void GAboutStepDialog::recursiveCreateItemsForItemModel(QTreeWidgetItem *parent, const CT_OutAbstractItemModel *iModel) const
{
QTreeWidgetItem *item = new QTreeWidgetItem(parent);
//item->setText(0, iModel->displayableName() + " [" + iModel->itemDrawableStaticCastT<>()->name() + "]");
QString stepName = (iModel->recursiveOriginalModelWithAStep() != nullptr ? iModel->recursiveOriginalModelWithAStep()->stepStaticCastT<>()->displayableCustomName() : "???");
if(stepName.isEmpty())
stepName = "???";
item->setText(0, iModel->displayableName() + " (" + iModel->itemDrawableStaticCastT<>()->name() + ")" + " / " + stepName + QString(" / %1").arg(iModel->uniqueIndex()));
item->setExpanded(true);
createForChildrens(item, iModel);
}
void GAboutStepDialog::recursiveCreateItemsForItemModel(QTreeWidgetItem *parent, const CT_InAbstractItemModel *iModel) const
{
QTreeWidgetItem *item = new QTreeWidgetItem(parent);
item->setText(0, iModel->displayableName() + " [" + CT_AbstractItemDrawable::nameFromType(iModel->itemType()) + "]");
setFontForInModel(item, iModel);
item->setExpanded(true);
createForChildrens(item, iModel);
}
void GAboutStepDialog::recursiveCreateItemsForItemAttributesModel(QTreeWidgetItem *parent, const CT_OutAbstractItemAttributeModel *iaModel) const
{
QTreeWidgetItem *item = new QTreeWidgetItem(parent);
item->setText(0, iaModel->itemAttributeStaticCastT<>()->displayableName() + " [" + iaModel->itemAttributeStaticCastT<>()->valueTypeToString() + "] / " + QString().setNum(iaModel->uniqueIndex()));
//item->setText(0, iaModel->itemAttribute()->displayableName() + " (" + iaModel->itemAttribute()->typeToString() + ")" + " / " + (iaModel->lastOriginalModelWithAStep() != nullptr ? iaModel->lastOriginalModelWithAStep()->step()->getStepCustomName() : "???") + " / " + iaModel->uniqueName() + " / " + iaModel->modelTypeDisplayable());
item->setExpanded(false);
parent->setExpanded(false);
createForChildrens(item, iaModel);
}
void GAboutStepDialog::recursiveCreateItemsForItemAttributesModel(QTreeWidgetItem *parent, const CT_InAbstractItemAttributeModel *iaModel) const
{
QTreeWidgetItem *item = new QTreeWidgetItem(parent);
item->setText(0, iaModel->displayableName() + " [" + CT_AbstractCategory::valueTypeToString(CT_AbstractCategory::ValueType(iaModel->valueType())) + "]");
setFontForInModel(item, iaModel);
item->setExpanded(false);
parent->setExpanded(true);
createForChildrens(item, iaModel);
}
void GAboutStepDialog::createForChildrens(QTreeWidgetItem *parent, const CT_OutAbstractModel *model) const
{
model->visitOutChildrens([this, &parent](const CT_OutAbstractModel* child) -> bool {
this->recursiveCreateItemsForModel(parent, child);
return true;
});
}
void GAboutStepDialog::createForChildrens(QTreeWidgetItem *parent, const CT_InAbstractModel *model) const
{
model->visitInChildrens([this, &parent](const CT_InAbstractModel* child) -> bool {
this->recursiveCreateItemsForModel(parent, child);
return true;
});
}
void GAboutStepDialog::setFontForInModel(QTreeWidgetItem* item, const CT_InAbstractModel* model) const
{
// model->parentModel() == nullptr if it is a result model
const bool obligatory = model->parentModel() == nullptr ? model->isObligatory() : model->recursiveAtLeastOneChildrenOrThisIsObligatory();
QFont f = item->font(0);
f.setItalic(!obligatory);
f.setBold(obligatory);
item->setFont(0, f);
}
void GAboutStepDialog::on_cb_ris_toggled(bool checked)
{
Q_UNUSED(checked);
if (ui->cb_ris->isChecked())
{
ui->ris->setVisible(true);
} else {
ui->ris->setVisible(false);
}
}