You are viewing a plain text version of this content. The canonical link for it is here.
Posted to xap-commits@incubator.apache.org by mt...@apache.org on 2007/01/11 23:55:13 UTC

svn commit: r495446 - /incubator/xap/trunk/src/xap/widgets/dojo/Window.js

Author: mturyn
Date: Thu Jan 11 15:55:13 2007
New Revision: 495446

URL: http://svn.apache.org/viewvc?view=rev&rev=495446
Log:
1.) Worked around an IE6-specific bug that created a 2-line titlebar with a couple of 
chars from the title's end on the second line---they're not in the titleBarText node 
itself, I think an unoccupied area in the titlebar clipped a bit of the screen, perhaps
an area next to an action icon, since the ghost title-end looks about that width, and
the title might have been right next to one of them.
2.) Tweaked minimised window management to look decent across browsers.

Modified:
    incubator/xap/trunk/src/xap/widgets/dojo/Window.js

Modified: incubator/xap/trunk/src/xap/widgets/dojo/Window.js
URL: http://svn.apache.org/viewvc/incubator/xap/trunk/src/xap/widgets/dojo/Window.js?view=diff&rev=495446&r1=495445&r2=495446
==============================================================================
--- incubator/xap/trunk/src/xap/widgets/dojo/Window.js (original)
+++ incubator/xap/trunk/src/xap/widgets/dojo/Window.js Thu Jan 11 15:55:13 2007
@@ -70,27 +70,27 @@
 		if( this.windowState != "maximized" ){
 			this.setPrevious() ;
 		}
+
+
+
+
 		
 		this.resizeBar.style.visibility="hidden" ;
+
+
+
+
 		// Show just the top bar, narrowed to 8 icons' worth:
-		var wI=0 ;
-		for(var action in  this.windowActions ){
-			wI = this[action].offsetWidth ;
-			if(wI>0){
-				break ;
-			}		
-		}	
-		wI=Math.max(4,wI);
-		var newW = 8*wI ;
 
-		this.positionMinimizedWindow(newW) ;
+		var newW = this.minimizedWindowWidth() ;
 
 		var newH = dojo.style.getOuterHeight(this.titleBar); // + dojo.style.getOuterHeight(this.resizeBar);
 	
 		this.resizeTo(newW,newH) ; 
 			
-			
-
+		// Keep container node from intruding into titleBar
+		// when minimised:
+		this.containerNode.style.visibility = "hidden" ;
 		
 		this.minimizeAction.style.display="none";
 		
@@ -98,29 +98,30 @@
 		var nextNode = this.restoreAction.nextSibling ;
 		restoreParent.removeChild(this.restoreAction);
 		restoreParent.insertBefore(this.restoreAction,nextNode);
-		
-		// Keep container node from intruding into titleBar
-		// when minimised:
-		this.containerNode.style.visibility = "hidden" ;
+	
 		
 		this.restoreAction.style.display="";
 		this.windowState="minimized";	
+		this.positionMinimizedWindow() ;
+
 	},
 	//Let's play window-manager:
