#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 "cdm_citationinfo.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->getPlugin());
if (pluginName.left(5) == "plug_")
{
pluginName.remove(0, 5);
}
ui->pluginName->setText(pluginName);
ui->stepName->setText(step->getPlugin()->getKeyForStep(*step));
if (step->getPlugin()->getPluginURL() == step->getStepURL())
{
ui->lb_wiki_link->setText(QString(tr("Aide en ligne : Page internet du plugin")).arg(step->getPlugin()->getPluginURL()));
} else {
ui->lb_wiki_link->setText(QString(tr("Aide en ligne : Page internet de cette étape")).arg(step->getStepURL()));
}
ui->briefDescription->setText(step->getStepDescription());
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(CDM_CitationInfo::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->getStepDetailledDescription());
// In models
QTreeWidgetItem *inRootItem = new QTreeWidgetItem(ui->inModels);
inRootItem->setData(0, Qt::DisplayRole, tr("Données en entrée :"));
inRootItem->setExpanded(true);
QList list = step->getInResultsModel();
QListIterator it(list);
while(it.hasNext())
recursiveCreateItemsForResultModel(inRootItem, it.next());
//ui->inModels->expandAll();
// Out models
QTreeWidgetItem *outRootItem = new QTreeWidgetItem(ui->outModels);
outRootItem->setData(0, Qt::DisplayRole, tr("Données en sortie :"));
outRootItem->setExpanded(true);
QList listOut = step->getOutResultsModel();
QListIterator itO(listOut);
while(itO.hasNext())
recursiveCreateItemsForResultModel(outRootItem, itO.next());
//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 != NULL)
{
recursiveCreateItemsForResultModel(parent, rModel);
}
else
{
const CT_OutAbstractItemModel *iModel = dynamic_cast(model);
if(iModel != NULL)
{
recursiveCreateItemsForItemModel(parent, iModel);
}
else
{
const CT_OutAbstractItemAttributeModel *iaModel = dynamic_cast(model);
if(iaModel != NULL)
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 != NULL)
{
recursiveCreateItemsForResultModel(parent, rModel);
}
else
{
const CT_InAbstractItemModel *iModel = dynamic_cast(model);
if(iModel != NULL)
{
recursiveCreateItemsForItemModel(parent, iModel);
}
else
{
const CT_InAbstractItemAttributeModel *iaModel = dynamic_cast(model);
if(iaModel != NULL)
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") + " / " + rModel->uniqueName());
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());
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->itemDrawable()->name() + ")" + " / " + (iModel->lastOriginalModelWithAStep() != NULL ? iModel->lastOriginalModelWithAStep()->step()->getStepCustomName() : "???") + " / " + iModel->uniqueName() + " / " + iModel->modelTypeDisplayable());
item->setText(0, iModel->displayableName() + " [" + iModel->itemDrawable()->name() + "]");
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::getNameFromType(iModel->itemType()) + "]");
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->itemAttribute()->displayableName() + " (" + iaModel->itemAttribute()->typeToString() + ")" + " / " + (iaModel->lastOriginalModelWithAStep() != NULL ? iaModel->lastOriginalModelWithAStep()->step()->getStepCustomName() : "???") + " / " + iaModel->uniqueName() + " / " + iaModel->modelTypeDisplayable());
item->setText(0, iaModel->itemAttribute()->displayableName() + " [" + iaModel->itemAttribute()->typeToString() + "]");
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(iaModel->valueType()) + "]");
item->setExpanded(false);
parent->setExpanded(true);
createForChildrens(item, iaModel);
}
void GAboutStepDialog::createForChildrens(QTreeWidgetItem *parent, const CT_OutAbstractModel *model) const
{
QList list = model->childrens();
QListIterator it(list);
while(it.hasNext())
recursiveCreateItemsForModel(parent, (CT_OutAbstractModel*)it.next());
}
void GAboutStepDialog::createForChildrens(QTreeWidgetItem *parent, const CT_InAbstractModel *model) const
{
QList list = model->childrens();
QListIterator it(list);
while(it.hasNext())
recursiveCreateItemsForModel(parent, (CT_InAbstractModel*)it.next());
}
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);
}
}