# HG changeset patch
# User immler@in.tum.de
# Date 1225633826 -3600
# Node ID aa4f35a305fa603758f3eaa1d7fc5117bc9d44af
# Parent 1714aeef838840714e82b7350201e47550365a3f
calculate preferred sizes only when needed
diff -r 1714aeef8388 -r aa4f35a305fa src/Tools/jEdit/build.xml
--- a/src/Tools/jEdit/build.xml Sun Nov 02 14:32:18 2008 +0100
+++ b/src/Tools/jEdit/build.xml Sun Nov 02 14:50:26 2008 +0100
@@ -72,4 +72,7 @@
+
+
+
diff -r 1714aeef8388 -r aa4f35a305fa src/Tools/jEdit/plugin/dockables.xml
--- a/src/Tools/jEdit/plugin/dockables.xml Sun Nov 02 14:32:18 2008 +0100
+++ b/src/Tools/jEdit/plugin/dockables.xml Sun Nov 02 14:50:26 2008 +0100
@@ -10,6 +10,6 @@
new isabelle.jedit.StateViewDockable(view, position);
- new isabelle.jedit.LazyScroller(view, position);
+ new isabelle.jedit.ScrollerDockable(view, position);
\ No newline at end of file
diff -r 1714aeef8388 -r aa4f35a305fa src/Tools/jEdit/src/jedit/ScrollerDockable.scala
--- a/src/Tools/jEdit/src/jedit/ScrollerDockable.scala Sun Nov 02 14:32:18 2008 +0100
+++ b/src/Tools/jEdit/src/jedit/ScrollerDockable.scala Sun Nov 02 14:50:26 2008 +0100
@@ -100,17 +100,21 @@
//add panel to the cache
def add_to_cache (message_no: Int, panel: XHTMLPanel) = {
message_cache = message_cache.update (message_no, panel)
- calculate_preferred_size(panel)
- System.err.println("Added " + message_no + " with preferred Size " + panel.getPreferredSize + " to cache")
}
//render and load a message into cache, place its bottom at y-coordinate;
def set_message (message_no: Int, y: Int) = {
//get or add panel from/to cache
if(!message_cache.isDefinedAt(message_no)){
- add_to_cache (message_no, render (message_buffer(message_no)))
+ if(message_buffer.isDefinedAt(message_no)){
+ add_to_cache (message_no, render (message_buffer(message_no)))
+ }
}
val panel = message_cache.get(message_no).get
+ // recalculate preferred sie after resizing
+ if(panel.getPreferredSize.getWidth.toInt != message_view.getWidth)
+ calculate_preferred_size (panel)
+ //place message on view
val width = panel.getPreferredSize.getWidth.toInt
val height = panel.getPreferredSize.getHeight.toInt
panel.setBounds(0, y - height, width, height)
@@ -147,14 +151,6 @@
override def componentHidden(e: ComponentEvent){}
override def componentMoved(e: ComponentEvent){}
override def componentResized(e: ComponentEvent){
- // remove all hidden messages from cache
- // TODO: move to unlayouted cache
- message_cache = message_cache filter ( pair => pair match {case (no, _) =>
- no <= message_no && no >= message_no - message_view.getComponents.length})
- //calculate preferred size for each panel
- message_cache foreach (pair => pair match { case (_, pa) =>
- calculate_preferred_size (pa)
- })
update_view
}