calculate preferred sizes only when needed
authorimmler@in.tum.de
Sun, 02 Nov 2008 14:50:26 +0100
changeset 34350 aa4f35a305fa
parent 34349 1714aeef8388
child 34351 1c919f65c296
calculate preferred sizes only when needed
src/Tools/jEdit/build.xml
src/Tools/jEdit/plugin/dockables.xml
src/Tools/jEdit/src/jedit/ScrollerDockable.scala
--- 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 @@
       <copy file="plugin/actions.xml" todir="${build.classes.dir}" />
       <copy file="plugin/IsabellePlugin.props" todir="${build.classes.dir}" />
     </target>
+    <target name="-post-jar">
+      <copy file="${dist.jar}" todir="/Users/fabian/tum/hiwi/jedit/jedit-sources/jEdit/build/jars/" />
+    </target>
 </project>
--- 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);
 	</DOCKABLE>
 	<DOCKABLE NAME="Isabelle_scroller">
-		new isabelle.jedit.LazyScroller(view, position);
+		new isabelle.jedit.ScrollerDockable(view, position);
 	</DOCKABLE>
 </DOCKABLES>
\ No newline at end of file
--- 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
   }