+static void
+variantListToItems(const QVector<QVariant> &lst,
+ const QVector<QVariant> &defaultLst,
+ QList<QTreeWidgetItem *> &items)
+{
+ for (int i = 0; i < lst.count(); ++i) {
+ QString key = QString::number(i);
+ QVariant var = lst[i];
+ QVariant defaultVar;
+
+ if (i < defaultLst.count()) {
+ defaultVar = defaultLst[i];
+ }
+
+ QTreeWidgetItem *item = variantToItem(key, var, defaultVar);
+ if (item) {
+ items.append(item);
+ }
+ }
+}
+
+static bool
+isVariantDeep(const QVariant &var)
+{
+ if (var.type() == QVariant::List) {
+ QVector<QVariant> lst = var.toList().toVector();
+ for (int i = 0; i < lst.count(); ++i) {
+ if (isVariantDeep(lst[i])) {
+ return true;
+ }
+ }
+ return false;
+ } else if (var.type() == QVariant::Map) {
+ return true;
+ } else if (var.type() == QVariant::Hash) {
+ return true;
+ } else {
+ return false;
+ }
+}
+
+static QTreeWidgetItem *
+variantToItem(const QString &key, const QVariant &var,
+ const QVariant &defaultVar)
+{
+ if (var == defaultVar) {
+ return NULL;
+ }
+
+ QString val;
+
+ bool deep = isVariantDeep(var);
+ if (!deep) {
+ variantToString(var, val);
+ }
+
+ //qDebug()<<"key = "<<key;
+ //qDebug()<<"val = "<<val;
+ QStringList lst;
+ lst += key;
+ lst += val;
+
+ QTreeWidgetItem *item = new QTreeWidgetItem((QTreeWidgetItem *)0, lst);
+
+ if (deep) {
+ QList<QTreeWidgetItem *> children;
+ if (var.type() == QVariant::Map) {
+ QVariantMap map = var.toMap();
+ QVariantMap defaultMap = defaultVar.toMap();
+ variantMapToItems(map, defaultMap, children);
+ }
+ if (var.type() == QVariant::List) {
+ QVector<QVariant> lst = var.toList().toVector();
+ QVector<QVariant> defaultLst = defaultVar.toList().toVector();
+ variantListToItems(lst, defaultLst, children);
+ }
+ item->addChildren(children);
+ }
+
+ return item;
+}
+
+static void addSurfaceItem(const ApiSurface &surface,
+ const QString &label,
+ QTreeWidgetItem *parent,
+ QTreeWidget *tree)
+{
+ QIcon icon(QPixmap::fromImage(surface.thumb()));
+ QTreeWidgetItem *item = new QTreeWidgetItem(parent);
+ item->setIcon(0, icon);
+
+ int width = surface.size().width();
+ int height = surface.size().height();
+ QString descr =
+ QString::fromLatin1("%1, %2, %3 x %4")
+ .arg(label)
+ .arg(surface.formatName())
+ .arg(width)
+ .arg(height);
+
+ //item->setText(1, descr);
+ QLabel *l = new QLabel(descr, tree);
+ l->setWordWrap(true);
+ tree->setItemWidget(item, 1, l);
+
+ item->setData(0, Qt::UserRole, surface.image());
+}
+
+void MainWindow::fillStateForFrame()
+{
+ if (!m_selectedEvent || !m_selectedEvent->hasState()) {