88#include < QSlider>
99#include < QTreeWidgetItem>
1010
11-
12-
1311Live2DView::Live2DView (const QString &filePath, QWidget *parent) : QWidget(parent), hasCdi(false ), syncTimer(this ), selectedPartIndex(-1 )
1412{
1513 ui.setupUi (this );
@@ -77,11 +75,22 @@ void Live2DView::initMotions(Model *model)
7775 item->setText (0 , " Motions" );
7876 ui.treeWidget ->addTopLevelItem (item);
7977
80- model->GetMotions (item,
81- [](void *collector, const char *group, int no, const char *file, const char *)
78+ QMap<QString, QTreeWidgetItem *> groups;
79+ void *collector[2 ] = {item, &groups};
80+ model->GetMotions (collector,
81+ [](void *collector, const char *group, int no, const char *file, const char *)
8282 {
83- QTreeWidgetItem *topLevel = (QTreeWidgetItem *)collector;
84- QTreeWidgetItem *item = new QTreeWidgetItem (topLevel);
83+ QTreeWidgetItem *topLevel = (QTreeWidgetItem *)(((void **)collector)[0 ]);
84+ QMap<QString, QTreeWidgetItem *> *groups = (QMap<QString, QTreeWidgetItem *> *)(((void **)collector)[1 ]);
85+ QTreeWidgetItem *groupItem;
86+ if (!groups->contains (group))
87+ {
88+ groupItem = new QTreeWidgetItem (topLevel);
89+ groupItem->setText (0 , group);
90+ groups->insert (group, groupItem);
91+ }
92+ groupItem = groups->value (group);
93+ QTreeWidgetItem *item = new QTreeWidgetItem (groupItem);
8594 QFileInfo info (file);
8695 item->setText (0 , info.fileName ());
8796 item->setData (0 , Qt::UserRole, QVariant (group));
@@ -102,7 +111,7 @@ void Live2DView::onTreeItemDoubleClicked(QTreeWidgetItem *item, int column)
102111 {
103112 model->SetExpression (item->data (0 , Qt::UserRole).toString ().toStdString ().c_str ());
104113 }
105- else if (item->parent ()->text (0 ) == " Motions" )
114+ else if (item->parent ()->parent () != nullptr && item-> parent ()-> parent ()-> text (0 ) == " Motions" )
106115 {
107116 model->StartMotion (item->data (0 , Qt::UserRole).toString ().toStdString ().c_str (), item->data (0 , Qt::UserRole + 1 ).toInt ());
108117 }
0 commit comments