20
20
QgsLocatorContext ,
21
21
QgsLocatorResult ,
22
22
QgsLocatorModel ,
23
+ QgsLocatorProxyModel ,
23
24
QgsLocatorAutomaticModel ,
24
25
QgsSettings )
25
26
from qgis .PyQt .QtCore import QVariant , pyqtSignal , QCoreApplication
31
32
32
33
class test_filter (QgsLocatorFilter ):
33
34
34
- def __init__ (self , identifier , prefix = None , parent = None ):
35
+ def __init__ (self , identifier , prefix = None , groupResult = False , parent = None ):
35
36
super ().__init__ (parent )
36
37
self .identifier = identifier
37
38
self ._prefix = prefix
39
+ self .groupResult = groupResult
38
40
39
41
def clone (self ):
40
- return test_filter (self .identifier )
42
+ return test_filter (self .identifier , self . prefix , self . groupResult )
41
43
42
44
def name (self ):
43
45
return 'test_' + self .identifier
44
46
45
47
def displayName (self ):
46
- return 'test'
48
+ return 'test_' + self . identifier
47
49
48
50
def prefix (self ):
49
51
return self ._prefix
50
52
51
53
def fetchResults (self , string , context , feedback ):
52
- for i in range (3 ):
54
+ n = 3 if not self .groupResult else 9
55
+ for i in range (n ):
53
56
if feedback .isCanceled ():
54
57
return
55
58
sleep (0.001 )
56
59
result = QgsLocatorResult ()
57
60
result .displayString = self .identifier + str (i )
61
+ if self .groupResult :
62
+ if i < 6 :
63
+ result .group = 'first group'
64
+ elif i < 8 :
65
+ result .group = 'second group'
58
66
self .resultFetched .emit (result )
59
67
60
68
def triggerResult (self , result ):
61
69
pass
62
70
71
+ def priority (self ):
72
+ if self .identifier == 'a' :
73
+ return QgsLocatorFilter .High
74
+ elif self .identifier == 'b' :
75
+ return QgsLocatorFilter .Medium
76
+ elif self .identifier == 'c' :
77
+ return QgsLocatorFilter .Low
78
+ else :
79
+ return QgsLocatorFilter .Medium
80
+
63
81
64
82
class TestQgsLocator (unittest .TestCase ):
65
83
@@ -268,6 +286,8 @@ def got_hit(result):
268
286
269
287
def testModel (self ):
270
288
m = QgsLocatorModel ()
289
+ p = QgsLocatorProxyModel (m )
290
+ p .setSourceModel (m )
271
291
l = QgsLocator ()
272
292
273
293
filter_a = test_filter ('a' )
@@ -282,40 +302,84 @@ def testModel(self):
282
302
QCoreApplication .processEvents ()
283
303
284
304
# 4 results - one is locator name
285
- self .assertEqual (m .rowCount (), 4 )
286
- self .assertEqual (m .data (m .index (0 , 0 )), 'test ' )
287
- self .assertEqual (m .data (m .index (0 , 0 ), QgsLocatorModel .ResultTypeRole ), 0 )
288
- self .assertEqual (m .data (m .index (0 , 0 ), QgsLocatorModel .ResultFilterNameRole ), 'test ' )
289
- self .assertEqual (m .data (m .index (1 , 0 )), 'a0' )
290
- self .assertEqual (m .data (m .index (1 , 0 ), QgsLocatorModel .ResultTypeRole ), 1 )
291
- self .assertEqual (m .data (m .index (1 , 0 ), QgsLocatorModel .ResultFilterNameRole ), 'test ' )
292
- self .assertEqual (m .data (m .index (2 , 0 )), 'a1' )
293
- self .assertEqual (m .data (m .index (2 , 0 ), QgsLocatorModel .ResultTypeRole ), 1 )
294
- self .assertEqual (m .data (m .index (2 , 0 ), QgsLocatorModel .ResultFilterNameRole ), 'test ' )
295
- self .assertEqual (m .data (m .index (3 , 0 )), 'a2' )
296
- self .assertEqual (m .data (m .index (3 , 0 ), QgsLocatorModel .ResultTypeRole ), 1 )
297
- self .assertEqual (m .data (m .index (3 , 0 ), QgsLocatorModel .ResultFilterNameRole ), 'test ' )
305
+ self .assertEqual (p .rowCount (), 4 )
306
+ self .assertEqual (p .data (p .index (0 , 0 )), 'test_a ' )
307
+ self .assertEqual (p .data (p .index (0 , 0 ), QgsLocatorModel .ResultTypeRole ), 0 )
308
+ self .assertEqual (p .data (p .index (0 , 0 ), QgsLocatorModel .ResultFilterNameRole ), 'test_a ' )
309
+ self .assertEqual (p .data (p .index (1 , 0 )), 'a0' )
310
+ self .assertEqual (p .data (p .index (1 , 0 ), QgsLocatorModel .ResultTypeRole ), QgsLocatorModel . NoGroup )
311
+ self .assertEqual (p .data (p .index (1 , 0 ), QgsLocatorModel .ResultFilterNameRole ), 'test_a ' )
312
+ self .assertEqual (p .data (p .index (2 , 0 )), 'a1' )
313
+ self .assertEqual (p .data (p .index (2 , 0 ), QgsLocatorModel .ResultTypeRole ), QgsLocatorModel . NoGroup )
314
+ self .assertEqual (p .data (p .index (2 , 0 ), QgsLocatorModel .ResultFilterNameRole ), 'test_a ' )
315
+ self .assertEqual (p .data (p .index (3 , 0 )), 'a2' )
316
+ self .assertEqual (p .data (p .index (3 , 0 ), QgsLocatorModel .ResultTypeRole ), QgsLocatorModel . NoGroup )
317
+ self .assertEqual (p .data (p .index (3 , 0 ), QgsLocatorModel .ResultFilterNameRole ), 'test_a ' )
298
318
299
319
m .clear ()
300
- self .assertEqual (m .rowCount (), 0 )
320
+ self .assertEqual (p .rowCount (), 0 )
301
321
l .fetchResults ('b' , context )
302
322
303
323
for i in range (100 ):
304
324
sleep (0.002 )
305
325
QCoreApplication .processEvents ()
306
326
307
- self .assertEqual (m .rowCount (), 4 )
308
- self .assertEqual (m .data (m .index (1 , 0 )), 'a0' )
309
- self .assertEqual (m .data (m .index (2 , 0 )), 'a1' )
310
- self .assertEqual (m .data (m .index (3 , 0 )), 'a2' )
327
+ self .assertEqual (p .rowCount (), 4 )
328
+ self .assertEqual (p .data (p .index (1 , 0 )), 'a0' )
329
+ self .assertEqual (p .data (p .index (2 , 0 )), 'a1' )
330
+ self .assertEqual (p .data (p .index (3 , 0 )), 'a2' )
311
331
312
332
m .deferredClear ()
313
333
# should not be immediately cleared!
314
- self .assertEqual (m .rowCount (), 4 )
334
+ self .assertEqual (p .rowCount (), 4 )
315
335
for i in range (100 ):
316
336
sleep (0.002 )
317
337
QCoreApplication .processEvents ()
318
- self .assertEqual (m .rowCount (), 0 )
338
+ self .assertEqual (p .rowCount (), 0 )
339
+ m .clear ()
340
+
341
+ # test with groups
342
+ self .assertEqual (p .rowCount (), 0 )
343
+ filter_b = test_filter ('b' , None , True )
344
+ l .registerFilter (filter_b )
345
+ l .fetchResults ('c' , context )
346
+ for i in range (200 ):
347
+ sleep (0.002 )
348
+ QCoreApplication .processEvents ()
349
+ self .assertEqual (p .rowCount (), 16 ) # 1 title a + 3 results + 1 title b + 2 groups + 9 results
350
+ self .assertEqual (p .data (p .index (0 , 0 )), 'test_a' )
351
+ self .assertEqual (p .data (p .index (0 , 0 ), QgsLocatorModel .ResultTypeRole ), 0 )
352
+ self .assertEqual (p .data (p .index (1 , 0 )), 'a0' )
353
+ self .assertEqual (p .data (p .index (1 , 0 ), QgsLocatorModel .ResultTypeRole ), QgsLocatorModel .NoGroup )
354
+ self .assertEqual (p .data (p .index (2 , 0 )), 'a1' )
355
+ self .assertEqual (p .data (p .index (2 , 0 ), QgsLocatorModel .ResultTypeRole ), QgsLocatorModel .NoGroup )
356
+ self .assertEqual (p .data (p .index (3 , 0 )), 'a2' )
357
+ self .assertEqual (p .data (p .index (3 , 0 ), QgsLocatorModel .ResultTypeRole ), QgsLocatorModel .NoGroup )
358
+ self .assertEqual (p .data (p .index (4 , 0 )), 'test_b' )
359
+ self .assertEqual (p .data (p .index (4 , 0 ), QgsLocatorModel .ResultTypeRole ), 0 )
360
+ self .assertEqual (p .data (p .index (4 , 0 ), QgsLocatorModel .ResultFilterNameRole ), 'test_b' )
361
+ self .assertEqual (p .data (p .index (5 , 0 )).strip (), 'first group' )
362
+ self .assertEqual (p .data (p .index (5 , 0 ), QgsLocatorModel .ResultTypeRole ), 1 )
363
+ self .assertEqual (p .data (p .index (6 , 0 )), 'b0' )
364
+ self .assertEqual (p .data (p .index (6 , 0 ), QgsLocatorModel .ResultTypeRole ), 1 )
365
+ self .assertEqual (p .data (p .index (7 , 0 )), 'b1' )
366
+ self .assertEqual (p .data (p .index (7 , 0 ), QgsLocatorModel .ResultTypeRole ), 1 )
367
+ self .assertEqual (p .data (p .index (8 , 0 )), 'b2' )
368
+ self .assertEqual (p .data (p .index (8 , 0 ), QgsLocatorModel .ResultTypeRole ), 1 )
369
+ self .assertEqual (p .data (p .index (9 , 0 )), 'b3' )
370
+ self .assertEqual (p .data (p .index (9 , 0 ), QgsLocatorModel .ResultTypeRole ), 1 )
371
+ self .assertEqual (p .data (p .index (10 , 0 )), 'b4' )
372
+ self .assertEqual (p .data (p .index (10 , 0 ), QgsLocatorModel .ResultTypeRole ), 1 )
373
+ self .assertEqual (p .data (p .index (11 , 0 )), 'b5' )
374
+ self .assertEqual (p .data (p .index (11 , 0 ), QgsLocatorModel .ResultTypeRole ), 1 )
375
+ self .assertEqual (p .data (p .index (12 , 0 )).strip (), 'second group' )
376
+ self .assertEqual (p .data (p .index (12 , 0 ), QgsLocatorModel .ResultTypeRole ), 2 )
377
+ self .assertEqual (p .data (p .index (13 , 0 )), 'b6' )
378
+ self .assertEqual (p .data (p .index (13 , 0 ), QgsLocatorModel .ResultTypeRole ), 2 )
379
+ self .assertEqual (p .data (p .index (14 , 0 )), 'b7' )
380
+ self .assertEqual (p .data (p .index (14 , 0 ), QgsLocatorModel .ResultTypeRole ), 2 )
381
+ self .assertEqual (p .data (p .index (15 , 0 )), 'b8' )
382
+ self .assertEqual (p .data (p .index (15 , 0 ), QgsLocatorModel .ResultTypeRole ), QgsLocatorModel .NoGroup )
319
383
320
384
def testAutoModel (self ):
321
385
"""
@@ -336,18 +400,18 @@ def testAutoModel(self):
336
400
337
401
# 4 results - one is locator name
338
402
self .assertEqual (m .rowCount (), 4 )
339
- self .assertEqual (m .data (m .index (0 , 0 )), 'test ' )
403
+ self .assertEqual (m .data (m .index (0 , 0 )), 'test_a ' )
340
404
self .assertEqual (m .data (m .index (0 , 0 ), QgsLocatorModel .ResultTypeRole ), 0 )
341
- self .assertEqual (m .data (m .index (0 , 0 ), QgsLocatorModel .ResultFilterNameRole ), 'test ' )
405
+ self .assertEqual (m .data (m .index (0 , 0 ), QgsLocatorModel .ResultFilterNameRole ), 'test_a ' )
342
406
self .assertEqual (m .data (m .index (1 , 0 )), 'a0' )
343
- self .assertEqual (m .data (m .index (1 , 0 ), QgsLocatorModel .ResultTypeRole ), 1 )
344
- self .assertEqual (m .data (m .index (1 , 0 ), QgsLocatorModel .ResultFilterNameRole ), 'test ' )
407
+ self .assertEqual (m .data (m .index (1 , 0 ), QgsLocatorModel .ResultTypeRole ), QgsLocatorModel . NoGroup )
408
+ self .assertEqual (m .data (m .index (1 , 0 ), QgsLocatorModel .ResultFilterNameRole ), 'test_a ' )
345
409
self .assertEqual (m .data (m .index (2 , 0 )), 'a1' )
346
- self .assertEqual (m .data (m .index (2 , 0 ), QgsLocatorModel .ResultTypeRole ), 1 )
347
- self .assertEqual (m .data (m .index (2 , 0 ), QgsLocatorModel .ResultFilterNameRole ), 'test ' )
410
+ self .assertEqual (m .data (m .index (2 , 0 ), QgsLocatorModel .ResultTypeRole ), QgsLocatorModel . NoGroup )
411
+ self .assertEqual (m .data (m .index (2 , 0 ), QgsLocatorModel .ResultFilterNameRole ), 'test_a ' )
348
412
self .assertEqual (m .data (m .index (3 , 0 )), 'a2' )
349
- self .assertEqual (m .data (m .index (3 , 0 ), QgsLocatorModel .ResultTypeRole ), 1 )
350
- self .assertEqual (m .data (m .index (3 , 0 ), QgsLocatorModel .ResultFilterNameRole ), 'test ' )
413
+ self .assertEqual (m .data (m .index (3 , 0 ), QgsLocatorModel .ResultTypeRole ), QgsLocatorModel . NoGroup )
414
+ self .assertEqual (m .data (m .index (3 , 0 ), QgsLocatorModel .ResultFilterNameRole ), 'test_a ' )
351
415
352
416
m .search ('a' )
353
417
@@ -357,7 +421,7 @@ def testAutoModel(self):
357
421
358
422
# 4 results - one is locator name
359
423
self .assertEqual (m .rowCount (), 4 )
360
- self .assertEqual (m .data (m .index (0 , 0 )), 'test ' )
424
+ self .assertEqual (m .data (m .index (0 , 0 )), 'test_a ' )
361
425
self .assertEqual (m .data (m .index (1 , 0 )), 'a0' )
362
426
self .assertEqual (m .data (m .index (2 , 0 )), 'a1' )
363
427
self .assertEqual (m .data (m .index (3 , 0 )), 'a2' )
0 commit comments