annotate src/name/blackcap/clipman/PasteboardQueue.kt @ 29:c4f53bc01732

Fix searching (and main display).
author David Barts <n5jrn@me.com>
date Wed, 29 Jan 2020 14:36:16 -0800
parents 8aa2dfac27eb
children 0e88c6bed11e
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
be282c48010a Incomplete; checking it in as a backup.
David Barts <n5jrn@me.com>
parents:
diff changeset
1 /*
be282c48010a Incomplete; checking it in as a backup.
David Barts <n5jrn@me.com>
parents:
diff changeset
2 * The queue of pasteboard items we manage. New stuff gets added to the
be282c48010a Incomplete; checking it in as a backup.
David Barts <n5jrn@me.com>
parents:
diff changeset
3 * tail, and old stuff truncated off the head.
be282c48010a Incomplete; checking it in as a backup.
David Barts <n5jrn@me.com>
parents:
diff changeset
4 */
be282c48010a Incomplete; checking it in as a backup.
David Barts <n5jrn@me.com>
parents:
diff changeset
5 package name.blackcap.clipman
be282c48010a Incomplete; checking it in as a backup.
David Barts <n5jrn@me.com>
parents:
diff changeset
6
be282c48010a Incomplete; checking it in as a backup.
David Barts <n5jrn@me.com>
parents:
diff changeset
7 import java.awt.Container
1
fb224c3aebdf Got it auto-scrolling to the bottom.
David Barts <n5jrn@me.com>
parents: 0
diff changeset
8 import java.awt.Rectangle
0
be282c48010a Incomplete; checking it in as a backup.
David Barts <n5jrn@me.com>
parents:
diff changeset
9 import java.util.Collections
be282c48010a Incomplete; checking it in as a backup.
David Barts <n5jrn@me.com>
parents:
diff changeset
10 import java.util.LinkedList
1
fb224c3aebdf Got it auto-scrolling to the bottom.
David Barts <n5jrn@me.com>
parents: 0
diff changeset
11 import java.util.logging.Level
fb224c3aebdf Got it auto-scrolling to the bottom.
David Barts <n5jrn@me.com>
parents: 0
diff changeset
12 import java.util.logging.Logger
0
be282c48010a Incomplete; checking it in as a backup.
David Barts <n5jrn@me.com>
parents:
diff changeset
13 import javax.swing.*
27
8aa2dfac27eb Big reorg; compiled but untested.
David Barts <n5jrn@me.com>
parents: 21
diff changeset
14 import javax.swing.text.DefaultHighlighter
0
be282c48010a Incomplete; checking it in as a backup.
David Barts <n5jrn@me.com>
parents:
diff changeset
15
be282c48010a Incomplete; checking it in as a backup.
David Barts <n5jrn@me.com>
parents:
diff changeset
16 /**
be282c48010a Incomplete; checking it in as a backup.
David Barts <n5jrn@me.com>
parents:
diff changeset
17 * A queue that tracks the data we display and the widgets used to
be282c48010a Incomplete; checking it in as a backup.
David Barts <n5jrn@me.com>
parents:
diff changeset
18 * display them. We never explicitly remove stuff from the queue,
be282c48010a Incomplete; checking it in as a backup.
David Barts <n5jrn@me.com>
parents:
diff changeset
19 * though items will get silently discarded to prevent the queue from
be282c48010a Incomplete; checking it in as a backup.
David Barts <n5jrn@me.com>
parents:
diff changeset
20 * exceeding the specified maximum size.
be282c48010a Incomplete; checking it in as a backup.
David Barts <n5jrn@me.com>
parents:
diff changeset
21 */
be282c48010a Incomplete; checking it in as a backup.
David Barts <n5jrn@me.com>
parents:
diff changeset
22 class PasteboardQueue(val parent: Container, maxSize: Int) {
be282c48010a Incomplete; checking it in as a backup.
David Barts <n5jrn@me.com>
parents:
diff changeset
23 private val queue = LinkedList<QueueItem>()
be282c48010a Incomplete; checking it in as a backup.
David Barts <n5jrn@me.com>
parents:
diff changeset
24 private var _maxSize = maxSize
16
88703ca72fc3 Make an efficiency improvement: cache the scrollPane.
David Barts <n5jrn@me.com>
parents: 5
diff changeset
25 private var scrollPane: JScrollPane? = null
88703ca72fc3 Make an efficiency improvement: cache the scrollPane.
David Barts <n5jrn@me.com>
parents: 5
diff changeset
26 init {
88703ca72fc3 Make an efficiency improvement: cache the scrollPane.
David Barts <n5jrn@me.com>
parents: 5
diff changeset
27 var sp: Container? = parent
88703ca72fc3 Make an efficiency improvement: cache the scrollPane.
David Barts <n5jrn@me.com>
parents: 5
diff changeset
28 while (sp != null) {
88703ca72fc3 Make an efficiency improvement: cache the scrollPane.
David Barts <n5jrn@me.com>
parents: 5
diff changeset
29 if (sp is JScrollPane) {
88703ca72fc3 Make an efficiency improvement: cache the scrollPane.
David Barts <n5jrn@me.com>
parents: 5
diff changeset
30 scrollPane = sp
88703ca72fc3 Make an efficiency improvement: cache the scrollPane.
David Barts <n5jrn@me.com>
parents: 5
diff changeset
31 break
88703ca72fc3 Make an efficiency improvement: cache the scrollPane.
David Barts <n5jrn@me.com>
parents: 5
diff changeset
32 }
88703ca72fc3 Make an efficiency improvement: cache the scrollPane.
David Barts <n5jrn@me.com>
parents: 5
diff changeset
33 sp = sp.parent
88703ca72fc3 Make an efficiency improvement: cache the scrollPane.
David Barts <n5jrn@me.com>
parents: 5
diff changeset
34 }
88703ca72fc3 Make an efficiency improvement: cache the scrollPane.
David Barts <n5jrn@me.com>
parents: 5
diff changeset
35 }
0
be282c48010a Incomplete; checking it in as a backup.
David Barts <n5jrn@me.com>
parents:
diff changeset
36
29
c4f53bc01732 Fix searching (and main display).
David Barts <n5jrn@me.com>
parents: 27
diff changeset
37 data class Offset(val inQueue: Int, val inItem: Int)
21
c10a447b9e1b Add some searching hooks.
David Barts <n5jrn@me.com>
parents: 16
diff changeset
38 enum class Direction { FORWARDS, BACKWARDS }
c10a447b9e1b Add some searching hooks.
David Barts <n5jrn@me.com>
parents: 16
diff changeset
39
0
be282c48010a Incomplete; checking it in as a backup.
David Barts <n5jrn@me.com>
parents:
diff changeset
40 /**
be282c48010a Incomplete; checking it in as a backup.
David Barts <n5jrn@me.com>
parents:
diff changeset
41 * The maximum allowed size of this queue. Attempts to make the queue
be282c48010a Incomplete; checking it in as a backup.
David Barts <n5jrn@me.com>
parents:
diff changeset
42 * larger than this size, or specifying a size smaller than the current
be282c48010a Incomplete; checking it in as a backup.
David Barts <n5jrn@me.com>
parents:
diff changeset
43 * size, will result in the oldest item(s) being discarded. A size less
be282c48010a Incomplete; checking it in as a backup.
David Barts <n5jrn@me.com>
parents:
diff changeset
44 * than or equal to zero means an unlimited size.
be282c48010a Incomplete; checking it in as a backup.
David Barts <n5jrn@me.com>
parents:
diff changeset
45 */
be282c48010a Incomplete; checking it in as a backup.
David Barts <n5jrn@me.com>
parents:
diff changeset
46 var maxSize: Int
be282c48010a Incomplete; checking it in as a backup.
David Barts <n5jrn@me.com>
parents:
diff changeset
47 get() { return _maxSize }
be282c48010a Incomplete; checking it in as a backup.
David Barts <n5jrn@me.com>
parents:
diff changeset
48 @Synchronized set(value) {
be282c48010a Incomplete; checking it in as a backup.
David Barts <n5jrn@me.com>
parents:
diff changeset
49 _maxSize = value
5
d832c7b2bfd0 Clean out some deadwood.
David Barts <n5jrn@me.com>
parents: 2
diff changeset
50 truncate()
0
be282c48010a Incomplete; checking it in as a backup.
David Barts <n5jrn@me.com>
parents:
diff changeset
51 }
be282c48010a Incomplete; checking it in as a backup.
David Barts <n5jrn@me.com>
parents:
diff changeset
52
be282c48010a Incomplete; checking it in as a backup.
David Barts <n5jrn@me.com>
parents:
diff changeset
53 /**
1
fb224c3aebdf Got it auto-scrolling to the bottom.
David Barts <n5jrn@me.com>
parents: 0
diff changeset
54 * Add a QueueItem to the end of the queue.
fb224c3aebdf Got it auto-scrolling to the bottom.
David Barts <n5jrn@me.com>
parents: 0
diff changeset
55 * @param item QueueItem to add
0
be282c48010a Incomplete; checking it in as a backup.
David Barts <n5jrn@me.com>
parents:
diff changeset
56 */
be282c48010a Incomplete; checking it in as a backup.
David Barts <n5jrn@me.com>
parents:
diff changeset
57 @Synchronized fun add(item: QueueItem) {
1
fb224c3aebdf Got it auto-scrolling to the bottom.
David Barts <n5jrn@me.com>
parents: 0
diff changeset
58 inSwingThread {
27
8aa2dfac27eb Big reorg; compiled but untested.
David Barts <n5jrn@me.com>
parents: 21
diff changeset
59 parent.add(item.view.contents)
16
88703ca72fc3 Make an efficiency improvement: cache the scrollPane.
David Barts <n5jrn@me.com>
parents: 5
diff changeset
60 scrollPane?.run {
2
6fb94eae32fa Maybe this will auto-scroll reliably?
David Barts <n5jrn@me.com>
parents: 1
diff changeset
61 validate()
6fb94eae32fa Maybe this will auto-scroll reliably?
David Barts <n5jrn@me.com>
parents: 1
diff changeset
62 verticalScrollBar.run { value = maximum + 1 }
1
fb224c3aebdf Got it auto-scrolling to the bottom.
David Barts <n5jrn@me.com>
parents: 0
diff changeset
63 }
fb224c3aebdf Got it auto-scrolling to the bottom.
David Barts <n5jrn@me.com>
parents: 0
diff changeset
64 }
0
be282c48010a Incomplete; checking it in as a backup.
David Barts <n5jrn@me.com>
parents:
diff changeset
65 queue.addLast(item)
5
d832c7b2bfd0 Clean out some deadwood.
David Barts <n5jrn@me.com>
parents: 2
diff changeset
66 truncate()
0
be282c48010a Incomplete; checking it in as a backup.
David Barts <n5jrn@me.com>
parents:
diff changeset
67 }
be282c48010a Incomplete; checking it in as a backup.
David Barts <n5jrn@me.com>
parents:
diff changeset
68
21
c10a447b9e1b Add some searching hooks.
David Barts <n5jrn@me.com>
parents: 16
diff changeset
69 /**
27
8aa2dfac27eb Big reorg; compiled but untested.
David Barts <n5jrn@me.com>
parents: 21
diff changeset
70 * Delete something from the queue.
8aa2dfac27eb Big reorg; compiled but untested.
David Barts <n5jrn@me.com>
parents: 21
diff changeset
71 * @param object to delete
8aa2dfac27eb Big reorg; compiled but untested.
David Barts <n5jrn@me.com>
parents: 21
diff changeset
72 */
8aa2dfac27eb Big reorg; compiled but untested.
David Barts <n5jrn@me.com>
parents: 21
diff changeset
73 @Synchronized fun delete(item: QueueItem) {
8aa2dfac27eb Big reorg; compiled but untested.
David Barts <n5jrn@me.com>
parents: 21
diff changeset
74 if (queue.remove(item)) {
8aa2dfac27eb Big reorg; compiled but untested.
David Barts <n5jrn@me.com>
parents: 21
diff changeset
75 parent.validate()
8aa2dfac27eb Big reorg; compiled but untested.
David Barts <n5jrn@me.com>
parents: 21
diff changeset
76 }
8aa2dfac27eb Big reorg; compiled but untested.
David Barts <n5jrn@me.com>
parents: 21
diff changeset
77 }
8aa2dfac27eb Big reorg; compiled but untested.
David Barts <n5jrn@me.com>
parents: 21
diff changeset
78
8aa2dfac27eb Big reorg; compiled but untested.
David Barts <n5jrn@me.com>
parents: 21
diff changeset
79 /**
21
c10a447b9e1b Add some searching hooks.
David Barts <n5jrn@me.com>
parents: 16
diff changeset
80 * Find and highlight the next occurrence of the specified string
c10a447b9e1b Add some searching hooks.
David Barts <n5jrn@me.com>
parents: 16
diff changeset
81 * @param string to search
c10a447b9e1b Add some searching hooks.
David Barts <n5jrn@me.com>
parents: 16
diff changeset
82 * @param whether to search backwards (default forwards)
c10a447b9e1b Add some searching hooks.
David Barts <n5jrn@me.com>
parents: 16
diff changeset
83 * @param case-folding flag (default true)
c10a447b9e1b Add some searching hooks.
David Barts <n5jrn@me.com>
parents: 16
diff changeset
84 * @param starting point (0, 0) for forwards, (m, n) for backwards
c10a447b9e1b Add some searching hooks.
David Barts <n5jrn@me.com>
parents: 16
diff changeset
85 * @return position where start of string was found, or null
c10a447b9e1b Add some searching hooks.
David Barts <n5jrn@me.com>
parents: 16
diff changeset
86 */
c10a447b9e1b Add some searching hooks.
David Barts <n5jrn@me.com>
parents: 16
diff changeset
87 fun find(needle: String, direction: Direction = Direction.FORWARDS,
c10a447b9e1b Add some searching hooks.
David Barts <n5jrn@me.com>
parents: 16
diff changeset
88 foldCase: Boolean = true, origin: Offset? = null): Offset?
c10a447b9e1b Add some searching hooks.
David Barts <n5jrn@me.com>
parents: 16
diff changeset
89 {
27
8aa2dfac27eb Big reorg; compiled but untested.
David Barts <n5jrn@me.com>
parents: 21
diff changeset
90 /* clean up any old highlights */
8aa2dfac27eb Big reorg; compiled but untested.
David Barts <n5jrn@me.com>
parents: 21
diff changeset
91 queue.forEach {
8aa2dfac27eb Big reorg; compiled but untested.
David Barts <n5jrn@me.com>
parents: 21
diff changeset
92 val hiliter = it.view.searchable.highlighter
8aa2dfac27eb Big reorg; compiled but untested.
David Barts <n5jrn@me.com>
parents: 21
diff changeset
93 hiliter.highlights.forEach {
8aa2dfac27eb Big reorg; compiled but untested.
David Barts <n5jrn@me.com>
parents: 21
diff changeset
94 hiliter.removeHighlight(it)
21
c10a447b9e1b Add some searching hooks.
David Barts <n5jrn@me.com>
parents: 16
diff changeset
95 }
27
8aa2dfac27eb Big reorg; compiled but untested.
David Barts <n5jrn@me.com>
parents: 21
diff changeset
96 }
8aa2dfac27eb Big reorg; compiled but untested.
David Barts <n5jrn@me.com>
parents: 21
diff changeset
97
8aa2dfac27eb Big reorg; compiled but untested.
David Barts <n5jrn@me.com>
parents: 21
diff changeset
98 /* get starting item index */
8aa2dfac27eb Big reorg; compiled but untested.
David Barts <n5jrn@me.com>
parents: 21
diff changeset
99 val qMax = queue.size
8aa2dfac27eb Big reorg; compiled but untested.
David Barts <n5jrn@me.com>
parents: 21
diff changeset
100 var norigin = origin ?: when (direction) {
8aa2dfac27eb Big reorg; compiled but untested.
David Barts <n5jrn@me.com>
parents: 21
diff changeset
101 Direction.FORWARDS -> Offset(0, 0)
8aa2dfac27eb Big reorg; compiled but untested.
David Barts <n5jrn@me.com>
parents: 21
diff changeset
102 Direction.BACKWARDS -> Offset(qMax - 1, -1)
21
c10a447b9e1b Add some searching hooks.
David Barts <n5jrn@me.com>
parents: 16
diff changeset
103 }
c10a447b9e1b Add some searching hooks.
David Barts <n5jrn@me.com>
parents: 16
diff changeset
104
27
8aa2dfac27eb Big reorg; compiled but untested.
David Barts <n5jrn@me.com>
parents: 21
diff changeset
105 /* loop initialization */
8aa2dfac27eb Big reorg; compiled but untested.
David Barts <n5jrn@me.com>
parents: 21
diff changeset
106 val (start, incr, search) = if (direction == Direction.FORWARDS) {
8aa2dfac27eb Big reorg; compiled but untested.
David Barts <n5jrn@me.com>
parents: 21
diff changeset
107 Triple( 0, 1, { n: String, h: String, o: Int -> h.indexOf(n, o, foldCase) })
8aa2dfac27eb Big reorg; compiled but untested.
David Barts <n5jrn@me.com>
parents: 21
diff changeset
108 } else {
8aa2dfac27eb Big reorg; compiled but untested.
David Barts <n5jrn@me.com>
parents: 21
diff changeset
109 Triple(-1, -1, { n: String, h: String, o: Int -> h.lastIndexOf(n, o, foldCase) })
8aa2dfac27eb Big reorg; compiled but untested.
David Barts <n5jrn@me.com>
parents: 21
diff changeset
110 }
8aa2dfac27eb Big reorg; compiled but untested.
David Barts <n5jrn@me.com>
parents: 21
diff changeset
111 val painter = DefaultHighlighter.DefaultHighlightPainter(null);
8aa2dfac27eb Big reorg; compiled but untested.
David Barts <n5jrn@me.com>
parents: 21
diff changeset
112 var pos = -1
8aa2dfac27eb Big reorg; compiled but untested.
David Barts <n5jrn@me.com>
parents: 21
diff changeset
113
8aa2dfac27eb Big reorg; compiled but untested.
David Barts <n5jrn@me.com>
parents: 21
diff changeset
114 /* try and find it */
8aa2dfac27eb Big reorg; compiled but untested.
David Barts <n5jrn@me.com>
parents: 21
diff changeset
115 while (norigin.inQueue >= 0 && norigin.inQueue < qMax) {
8aa2dfac27eb Big reorg; compiled but untested.
David Barts <n5jrn@me.com>
parents: 21
diff changeset
116 val si = queue.get(norigin.inQueue).view.searchable
8aa2dfac27eb Big reorg; compiled but untested.
David Barts <n5jrn@me.com>
parents: 21
diff changeset
117 val doc = si.document
8aa2dfac27eb Big reorg; compiled but untested.
David Barts <n5jrn@me.com>
parents: 21
diff changeset
118 val text = doc.getText(0, doc.length)
8aa2dfac27eb Big reorg; compiled but untested.
David Barts <n5jrn@me.com>
parents: 21
diff changeset
119 pos = if (norigin.inItem >= 0) norigin.inItem else text.length - 1
8aa2dfac27eb Big reorg; compiled but untested.
David Barts <n5jrn@me.com>
parents: 21
diff changeset
120 pos = search(needle, text, pos)
8aa2dfac27eb Big reorg; compiled but untested.
David Barts <n5jrn@me.com>
parents: 21
diff changeset
121 if (pos >= 0) {
8aa2dfac27eb Big reorg; compiled but untested.
David Barts <n5jrn@me.com>
parents: 21
diff changeset
122 si.highlighter.addHighlight(pos, pos+needle.length, painter)
8aa2dfac27eb Big reorg; compiled but untested.
David Barts <n5jrn@me.com>
parents: 21
diff changeset
123 break
8aa2dfac27eb Big reorg; compiled but untested.
David Barts <n5jrn@me.com>
parents: 21
diff changeset
124 }
8aa2dfac27eb Big reorg; compiled but untested.
David Barts <n5jrn@me.com>
parents: 21
diff changeset
125 norigin = Offset(norigin.inQueue + incr, start)
8aa2dfac27eb Big reorg; compiled but untested.
David Barts <n5jrn@me.com>
parents: 21
diff changeset
126 }
8aa2dfac27eb Big reorg; compiled but untested.
David Barts <n5jrn@me.com>
parents: 21
diff changeset
127 return if (pos >= 0) Offset(norigin.inQueue, pos) else null
8aa2dfac27eb Big reorg; compiled but untested.
David Barts <n5jrn@me.com>
parents: 21
diff changeset
128 }
8aa2dfac27eb Big reorg; compiled but untested.
David Barts <n5jrn@me.com>
parents: 21
diff changeset
129
8aa2dfac27eb Big reorg; compiled but untested.
David Barts <n5jrn@me.com>
parents: 21
diff changeset
130 /**
8aa2dfac27eb Big reorg; compiled but untested.
David Barts <n5jrn@me.com>
parents: 21
diff changeset
131 * Ensure none of the searchables in this queue are selected.
8aa2dfac27eb Big reorg; compiled but untested.
David Barts <n5jrn@me.com>
parents: 21
diff changeset
132 */
8aa2dfac27eb Big reorg; compiled but untested.
David Barts <n5jrn@me.com>
parents: 21
diff changeset
133 fun deselectAll() {
8aa2dfac27eb Big reorg; compiled but untested.
David Barts <n5jrn@me.com>
parents: 21
diff changeset
134 queue.forEach {
8aa2dfac27eb Big reorg; compiled but untested.
David Barts <n5jrn@me.com>
parents: 21
diff changeset
135 val s = it.view.searchable as? ClipText
8aa2dfac27eb Big reorg; compiled but untested.
David Barts <n5jrn@me.com>
parents: 21
diff changeset
136 if (s != null && s.selected) {
8aa2dfac27eb Big reorg; compiled but untested.
David Barts <n5jrn@me.com>
parents: 21
diff changeset
137 s.selected = false
8aa2dfac27eb Big reorg; compiled but untested.
David Barts <n5jrn@me.com>
parents: 21
diff changeset
138 s.validate()
8aa2dfac27eb Big reorg; compiled but untested.
David Barts <n5jrn@me.com>
parents: 21
diff changeset
139 }
8aa2dfac27eb Big reorg; compiled but untested.
David Barts <n5jrn@me.com>
parents: 21
diff changeset
140 }
8aa2dfac27eb Big reorg; compiled but untested.
David Barts <n5jrn@me.com>
parents: 21
diff changeset
141 }
8aa2dfac27eb Big reorg; compiled but untested.
David Barts <n5jrn@me.com>
parents: 21
diff changeset
142
8aa2dfac27eb Big reorg; compiled but untested.
David Barts <n5jrn@me.com>
parents: 21
diff changeset
143 /**
8aa2dfac27eb Big reorg; compiled but untested.
David Barts <n5jrn@me.com>
parents: 21
diff changeset
144 * Return the selected item, or null if nothing has been selected
8aa2dfac27eb Big reorg; compiled but untested.
David Barts <n5jrn@me.com>
parents: 21
diff changeset
145 */
8aa2dfac27eb Big reorg; compiled but untested.
David Barts <n5jrn@me.com>
parents: 21
diff changeset
146 fun getSelected(): QueueItem? {
8aa2dfac27eb Big reorg; compiled but untested.
David Barts <n5jrn@me.com>
parents: 21
diff changeset
147 queue.forEach {
8aa2dfac27eb Big reorg; compiled but untested.
David Barts <n5jrn@me.com>
parents: 21
diff changeset
148 if ((it.view.searchable as? ClipText)?.selected ?: false) {
8aa2dfac27eb Big reorg; compiled but untested.
David Barts <n5jrn@me.com>
parents: 21
diff changeset
149 return it
8aa2dfac27eb Big reorg; compiled but untested.
David Barts <n5jrn@me.com>
parents: 21
diff changeset
150 }
8aa2dfac27eb Big reorg; compiled but untested.
David Barts <n5jrn@me.com>
parents: 21
diff changeset
151 }
21
c10a447b9e1b Add some searching hooks.
David Barts <n5jrn@me.com>
parents: 16
diff changeset
152 return null
c10a447b9e1b Add some searching hooks.
David Barts <n5jrn@me.com>
parents: 16
diff changeset
153 }
c10a447b9e1b Add some searching hooks.
David Barts <n5jrn@me.com>
parents: 16
diff changeset
154
5
d832c7b2bfd0 Clean out some deadwood.
David Barts <n5jrn@me.com>
parents: 2
diff changeset
155 private fun truncate() {
0
be282c48010a Incomplete; checking it in as a backup.
David Barts <n5jrn@me.com>
parents:
diff changeset
156 if (_maxSize > 0) {
be282c48010a Incomplete; checking it in as a backup.
David Barts <n5jrn@me.com>
parents:
diff changeset
157 var size = queue.size
5
d832c7b2bfd0 Clean out some deadwood.
David Barts <n5jrn@me.com>
parents: 2
diff changeset
158 var dirty = false
0
be282c48010a Incomplete; checking it in as a backup.
David Barts <n5jrn@me.com>
parents:
diff changeset
159 while (size > _maxSize) {
27
8aa2dfac27eb Big reorg; compiled but untested.
David Barts <n5jrn@me.com>
parents: 21
diff changeset
160 var extra = queue.removeFirst().view
8aa2dfac27eb Big reorg; compiled but untested.
David Barts <n5jrn@me.com>
parents: 21
diff changeset
161 inSwingThread {
8aa2dfac27eb Big reorg; compiled but untested.
David Barts <n5jrn@me.com>
parents: 21
diff changeset
162 if (extra.searchable.selected) {
8aa2dfac27eb Big reorg; compiled but untested.
David Barts <n5jrn@me.com>
parents: 21
diff changeset
163 SelectionRequired.disable()
8aa2dfac27eb Big reorg; compiled but untested.
David Barts <n5jrn@me.com>
parents: 21
diff changeset
164 }
8aa2dfac27eb Big reorg; compiled but untested.
David Barts <n5jrn@me.com>
parents: 21
diff changeset
165 parent.remove(extra.contents)
8aa2dfac27eb Big reorg; compiled but untested.
David Barts <n5jrn@me.com>
parents: 21
diff changeset
166 }
0
be282c48010a Incomplete; checking it in as a backup.
David Barts <n5jrn@me.com>
parents:
diff changeset
167 dirty = true
be282c48010a Incomplete; checking it in as a backup.
David Barts <n5jrn@me.com>
parents:
diff changeset
168 size -= 1
be282c48010a Incomplete; checking it in as a backup.
David Barts <n5jrn@me.com>
parents:
diff changeset
169 }
be282c48010a Incomplete; checking it in as a backup.
David Barts <n5jrn@me.com>
parents:
diff changeset
170 if (dirty) {
be282c48010a Incomplete; checking it in as a backup.
David Barts <n5jrn@me.com>
parents:
diff changeset
171 inSwingThread { parent.validate() }
be282c48010a Incomplete; checking it in as a backup.
David Barts <n5jrn@me.com>
parents:
diff changeset
172 }
be282c48010a Incomplete; checking it in as a backup.
David Barts <n5jrn@me.com>
parents:
diff changeset
173 }
be282c48010a Incomplete; checking it in as a backup.
David Barts <n5jrn@me.com>
parents:
diff changeset
174 }
be282c48010a Incomplete; checking it in as a backup.
David Barts <n5jrn@me.com>
parents:
diff changeset
175 }
be282c48010a Incomplete; checking it in as a backup.
David Barts <n5jrn@me.com>
parents:
diff changeset
176
be282c48010a Incomplete; checking it in as a backup.
David Barts <n5jrn@me.com>
parents:
diff changeset
177 /**
27
8aa2dfac27eb Big reorg; compiled but untested.
David Barts <n5jrn@me.com>
parents: 21
diff changeset
178 * An item in the above queue. Linking model to view here sorta violates
8aa2dfac27eb Big reorg; compiled but untested.
David Barts <n5jrn@me.com>
parents: 21
diff changeset
179 * MVC principles, but rules are sometimes best broken. Doing it this way
8aa2dfac27eb Big reorg; compiled but untested.
David Barts <n5jrn@me.com>
parents: 21
diff changeset
180 * makes it impossible for the view queue to fail to follow the data
8aa2dfac27eb Big reorg; compiled but untested.
David Barts <n5jrn@me.com>
parents: 21
diff changeset
181 * queue.
0
be282c48010a Incomplete; checking it in as a backup.
David Barts <n5jrn@me.com>
parents:
diff changeset
182 */
27
8aa2dfac27eb Big reorg; compiled but untested.
David Barts <n5jrn@me.com>
parents: 21
diff changeset
183 data class QueueItem(val contents: PasteboardItem, val view: PasteboardItemView)