-	positionMinimizedWindow:function(newW){
+	positionMinimizedWindow:function(){
 		var parent = this.domNode.parentNode ;
 		if( !parent ){
 			// nowhere to minimise to:
 			return ;
 		}
+		var newW = this.minimizedWindowWidth() ;
 		// Arrange window next to previous minimised window:
 		if(!parent.minWins){
 			parent.minWins = {} ;
 			parent.minWins.owner = parent ;
-			parent.minWins.nRows = 1 ;
+			parent.minWins.nRows = 0 ;
 			parent.minWins.nextLeft = 1 ;
 			parent.minWins.slots = new Object() ;
-			parent.minWins.titleBarHeightPct = 5 ;			
+			parent.minWins.titleBarHeightPct = 5 ;
+			parent.minWins.nextTopPct = null ;
 		}
 
 		var slot = parent.minWins.slots[this.widgetId] ;
@@ -130,34 +131,40 @@
 			this.domNode.style.top = slot.top  ;
 		} else {		
 			// Create another row if we're too far over:
-			if(parent.minWins.nextLeft> parent.clientWidth -newW){
+			if( (parent.minWins.nextLeft> parent.clientWidth -newW)
+					|| !parent.minWins.nextTopPct
+				){
 				++parent.minWins.nRows ;
 				parent.minWins.nextLeft = 1 ; //+parent.minsRows*5 ;			
-			}
 			
-			// Find the height of the window as a percentage of
-			// the parent's:
-			var newHeightPct
-				= Math.round((100*this.titleBar.clientHeight)/parent.clientHeight);
-
-			// ...but make sure we don't interfere with other rows,
-			// by never decreasing that percentage:
-			if( (""+newHeightPct)!= "NaN"){
-				parent.minWins.titleBarHeightPct 
-					= Math.max(newHeightPct, parent.minWins.titleBarHeightPct );
+				// Find the height of the window as a percentage of
+				// the parent's:
+				var fNewHeightPct
+					= (100*this.titleBar.clientHeight)/parent.clientHeight ;
+	
+				// ...but make sure we don't interfere with other rows,
+				// by never decreasing that percentage:
+				if( (""+fNewHeightPct)!= "NaN"){
+					parent.minWins.titleBarHeightPct 
+						= Math.max(fNewHeightPct, parent.minWins.titleBarHeightPct );
+				}
+				// ...within reason:
+				parent.minWins.titleBarHeightPct
+					=Math.min(7,parent.minWins.titleBarHeightPct) ;
+	
+				parent.minWins.nextTopPct
+						= (99 - 
+							(parent.minWins.titleBarHeightPct*parent.minWins.nRows)
+								) ;
+				parent.minWins.nextTopPct								
+					= Math.round(parent.minWins.nextTopPct) ;								
 			}
-
-//alert("parent.minWins.titleBarHeightPct"+parent.minWins.titleBarHeightPct
-//			+"parent.minWins.nRows"+parent.minWins.nRows);
-
-			this.domNode.style.top 
-				= (99 - 
-					(parent.minWins.titleBarHeightPct*parent.minWins.nRows)
-						)+"%" ;
+			this.domNode.style.top = parent.minWins.nextTopPct +"%" ;
 			this.domNode.style.left = parent.minWins.nextLeft+"px" ;
 			
+			
 			parent.minWins.slots[this.widgetId] 
-				= {top:this.domNode.style.top,
+				= {top:parent.minWins.nextTopPct +"%" ,
 					left:parent.minWins.nextLeft
 					} ;
 						
@@ -166,7 +173,7 @@
 	
 	},
 	
-	restoreWindow:function(evt){	
+	restoreWindow:function(evt){
 		this.containerNode.style.visibility = "visible" ;	
 		if (evt && xap.util.Event.getPreventDefault(evt)){
 			return;
@@ -182,6 +189,17 @@
 		this.minimizeAction.style.display=this.displayMinimizeAction ? "" : "none";
 	
 	},
+	minimizedWindowWidth:function(){
+		var wI=0 ;
+		for(var action in  this.windowActions ){
+			wI = this[action].offsetWidth ;
+			if(wI>0){
+				break ;
+			}		
+		}	
+		wI=Math.max(4,wI);
+		return wI*8 ;			
+	},
 	
 	maximizeWindow:function(evt){
 		this.containerNode.style.visibility = "visible" ;
@@ -368,15 +386,25 @@
 		}
 	},
 	setTitle:function(val){
-		this.titleBarText.innerHTML = val ;
-		this.resetTitleTextBox() ;	
+		if( !val){
+			this.setTitle(this.title) ;
+			return ;
+		}
+		this.titleBarText.innerHTML=val ;
+		this.resetTitleTextBox() ;		
+		this.title = val ;
 	},
-	resetTitleTextBox:function(oneLineHeight){	
+	resetTitleTextBox:function(oneLineBoxHeight){
 		this.titleBar.style.overflow="hidden" ;
-		this.titleBarText.style.overflow="hidden" ;	
+		this.titleBar.style.verticalAlign="middle" ;		
+		this.titleBarText.style.verticalAlign="middle" ;
+		this.titleBarText.style.overflow="hidden" ;			
+//For debugging:		this.titleBarText.style.backgroundColor = "black" ;
 		var titleWidthPx = this.titleBar.offsetWidth ;
 		var maxTextWidthPx = this.titleBar.offsetWidth ;
-		var iconWidth = false ;
+		// look at the css file
+		//...but to be sure:
+		var iconWidth = 11 ;
 		for(var action in  this.windowActions ){
 			var w = this[action].offsetWidth ;		
 			if(w){
@@ -392,8 +420,15 @@
 		}
 		maxTextWidthPx = Math.max(maxTextWidthPx,0) ;
 		this.titleBarText.style.width= maxTextWidthPx+"px";
-		if(oneLineHeight){
-			this.titleBarText.style.height= oneLineHeight+"px";		
+		// This height-setting is necessitated by		
+		// a bug[?] under IE that echoes the last ~2.2
+		// chars on another line below the titleText div,
+		// which expands the titlebar text---only happens 
+		// under IE6:
+		// TODO: avoid the echoing in the first place:
+		if(navigator.appVersion.indexOf("MSIE 6")>-1){
+			this.titleBar.style.height= (w+4) + "px";							
+			this.titleBarText.style.height = this.titleBar.offsetHeight + "px" ;
 		}
 	}	
 });