Skip to content

Commit 6300c8f

Browse files
committed
Optimize tree rendering
1 parent a434e07 commit 6300c8f

File tree

3 files changed

+37
-16
lines changed

3 files changed

+37
-16
lines changed

src/modules/connections-tree/items/databaseitem.cpp

Lines changed: 23 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -177,7 +177,7 @@ void DatabaseItem::resetFilter()
177177

178178
void DatabaseItem::renderRawKeys(const Operations::RawKeysList &rawKeys)
179179
{
180-
qDebug() << "Keys: " << rawKeys.size();
180+
qDebug() << "Render keys: " << rawKeys.size();
181181

182182
if (rawKeys.size() == 0) {
183183
m_locked = false;
@@ -209,10 +209,14 @@ QSharedPointer<DatabaseKeys> DatabaseItem::KeysTreeRenderer::renderKeys(QSharedP
209209
QSharedPointer<DatabaseItem> parent)
210210
{
211211
//init
212+
QElapsedTimer timer;
213+
timer.start();
212214
keys.sort();
215+
qDebug() << "Keys sorted in: " << timer.elapsed() << " ms";
213216
QSharedPointer<QList<QSharedPointer<TreeItem>>> result(new QList<QSharedPointer<TreeItem>>());
214217

215218
//render
219+
timer.restart();
216220
for (QVariant key : keys) {
217221

218222
QString rawKey = key.toString();
@@ -226,7 +230,7 @@ QSharedPointer<DatabaseKeys> DatabaseItem::KeysTreeRenderer::renderKeys(QSharedP
226230
rawKey, rawKey, operations,
227231
namespaceSeparator, result, parent);
228232
}
229-
233+
qDebug() << "Tree builded in: " << timer.elapsed() << " ms";
230234
return result;
231235
}
232236

@@ -241,35 +245,38 @@ void DatabaseItem::KeysTreeRenderer::renderNamaspacedKey(QSharedPointer<Namespac
241245
QWeakPointer<TreeItem> currentParent = (currItem.isNull())? db.staticCast<TreeItem>().toWeakRef() :
242246
currItem.staticCast<TreeItem>().toWeakRef();
243247

244-
if (!notProcessedKeyPart.contains(m_namespaceSeparator) || m_namespaceSeparator.isEmpty()) {
248+
int indexOfNaspaceSeparator = (m_namespaceSeparator.isEmpty())?
249+
-1 : notProcessedKeyPart.indexOf(m_namespaceSeparator);
245250

251+
if (indexOfNaspaceSeparator == -1) {
246252
QSharedPointer<KeyItem> newKey(
247253
(new KeyItem(fullKey, db->getIndex(), m_operations, currentParent))
248254
);
249255

250256
if (currItem.isNull()) m_result->push_back(newKey);
251257
else currItem->append(newKey);
252-
253258
return;
254259
}
255260

256-
int indexOfNaspaceSeparator = notProcessedKeyPart.indexOf(m_namespaceSeparator);
257-
258261
QString firstNamespaceName = notProcessedKeyPart.mid(0, indexOfNaspaceSeparator);
259262

260-
QSharedPointer<NamespaceItem> namespaceItem;
261-
int size = (currItem.isNull())? m_result->size() : currItem->childCount();
263+
QSharedPointer<NamespaceItem> namespaceItem;
262264

263-
for (int i=0; i < size; ++i)
264-
{
265-
QSharedPointer<TreeItem> child = (currItem.isNull())? (*m_result)[i] : currItem->child(i);
265+
if (currItem.isNull()) {
266+
int size = m_result->size();
267+
QSharedPointer<TreeItem> child;
266268

267-
if (child->getDisplayName() == firstNamespaceName
268-
&& typeid(NamespaceItem)==typeid(*child)) {
269-
270-
namespaceItem = qSharedPointerCast<NamespaceItem>(child);
271-
break;
269+
for (int i=0; i < size; ++i)
270+
{
271+
child = (*m_result)[i];
272+
if (typeid(NamespaceItem)==typeid(*child)
273+
&& child->getDisplayName() == firstNamespaceName) {
274+
namespaceItem = qSharedPointerCast<NamespaceItem>(child);
275+
break;
276+
}
272277
}
278+
} else {
279+
namespaceItem = currItem->findChildNamespace(firstNamespaceName);
273280
}
274281

275282
if (namespaceItem.isNull()) {

src/modules/connections-tree/items/namespaceitem.cpp

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -72,6 +72,17 @@ bool NamespaceItem::isEnabled() const
7272

7373
void NamespaceItem::append(QSharedPointer<TreeItem> item)
7474
{
75+
if (typeid(NamespaceItem)==typeid(*item)) {
76+
m_childNamespaces[item->getDisplayName()] = qSharedPointerCast<NamespaceItem>(item);
77+
}
7578
m_childItems.append(item);
7679
}
7780

81+
QSharedPointer<NamespaceItem> NamespaceItem::findChildNamespace(const QString &name)
82+
{
83+
if (!m_childNamespaces.contains(name))
84+
return QSharedPointer<NamespaceItem>();
85+
86+
return m_childNamespaces[name];
87+
}
88+

src/modules/connections-tree/items/namespaceitem.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,11 +24,14 @@ namespace ConnectionsTree {
2424

2525
void append(QSharedPointer<TreeItem> item);
2626

27+
QSharedPointer<NamespaceItem> findChildNamespace(const QString& name);
28+
2729
private:
2830
QString m_fullPath;
2931
QSharedPointer<Operations> m_operations;
3032
QWeakPointer<TreeItem> m_parent;
3133
bool m_locked;
3234
QList<QSharedPointer<TreeItem>> m_childItems;
35+
QHash<QString, QSharedPointer<NamespaceItem>> m_childNamespaces;
3336
};
3437
}

0 commit comments

Comments
 (0)