@@ -35,8 +35,20 @@ void KeysTreeRenderer::renderKeys(QSharedPointer<Operations> operations,
35
35
36
36
int unprocessedPartStart = 0 ;
37
37
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
+
40
52
}
41
53
42
54
auto rootItem = resolveRootItem (parent);
@@ -68,10 +80,12 @@ void KeysTreeRenderer::renderKeys(QSharedPointer<Operations> operations,
68
80
69
81
auto isBulkInsert = [settings, preRenderedKeysSet, unprocessedPartStart](
70
82
const QByteArray ¤t, const QByteArray &next) {
83
+ QString currentKey = QString::fromUtf8 (current);
84
+ QString nextKey = QString::fromUtf8 (current);
71
85
return (settings.appendNewItems &&
72
- current .indexOf (settings.nsSeparator , unprocessedPartStart) == -1 &&
86
+ currentKey .indexOf (settings.nsSeparator , unprocessedPartStart) == -1 &&
73
87
!next.isEmpty () &&
74
- next .indexOf (settings.nsSeparator , unprocessedPartStart) == -1 &&
88
+ nextKey .indexOf (settings.nsSeparator , unprocessedPartStart) == -1 &&
75
89
!preRenderedKeysSet.contains (next));
76
90
};
77
91
@@ -130,7 +144,7 @@ void KeysTreeRenderer::renderKeys(QSharedPointer<Operations> operations,
130
144
parent->showLoadingError (" Not enough memory to render all keys" );
131
145
break ;
132
146
}
133
- }
147
+ }
134
148
135
149
if (preRenderedKeysToBeRemoved.size () > 0 ) {
136
150
QList<QWeakPointer<KeyItem>> obsoleteKeys;
@@ -161,10 +175,17 @@ void KeysTreeRenderer::renderLazily(QSharedPointer<AbstractNamespaceItem> root,
161
175
QWeakPointer<TreeItem> currentParent =
162
176
parent.staticCast <TreeItem>().toWeakRef ();
163
177
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
+ }
168
189
169
190
if (indexOfNaspaceSeparator == -1 ) {
170
191
if (parent->getAllChilds ().size () >= settings.renderLimit ) {
@@ -199,7 +220,8 @@ void KeysTreeRenderer::renderLazily(QSharedPointer<AbstractNamespaceItem> root,
199
220
QByteArray namespaceFullPath = fullKey.mid (0 , nsPos);
200
221
201
222
// Single namespaced key
202
- if (nextKey.isEmpty () || nextKey.indexOf (namespaceFullPath) == -1 ) {
223
+ if (nsSeparator.patternSyntax () != QRegExp::RegExp
224
+ && (nextKey.isEmpty () || nextKey.indexOf (namespaceFullPath) == -1 )) {
203
225
QSharedPointer<KeyItem> newKey (new KeyItem (fullKey, currentParent,
204
226
parent->model (),
205
227
settings.shortKeysRendering ));
@@ -209,7 +231,7 @@ void KeysTreeRenderer::renderLazily(QSharedPointer<AbstractNamespaceItem> root,
209
231
210
232
namespaceItem = QSharedPointer<NamespaceItem>(
211
233
new NamespaceItem (namespaceFullPath, m_operations, currentParent,
212
- parent->model (), settings.dbIndex , settings.filter ));
234
+ parent->model (), settings.dbIndex , settings.filter , nsSeparator. cap () ));
213
235
214
236
if (expandedNamespaces.contains (namespaceFullPath)) {
215
237
namespaceItem->setExpanded (true );
@@ -219,8 +241,7 @@ void KeysTreeRenderer::renderLazily(QSharedPointer<AbstractNamespaceItem> root,
219
241
}
220
242
221
243
renderLazily (root, namespaceItem,
222
- notProcessedKeyPart.mid (indexOfNaspaceSeparator +
223
- settings.nsSeparator .length ()),
244
+ notProcessedKeyPart.mid (indexOfNaspaceSeparator + nsSeparatorLength),
224
245
fullKey, m_operations, settings, expandedNamespaces,
225
246
level + 1 , nextKey);
226
247
}
0 commit comments