@@ -35,8 +35,20 @@ void KeysTreeRenderer::renderKeys(QSharedPointer<Operations> operations,
3535
3636 int unprocessedPartStart = 0 ;
3737 if (parent->getFullPath ().size () > 0 || parent->type () == " namespace" ) {
38- unprocessedPartStart =
39- parent->getFullPath ().size () + settings.nsSeparator .length ();
38+ int nsLength = 0 ;
39+
40+ if (keys.size () > 0 ) {
41+ QString firstKey = QString::fromUtf8 (keys[0 ]);
42+ int res = firstKey.indexOf (settings.nsSeparator , parent->getFullPath ().size ());
43+
44+ qDebug () << " NSs regex pos:" << res;
45+
46+ nsLength = settings.nsSeparator .matchedLength ();
47+ }
48+
49+ unprocessedPartStart =
50+ parent->getFullPath ().size () + nsLength;
51+
4052 }
4153
4254 auto rootItem = resolveRootItem (parent);
@@ -68,10 +80,12 @@ void KeysTreeRenderer::renderKeys(QSharedPointer<Operations> operations,
6880
6981 auto isBulkInsert = [settings, preRenderedKeysSet, unprocessedPartStart](
7082 const QByteArray ¤t, const QByteArray &next) {
83+ QString currentKey = QString::fromUtf8 (current);
84+ QString nextKey = QString::fromUtf8 (current);
7185 return (settings.appendNewItems &&
72- current .indexOf (settings.nsSeparator , unprocessedPartStart) == -1 &&
86+ currentKey .indexOf (settings.nsSeparator , unprocessedPartStart) == -1 &&
7387 !next.isEmpty () &&
74- next .indexOf (settings.nsSeparator , unprocessedPartStart) == -1 &&
88+ nextKey .indexOf (settings.nsSeparator , unprocessedPartStart) == -1 &&
7589 !preRenderedKeysSet.contains (next));
7690 };
7791
@@ -130,7 +144,7 @@ void KeysTreeRenderer::renderKeys(QSharedPointer<Operations> operations,
130144 parent->showLoadingError (" Not enough memory to render all keys" );
131145 break ;
132146 }
133- }
147+ }
134148
135149 if (preRenderedKeysToBeRemoved.size () > 0 ) {
136150 QList<QWeakPointer<KeyItem>> obsoleteKeys;
@@ -161,10 +175,17 @@ void KeysTreeRenderer::renderLazily(QSharedPointer<AbstractNamespaceItem> root,
161175 QWeakPointer<TreeItem> currentParent =
162176 parent.staticCast <TreeItem>().toWeakRef ();
163177
164- int indexOfNaspaceSeparator =
165- (settings.nsSeparator .isEmpty ())
166- ? -1
167- : notProcessedKeyPart.indexOf (settings.nsSeparator );
178+ int indexOfNaspaceSeparator = -1 ;
179+ auto nsSeparator = settings.nsSeparator ;
180+ int nsSeparatorLength = nsSeparator.pattern ().size ();
181+
182+ if (!nsSeparator.isEmpty () && nsSeparator.patternSyntax () == QRegExp::RegExp) {
183+ QString keyPart = QString::fromUtf8 (notProcessedKeyPart);
184+ indexOfNaspaceSeparator = keyPart.indexOf (nsSeparator);
185+
186+ qDebug () << " NSs regex pos:" << indexOfNaspaceSeparator << nsSeparator.cap ();
187+ nsSeparatorLength = nsSeparator.matchedLength ();
188+ }
168189
169190 if (indexOfNaspaceSeparator == -1 ) {
170191 if (parent->getAllChilds ().size () >= settings.renderLimit ) {
@@ -199,7 +220,8 @@ void KeysTreeRenderer::renderLazily(QSharedPointer<AbstractNamespaceItem> root,
199220 QByteArray namespaceFullPath = fullKey.mid (0 , nsPos);
200221
201222 // Single namespaced key
202- if (nextKey.isEmpty () || nextKey.indexOf (namespaceFullPath) == -1 ) {
223+ if (nsSeparator.patternSyntax () != QRegExp::RegExp
224+ && (nextKey.isEmpty () || nextKey.indexOf (namespaceFullPath) == -1 )) {
203225 QSharedPointer<KeyItem> newKey (new KeyItem (fullKey, currentParent,
204226 parent->model (),
205227 settings.shortKeysRendering ));
@@ -209,7 +231,7 @@ void KeysTreeRenderer::renderLazily(QSharedPointer<AbstractNamespaceItem> root,
209231
210232 namespaceItem = QSharedPointer<NamespaceItem>(
211233 new NamespaceItem (namespaceFullPath, m_operations, currentParent,
212- parent->model (), settings.dbIndex , settings.filter ));
234+ parent->model (), settings.dbIndex , settings.filter , nsSeparator. cap () ));
213235
214236 if (expandedNamespaces.contains (namespaceFullPath)) {
215237 namespaceItem->setExpanded (true );
@@ -219,8 +241,7 @@ void KeysTreeRenderer::renderLazily(QSharedPointer<AbstractNamespaceItem> root,
219241 }
220242
221243 renderLazily (root, namespaceItem,
222- notProcessedKeyPart.mid (indexOfNaspaceSeparator +
223- settings.nsSeparator .length ()),
244+ notProcessedKeyPart.mid (indexOfNaspaceSeparator + nsSeparatorLength),
224245 fullKey, m_operations, settings, expandedNamespaces,
225246 level + 1 , nextKey);
226247}
0 commit comments