author | immler@in.tum.de |
Sun, 02 Nov 2008 14:32:18 +0100 | |
changeset 34349 | 1714aeef8388 |
parent 34348 | abea94120f4b |
child 34350 | aa4f35a305fa |
permissions | -rw-r--r-- |
34342
b2781f2cd80a
LazyScroller: rendering messages only when needed
immler@in.tum.de
parents:
diff
changeset
|
1 |
/* |
34349 | 2 |
* ScrollerDockable.scala |
34342
b2781f2cd80a
LazyScroller: rendering messages only when needed
immler@in.tum.de
parents:
diff
changeset
|
3 |
* |
34346
634024f57c18
faster resizing, unlimited caching(but cache is cleared on resize)
immler@in.tum.de
parents:
34344
diff
changeset
|
4 |
* TODO: clearer seperation of tasks: layout message_view, layout panel (with preferredsize), repaint, relayout, ... |
634024f57c18
faster resizing, unlimited caching(but cache is cleared on resize)
immler@in.tum.de
parents:
34344
diff
changeset
|
5 |
* + relayout on ValueIsAdjusting while scrolling |
634024f57c18
faster resizing, unlimited caching(but cache is cleared on resize)
immler@in.tum.de
parents:
34344
diff
changeset
|
6 |
* + scrolling *one* panel |
34342
b2781f2cd80a
LazyScroller: rendering messages only when needed
immler@in.tum.de
parents:
diff
changeset
|
7 |
*/ |
b2781f2cd80a
LazyScroller: rendering messages only when needed
immler@in.tum.de
parents:
diff
changeset
|
8 |
|
b2781f2cd80a
LazyScroller: rendering messages only when needed
immler@in.tum.de
parents:
diff
changeset
|
9 |
package isabelle.jedit |
b2781f2cd80a
LazyScroller: rendering messages only when needed
immler@in.tum.de
parents:
diff
changeset
|
10 |
|
b2781f2cd80a
LazyScroller: rendering messages only when needed
immler@in.tum.de
parents:
diff
changeset
|
11 |
import java.io.{ ByteArrayInputStream, FileInputStream, InputStream } |
b2781f2cd80a
LazyScroller: rendering messages only when needed
immler@in.tum.de
parents:
diff
changeset
|
12 |
|
b2781f2cd80a
LazyScroller: rendering messages only when needed
immler@in.tum.de
parents:
diff
changeset
|
13 |
import scala.collection.mutable.ArrayBuffer |
b2781f2cd80a
LazyScroller: rendering messages only when needed
immler@in.tum.de
parents:
diff
changeset
|
14 |
|
b2781f2cd80a
LazyScroller: rendering messages only when needed
immler@in.tum.de
parents:
diff
changeset
|
15 |
import java.awt.{ BorderLayout, GridLayout, Adjustable, Rectangle, Scrollbar } |
b2781f2cd80a
LazyScroller: rendering messages only when needed
immler@in.tum.de
parents:
diff
changeset
|
16 |
import java.awt.image.BufferedImage |
34344
3775958051c5
absolute positioning according to preferred size of panels,
immler@in.tum.de
parents:
34343
diff
changeset
|
17 |
import java.awt.event.{ AdjustmentListener, AdjustmentEvent, ComponentListener, ComponentEvent } |
34342
b2781f2cd80a
LazyScroller: rendering messages only when needed
immler@in.tum.de
parents:
diff
changeset
|
18 |
import javax.swing.{ JScrollBar, JPanel, JScrollPane, ScrollPaneConstants } |
b2781f2cd80a
LazyScroller: rendering messages only when needed
immler@in.tum.de
parents:
diff
changeset
|
19 |
|
b2781f2cd80a
LazyScroller: rendering messages only when needed
immler@in.tum.de
parents:
diff
changeset
|
20 |
import isabelle.IsabelleSystem.getenv |
b2781f2cd80a
LazyScroller: rendering messages only when needed
immler@in.tum.de
parents:
diff
changeset
|
21 |
|
b2781f2cd80a
LazyScroller: rendering messages only when needed
immler@in.tum.de
parents:
diff
changeset
|
22 |
import org.xml.sax.InputSource; |
b2781f2cd80a
LazyScroller: rendering messages only when needed
immler@in.tum.de
parents:
diff
changeset
|
23 |
|
b2781f2cd80a
LazyScroller: rendering messages only when needed
immler@in.tum.de
parents:
diff
changeset
|
24 |
import org.w3c.dom.Document |
b2781f2cd80a
LazyScroller: rendering messages only when needed
immler@in.tum.de
parents:
diff
changeset
|
25 |
|
b2781f2cd80a
LazyScroller: rendering messages only when needed
immler@in.tum.de
parents:
diff
changeset
|
26 |
import org.xhtmlrenderer.simple.XHTMLPanel |
b2781f2cd80a
LazyScroller: rendering messages only when needed
immler@in.tum.de
parents:
diff
changeset
|
27 |
import org.xhtmlrenderer.context.AWTFontResolver |
b2781f2cd80a
LazyScroller: rendering messages only when needed
immler@in.tum.de
parents:
diff
changeset
|
28 |
import org.xhtmlrenderer.swing.NaiveUserAgent |
b2781f2cd80a
LazyScroller: rendering messages only when needed
immler@in.tum.de
parents:
diff
changeset
|
29 |
import org.xhtmlrenderer.resource.CSSResource |
b2781f2cd80a
LazyScroller: rendering messages only when needed
immler@in.tum.de
parents:
diff
changeset
|
30 |
|
b2781f2cd80a
LazyScroller: rendering messages only when needed
immler@in.tum.de
parents:
diff
changeset
|
31 |
import org.gjt.sp.jedit.View |
b2781f2cd80a
LazyScroller: rendering messages only when needed
immler@in.tum.de
parents:
diff
changeset
|
32 |
|
34349 | 33 |
object ScrollerDockable { |
34342
b2781f2cd80a
LazyScroller: rendering messages only when needed
immler@in.tum.de
parents:
diff
changeset
|
34 |
val baseURL = "file://localhost" + getenv("ISABELLE_HOME") + "/lib/html/" |
b2781f2cd80a
LazyScroller: rendering messages only when needed
immler@in.tum.de
parents:
diff
changeset
|
35 |
val userStylesheet = |
b2781f2cd80a
LazyScroller: rendering messages only when needed
immler@in.tum.de
parents:
diff
changeset
|
36 |
"file://localhost" + getenv("ISABELLE_HOME_USER") + "/etc/user.css"; |
b2781f2cd80a
LazyScroller: rendering messages only when needed
immler@in.tum.de
parents:
diff
changeset
|
37 |
val stylesheet = """ |
b2781f2cd80a
LazyScroller: rendering messages only when needed
immler@in.tum.de
parents:
diff
changeset
|
38 |
|
b2781f2cd80a
LazyScroller: rendering messages only when needed
immler@in.tum.de
parents:
diff
changeset
|
39 |
@import "isabelle.css"; |
b2781f2cd80a
LazyScroller: rendering messages only when needed
immler@in.tum.de
parents:
diff
changeset
|
40 |
|
b2781f2cd80a
LazyScroller: rendering messages only when needed
immler@in.tum.de
parents:
diff
changeset
|
41 |
@import '""" + userStylesheet + """'; |
b2781f2cd80a
LazyScroller: rendering messages only when needed
immler@in.tum.de
parents:
diff
changeset
|
42 |
|
b2781f2cd80a
LazyScroller: rendering messages only when needed
immler@in.tum.de
parents:
diff
changeset
|
43 |
messages, message { |
b2781f2cd80a
LazyScroller: rendering messages only when needed
immler@in.tum.de
parents:
diff
changeset
|
44 |
display: block; |
b2781f2cd80a
LazyScroller: rendering messages only when needed
immler@in.tum.de
parents:
diff
changeset
|
45 |
white-space: pre-wrap; |
b2781f2cd80a
LazyScroller: rendering messages only when needed
immler@in.tum.de
parents:
diff
changeset
|
46 |
font-family: Isabelle; |
b2781f2cd80a
LazyScroller: rendering messages only when needed
immler@in.tum.de
parents:
diff
changeset
|
47 |
} |
b2781f2cd80a
LazyScroller: rendering messages only when needed
immler@in.tum.de
parents:
diff
changeset
|
48 |
""" |
b2781f2cd80a
LazyScroller: rendering messages only when needed
immler@in.tum.de
parents:
diff
changeset
|
49 |
} |
b2781f2cd80a
LazyScroller: rendering messages only when needed
immler@in.tum.de
parents:
diff
changeset
|
50 |
|
b2781f2cd80a
LazyScroller: rendering messages only when needed
immler@in.tum.de
parents:
diff
changeset
|
51 |
|
34349 | 52 |
class ScrollerDockable(view : View, position : String) extends JPanel with AdjustmentListener with ComponentListener { |
34342
b2781f2cd80a
LazyScroller: rendering messages only when needed
immler@in.tum.de
parents:
diff
changeset
|
53 |
//holding the unrendered messages |
34344
3775958051c5
absolute positioning according to preferred size of panels,
immler@in.tum.de
parents:
34343
diff
changeset
|
54 |
val message_buffer = new ArrayBuffer[Document]() |
3775958051c5
absolute positioning according to preferred size of panels,
immler@in.tum.de
parents:
34343
diff
changeset
|
55 |
//rendered messages |
3775958051c5
absolute positioning according to preferred size of panels,
immler@in.tum.de
parents:
34343
diff
changeset
|
56 |
var message_cache = Map[Int, XHTMLPanel]() |
34342
b2781f2cd80a
LazyScroller: rendering messages only when needed
immler@in.tum.de
parents:
diff
changeset
|
57 |
// defining the current view |
34344
3775958051c5
absolute positioning according to preferred size of panels,
immler@in.tum.de
parents:
34343
diff
changeset
|
58 |
val scrollunit = 10 |
3775958051c5
absolute positioning according to preferred size of panels,
immler@in.tum.de
parents:
34343
diff
changeset
|
59 |
var message_offset = 0 //how many pixels of the lowest message are hidden |
3775958051c5
absolute positioning according to preferred size of panels,
immler@in.tum.de
parents:
34343
diff
changeset
|
60 |
var message_no = -1 //index of the lowest message |
3775958051c5
absolute positioning according to preferred size of panels,
immler@in.tum.de
parents:
34343
diff
changeset
|
61 |
// absolute positioning for messages |
3775958051c5
absolute positioning according to preferred size of panels,
immler@in.tum.de
parents:
34343
diff
changeset
|
62 |
val message_view = new JPanel |
3775958051c5
absolute positioning according to preferred size of panels,
immler@in.tum.de
parents:
34343
diff
changeset
|
63 |
message_view.setLayout(null) |
34342
b2781f2cd80a
LazyScroller: rendering messages only when needed
immler@in.tum.de
parents:
diff
changeset
|
64 |
// setting up view |
b2781f2cd80a
LazyScroller: rendering messages only when needed
immler@in.tum.de
parents:
diff
changeset
|
65 |
setLayout(new BorderLayout()) |
b2781f2cd80a
LazyScroller: rendering messages only when needed
immler@in.tum.de
parents:
diff
changeset
|
66 |
val vscroll = new JScrollBar(Adjustable.VERTICAL, 0, 1, 0, 1) |
b2781f2cd80a
LazyScroller: rendering messages only when needed
immler@in.tum.de
parents:
diff
changeset
|
67 |
vscroll.addAdjustmentListener(this) |
b2781f2cd80a
LazyScroller: rendering messages only when needed
immler@in.tum.de
parents:
diff
changeset
|
68 |
add (vscroll, BorderLayout.EAST) |
34343 | 69 |
add (message_view, BorderLayout.CENTER) |
34344
3775958051c5
absolute positioning according to preferred size of panels,
immler@in.tum.de
parents:
34343
diff
changeset
|
70 |
addComponentListener(this) |
34342
b2781f2cd80a
LazyScroller: rendering messages only when needed
immler@in.tum.de
parents:
diff
changeset
|
71 |
|
b2781f2cd80a
LazyScroller: rendering messages only when needed
immler@in.tum.de
parents:
diff
changeset
|
72 |
|
34344
3775958051c5
absolute positioning according to preferred size of panels,
immler@in.tum.de
parents:
34343
diff
changeset
|
73 |
//Render a message to a Panel |
3775958051c5
absolute positioning according to preferred size of panels,
immler@in.tum.de
parents:
34343
diff
changeset
|
74 |
def render (message: Document): XHTMLPanel = { |
3775958051c5
absolute positioning according to preferred size of panels,
immler@in.tum.de
parents:
34343
diff
changeset
|
75 |
val panel = new XHTMLPanel(new UserAgent()) |
3775958051c5
absolute positioning according to preferred size of panels,
immler@in.tum.de
parents:
34343
diff
changeset
|
76 |
|
3775958051c5
absolute positioning according to preferred size of panels,
immler@in.tum.de
parents:
34343
diff
changeset
|
77 |
val fontResolver = |
3775958051c5
absolute positioning according to preferred size of panels,
immler@in.tum.de
parents:
34343
diff
changeset
|
78 |
panel.getSharedContext.getFontResolver.asInstanceOf[AWTFontResolver] |
3775958051c5
absolute positioning according to preferred size of panels,
immler@in.tum.de
parents:
34343
diff
changeset
|
79 |
if (Plugin.plugin.viewFont != null) |
3775958051c5
absolute positioning according to preferred size of panels,
immler@in.tum.de
parents:
34343
diff
changeset
|
80 |
fontResolver.setFontMapping("Isabelle", Plugin.plugin.viewFont) |
3775958051c5
absolute positioning according to preferred size of panels,
immler@in.tum.de
parents:
34343
diff
changeset
|
81 |
|
3775958051c5
absolute positioning according to preferred size of panels,
immler@in.tum.de
parents:
34343
diff
changeset
|
82 |
Plugin.plugin.viewFontChanged.add(font => { |
3775958051c5
absolute positioning according to preferred size of panels,
immler@in.tum.de
parents:
34343
diff
changeset
|
83 |
if (Plugin.plugin.viewFont != null) |
3775958051c5
absolute positioning according to preferred size of panels,
immler@in.tum.de
parents:
34343
diff
changeset
|
84 |
fontResolver.setFontMapping("Isabelle", Plugin.plugin.viewFont) |
3775958051c5
absolute positioning according to preferred size of panels,
immler@in.tum.de
parents:
34343
diff
changeset
|
85 |
|
3775958051c5
absolute positioning according to preferred size of panels,
immler@in.tum.de
parents:
34343
diff
changeset
|
86 |
panel.relayout() |
3775958051c5
absolute positioning according to preferred size of panels,
immler@in.tum.de
parents:
34343
diff
changeset
|
87 |
}) |
34342
b2781f2cd80a
LazyScroller: rendering messages only when needed
immler@in.tum.de
parents:
diff
changeset
|
88 |
|
34349 | 89 |
panel.setDocument(message, ScrollerDockable.baseURL) |
34344
3775958051c5
absolute positioning according to preferred size of panels,
immler@in.tum.de
parents:
34343
diff
changeset
|
90 |
panel |
3775958051c5
absolute positioning according to preferred size of panels,
immler@in.tum.de
parents:
34343
diff
changeset
|
91 |
} |
3775958051c5
absolute positioning according to preferred size of panels,
immler@in.tum.de
parents:
34343
diff
changeset
|
92 |
|
34346
634024f57c18
faster resizing, unlimited caching(but cache is cleared on resize)
immler@in.tum.de
parents:
34344
diff
changeset
|
93 |
//calculates preferred size of panel |
634024f57c18
faster resizing, unlimited caching(but cache is cleared on resize)
immler@in.tum.de
parents:
34344
diff
changeset
|
94 |
def calculate_preferred_size(panel: XHTMLPanel){ |
34344
3775958051c5
absolute positioning according to preferred size of panels,
immler@in.tum.de
parents:
34343
diff
changeset
|
95 |
message_view.add (panel) |
3775958051c5
absolute positioning according to preferred size of panels,
immler@in.tum.de
parents:
34343
diff
changeset
|
96 |
panel.setBounds (0, 0, message_view.getWidth, 1) // document has to fit into width |
3775958051c5
absolute positioning according to preferred size of panels,
immler@in.tum.de
parents:
34343
diff
changeset
|
97 |
panel.doLayout (panel.getGraphics) //lay out, preferred size is set then |
34346
634024f57c18
faster resizing, unlimited caching(but cache is cleared on resize)
immler@in.tum.de
parents:
34344
diff
changeset
|
98 |
} |
634024f57c18
faster resizing, unlimited caching(but cache is cleared on resize)
immler@in.tum.de
parents:
34344
diff
changeset
|
99 |
|
634024f57c18
faster resizing, unlimited caching(but cache is cleared on resize)
immler@in.tum.de
parents:
34344
diff
changeset
|
100 |
//add panel to the cache |
634024f57c18
faster resizing, unlimited caching(but cache is cleared on resize)
immler@in.tum.de
parents:
34344
diff
changeset
|
101 |
def add_to_cache (message_no: Int, panel: XHTMLPanel) = { |
634024f57c18
faster resizing, unlimited caching(but cache is cleared on resize)
immler@in.tum.de
parents:
34344
diff
changeset
|
102 |
message_cache = message_cache.update (message_no, panel) |
634024f57c18
faster resizing, unlimited caching(but cache is cleared on resize)
immler@in.tum.de
parents:
34344
diff
changeset
|
103 |
calculate_preferred_size(panel) |
34344
3775958051c5
absolute positioning according to preferred size of panels,
immler@in.tum.de
parents:
34343
diff
changeset
|
104 |
System.err.println("Added " + message_no + " with preferred Size " + panel.getPreferredSize + " to cache") |
3775958051c5
absolute positioning according to preferred size of panels,
immler@in.tum.de
parents:
34343
diff
changeset
|
105 |
} |
3775958051c5
absolute positioning according to preferred size of panels,
immler@in.tum.de
parents:
34343
diff
changeset
|
106 |
|
3775958051c5
absolute positioning according to preferred size of panels,
immler@in.tum.de
parents:
34343
diff
changeset
|
107 |
//render and load a message into cache, place its bottom at y-coordinate; |
3775958051c5
absolute positioning according to preferred size of panels,
immler@in.tum.de
parents:
34343
diff
changeset
|
108 |
def set_message (message_no: Int, y: Int) = { |
3775958051c5
absolute positioning according to preferred size of panels,
immler@in.tum.de
parents:
34343
diff
changeset
|
109 |
//get or add panel from/to cache |
3775958051c5
absolute positioning according to preferred size of panels,
immler@in.tum.de
parents:
34343
diff
changeset
|
110 |
if(!message_cache.isDefinedAt(message_no)){ |
3775958051c5
absolute positioning according to preferred size of panels,
immler@in.tum.de
parents:
34343
diff
changeset
|
111 |
add_to_cache (message_no, render (message_buffer(message_no))) |
3775958051c5
absolute positioning according to preferred size of panels,
immler@in.tum.de
parents:
34343
diff
changeset
|
112 |
} |
3775958051c5
absolute positioning according to preferred size of panels,
immler@in.tum.de
parents:
34343
diff
changeset
|
113 |
val panel = message_cache.get(message_no).get |
3775958051c5
absolute positioning according to preferred size of panels,
immler@in.tum.de
parents:
34343
diff
changeset
|
114 |
val width = panel.getPreferredSize.getWidth.toInt |
3775958051c5
absolute positioning according to preferred size of panels,
immler@in.tum.de
parents:
34343
diff
changeset
|
115 |
val height = panel.getPreferredSize.getHeight.toInt |
3775958051c5
absolute positioning according to preferred size of panels,
immler@in.tum.de
parents:
34343
diff
changeset
|
116 |
panel.setBounds(0, y - height, width, height) |
3775958051c5
absolute positioning according to preferred size of panels,
immler@in.tum.de
parents:
34343
diff
changeset
|
117 |
message_view.add(panel) |
3775958051c5
absolute positioning according to preferred size of panels,
immler@in.tum.de
parents:
34343
diff
changeset
|
118 |
panel |
3775958051c5
absolute positioning according to preferred size of panels,
immler@in.tum.de
parents:
34343
diff
changeset
|
119 |
} |
3775958051c5
absolute positioning according to preferred size of panels,
immler@in.tum.de
parents:
34343
diff
changeset
|
120 |
|
34342
b2781f2cd80a
LazyScroller: rendering messages only when needed
immler@in.tum.de
parents:
diff
changeset
|
121 |
def update_view = { |
b2781f2cd80a
LazyScroller: rendering messages only when needed
immler@in.tum.de
parents:
diff
changeset
|
122 |
message_view.removeAll() |
34344
3775958051c5
absolute positioning according to preferred size of panels,
immler@in.tum.de
parents:
34343
diff
changeset
|
123 |
var n = message_no |
3775958051c5
absolute positioning according to preferred size of panels,
immler@in.tum.de
parents:
34343
diff
changeset
|
124 |
var y:Int = message_view.getHeight + message_offset |
3775958051c5
absolute positioning according to preferred size of panels,
immler@in.tum.de
parents:
34343
diff
changeset
|
125 |
while (y >= 0 && n >= 0){ |
3775958051c5
absolute positioning according to preferred size of panels,
immler@in.tum.de
parents:
34343
diff
changeset
|
126 |
val panel = set_message (n, y) |
3775958051c5
absolute positioning according to preferred size of panels,
immler@in.tum.de
parents:
34343
diff
changeset
|
127 |
y = y - panel.getHeight |
3775958051c5
absolute positioning according to preferred size of panels,
immler@in.tum.de
parents:
34343
diff
changeset
|
128 |
n = n - 1 |
3775958051c5
absolute positioning according to preferred size of panels,
immler@in.tum.de
parents:
34343
diff
changeset
|
129 |
} |
3775958051c5
absolute positioning according to preferred size of panels,
immler@in.tum.de
parents:
34343
diff
changeset
|
130 |
repaint() |
34342
b2781f2cd80a
LazyScroller: rendering messages only when needed
immler@in.tum.de
parents:
diff
changeset
|
131 |
} |
b2781f2cd80a
LazyScroller: rendering messages only when needed
immler@in.tum.de
parents:
diff
changeset
|
132 |
|
34344
3775958051c5
absolute positioning according to preferred size of panels,
immler@in.tum.de
parents:
34343
diff
changeset
|
133 |
def add_message (message: Document) = { |
34342
b2781f2cd80a
LazyScroller: rendering messages only when needed
immler@in.tum.de
parents:
diff
changeset
|
134 |
message_buffer += message |
34344
3775958051c5
absolute positioning according to preferred size of panels,
immler@in.tum.de
parents:
34343
diff
changeset
|
135 |
vscroll.setMaximum (Math.max(1, message_buffer.length)) |
34342
b2781f2cd80a
LazyScroller: rendering messages only when needed
immler@in.tum.de
parents:
diff
changeset
|
136 |
} |
b2781f2cd80a
LazyScroller: rendering messages only when needed
immler@in.tum.de
parents:
diff
changeset
|
137 |
|
b2781f2cd80a
LazyScroller: rendering messages only when needed
immler@in.tum.de
parents:
diff
changeset
|
138 |
override def adjustmentValueChanged (e : AdjustmentEvent) = { |
34344
3775958051c5
absolute positioning according to preferred size of panels,
immler@in.tum.de
parents:
34343
diff
changeset
|
139 |
//event-handling has to be so general (without UNIT_INCR,...) |
3775958051c5
absolute positioning according to preferred size of panels,
immler@in.tum.de
parents:
34343
diff
changeset
|
140 |
// because all events could be sent as TRACK e.g. on my mac |
3775958051c5
absolute positioning according to preferred size of panels,
immler@in.tum.de
parents:
34343
diff
changeset
|
141 |
message_no = e.getValue |
3775958051c5
absolute positioning according to preferred size of panels,
immler@in.tum.de
parents:
34343
diff
changeset
|
142 |
update_view |
3775958051c5
absolute positioning according to preferred size of panels,
immler@in.tum.de
parents:
34343
diff
changeset
|
143 |
} |
34346
634024f57c18
faster resizing, unlimited caching(but cache is cleared on resize)
immler@in.tum.de
parents:
34344
diff
changeset
|
144 |
|
634024f57c18
faster resizing, unlimited caching(but cache is cleared on resize)
immler@in.tum.de
parents:
34344
diff
changeset
|
145 |
// handle Component-Events |
634024f57c18
faster resizing, unlimited caching(but cache is cleared on resize)
immler@in.tum.de
parents:
34344
diff
changeset
|
146 |
override def componentShown(e: ComponentEvent){} |
34344
3775958051c5
absolute positioning according to preferred size of panels,
immler@in.tum.de
parents:
34343
diff
changeset
|
147 |
override def componentHidden(e: ComponentEvent){} |
3775958051c5
absolute positioning according to preferred size of panels,
immler@in.tum.de
parents:
34343
diff
changeset
|
148 |
override def componentMoved(e: ComponentEvent){} |
3775958051c5
absolute positioning according to preferred size of panels,
immler@in.tum.de
parents:
34343
diff
changeset
|
149 |
override def componentResized(e: ComponentEvent){ |
34346
634024f57c18
faster resizing, unlimited caching(but cache is cleared on resize)
immler@in.tum.de
parents:
34344
diff
changeset
|
150 |
// remove all hidden messages from cache |
634024f57c18
faster resizing, unlimited caching(but cache is cleared on resize)
immler@in.tum.de
parents:
34344
diff
changeset
|
151 |
// TODO: move to unlayouted cache |
634024f57c18
faster resizing, unlimited caching(but cache is cleared on resize)
immler@in.tum.de
parents:
34344
diff
changeset
|
152 |
message_cache = message_cache filter ( pair => pair match {case (no, _) => |
634024f57c18
faster resizing, unlimited caching(but cache is cleared on resize)
immler@in.tum.de
parents:
34344
diff
changeset
|
153 |
no <= message_no && no >= message_no - message_view.getComponents.length}) |
634024f57c18
faster resizing, unlimited caching(but cache is cleared on resize)
immler@in.tum.de
parents:
34344
diff
changeset
|
154 |
//calculate preferred size for each panel |
634024f57c18
faster resizing, unlimited caching(but cache is cleared on resize)
immler@in.tum.de
parents:
34344
diff
changeset
|
155 |
message_cache foreach (pair => pair match { case (_, pa) => |
634024f57c18
faster resizing, unlimited caching(but cache is cleared on resize)
immler@in.tum.de
parents:
34344
diff
changeset
|
156 |
calculate_preferred_size (pa) |
634024f57c18
faster resizing, unlimited caching(but cache is cleared on resize)
immler@in.tum.de
parents:
34344
diff
changeset
|
157 |
}) |
34344
3775958051c5
absolute positioning according to preferred size of panels,
immler@in.tum.de
parents:
34343
diff
changeset
|
158 |
update_view |
3775958051c5
absolute positioning according to preferred size of panels,
immler@in.tum.de
parents:
34343
diff
changeset
|
159 |
} |
3775958051c5
absolute positioning according to preferred size of panels,
immler@in.tum.de
parents:
34343
diff
changeset
|
160 |
|
3775958051c5
absolute positioning according to preferred size of panels,
immler@in.tum.de
parents:
34343
diff
changeset
|
161 |
//register somewhere |
34346
634024f57c18
faster resizing, unlimited caching(but cache is cleared on resize)
immler@in.tum.de
parents:
34344
diff
changeset
|
162 |
// TODO: only testing atm |
34344
3775958051c5
absolute positioning according to preferred size of panels,
immler@in.tum.de
parents:
34343
diff
changeset
|
163 |
Plugin.plugin.stateUpdate.add(state => { |
3775958051c5
absolute positioning according to preferred size of panels,
immler@in.tum.de
parents:
34343
diff
changeset
|
164 |
var i = 0 |
3775958051c5
absolute positioning according to preferred size of panels,
immler@in.tum.de
parents:
34343
diff
changeset
|
165 |
if(state != null) while (i < 500) { |
3775958051c5
absolute positioning according to preferred size of panels,
immler@in.tum.de
parents:
34343
diff
changeset
|
166 |
add_message(state.document) |
3775958051c5
absolute positioning according to preferred size of panels,
immler@in.tum.de
parents:
34343
diff
changeset
|
167 |
i += 1 |
34342
b2781f2cd80a
LazyScroller: rendering messages only when needed
immler@in.tum.de
parents:
diff
changeset
|
168 |
} |
34344
3775958051c5
absolute positioning according to preferred size of panels,
immler@in.tum.de
parents:
34343
diff
changeset
|
169 |
}) |
3775958051c5
absolute positioning according to preferred size of panels,
immler@in.tum.de
parents:
34343
diff
changeset
|
170 |
} |
34342
b2781f2cd80a
LazyScroller: rendering messages only when needed
immler@in.tum.de
parents:
diff
changeset
|
171 |
|
b2781f2cd80a
LazyScroller: rendering messages only when needed
immler@in.tum.de
parents:
diff
changeset
|
172 |