#include "storyunitspresent.h" #include #include using namespace Components; using namespace Parse::Result; StoryUnitsPresent::StoryUnitsPresent(Parse::Result::ParseCore *core, QWidget *parent) : QWidget(parent), core_ins(core), model_ins(new QStandardItemModel(this)), units_view(new QTreeView(this)), details_show(new QPlainTextEdit(this)) { units_view->setHeaderHidden(true); auto layout = new QVBoxLayout(this); layout->setMargin(0); auto splitter = new QSplitter(Qt::Vertical, this); layout->addWidget(splitter); splitter->addWidget(units_view); splitter->addWidget(details_show); units_view->setModel(model_ins); details_show->setReadOnly(true); connect(units_view, &QTreeView::clicked, this, &StoryUnitsPresent::show_node_description); } void StoryUnitsPresent::refresh() { model_ins->clear(); auto units = core_ins->allStoryUnits(); for(auto &unit : units){ auto unit_node = new QStandardItem(static_cast(unit)->name()); unit_node->setEditable(false); model_ins->appendRow(unit_node); auto children = unit->children(); for(auto &frag : children){ if(frag->typeValue() == NODE_STORYFRAGMENT){ auto frag_node = new QStandardItem(static_cast(frag)->name()); frag_node->setEditable(false); unit_node->appendRow(frag_node); } } } } void StoryUnitsPresent::show_node_description(const QModelIndex &curr) { if(!curr.isValid()) return; details_show->clear(); auto item = model_ins->itemFromIndex(curr); if(item->parent() == nullptr){ auto node = core_ins->queryStoryUnit(item->text()); auto children = node.first()->children(); for(auto &it : children){ if(it->typeValue() != NODE_STORYFRAGMENT){ details_show->appendPlainText(it->toString()); } } } else{ auto node = core_ins->queryStoryUnit(item->parent()->text()); auto point = core_ins->queryStoryFragment(node.first(), item->text()); auto children = point.first()->children(); for(auto &it : children){ details_show->appendPlainText(it->toString()); } } }