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/24 07:50:23 UTC

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

Author: mturyn
Date: Tue Jan 23 23:50:22 2007
New Revision: 499297

URL: http://svn.apache.org/viewvc?view=rev&rev=499297
Log:
http://issues.apache.org/jira/browse/XAP-58
Gave window minimum height/width, styled the resize bar a bit better to set it off from the container.

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

Modified: incubator/xap/trunk/codebase/src/xap/widgets/dojo/Window.js
URL: http://svn.apache.org/viewvc/incubator/xap/trunk/codebase/src/xap/widgets/dojo/Window.js?view=diff&rev=499297&r1=499296&r2=499297
==============================================================================
--- incubator/xap/trunk/codebase/src/xap/widgets/dojo/Window.js (original)
+++ incubator/xap/trunk/codebase/src/xap/widgets/dojo/Window.js Tue Jan 23 23:50:22 2007
@@ -46,18 +46,24 @@
 	postCreate: function(){
 		xap.widgets.dojo.Window.superclass.postCreate.call(this);	
 		this.aquireResizeHandleObject() ;
-		this.minHeightPx = this.titleBar.clientHeight
-								+ this.resizeBar.clientHeight ;
+		this.resizeBar.style.padding="2px" ;
+		this.resizeBar.style.borderTop="2px ridge silver" ;
+		this.resizeBar.style.borderBottom="2px ridge silver" ;	
+		this.resizeBar.style.borderLeft="1px ridge silver" ;	
+		this.resizeBar.style.borderRight="1px ridge silver" ;						
+
+		
 
 		// Keep icons from leaving trails over the extending title bar:
 		dojo.event.connectBefore(this,"resizeTo",this,"redisplayTitlebarIcons");
 		dojo.event.connect(this,"onResized",this,"showTitleBarIcons");	
 
 		// Paranoically sure let us be that the icons are redisplayed:		
-		dojo.event.connect(this.resizeBar._resizeHandle,"endSizing",this,"showTitleBarIcons");		
+		dojo.event.connect(this.resizeBar._resizeHandle,"endSizing",this,"endResizing");		
 		
 		// Fix the title text DIV's width:
-		this.resetTitleTextBox() ;	
+		this.resetTitleTextBox() ;
+			
 	},
 	
 	minimizeWindow:function(evt) {
@@ -70,19 +76,13 @@
 		if( this.windowState != "maximized" ){
 			this.setPrevious() ;
 		}
-
-
-
-
 		
 		this.resizeBar.style.visibility="hidden" ;
 
 
+		// Show just the top bar, narrowed to (say) 8 icons' worth:
 
-
-		// Show just the top bar, narrowed to 8 icons' worth:
-
-		var newW = this.minimizedWindowWidth() ;
+		var newW = this.minimizedWindowWidthPx() ;
 
 		var newH = dojo.style.getOuterHeight(this.titleBar); // + dojo.style.getOuterHeight(this.resizeBar);
 	
@@ -112,7 +112,7 @@
 			// nowhere to minimise to:
 			return ;
 		}
-		var newW = this.minimizedWindowWidth() ;
+		var newW = this.minimizedWindowWidthPx() ;
 		// Arrange window next to previous minimised window:
 		if(!parent.minWins){
 			parent.minWins = {} ;
@@ -178,29 +178,48 @@
 		if (evt && xap.util.Event.getPreventDefault(evt)){
 			return;
 		}
-
 		this.resizeBar.style.visibility="visible" ;
 		
-		this.minHeightPx = Math.max(this.minHeightPx,
-								this.titleBar.clientHeight
-								+ this.resizeBar.clientHeight) ;		
-		xap.widgets.dojo.Window.superclass.restoreWindow.call(this,evt);
+		var event = evt ;
+		if(!evt){
+			event = {} ;
+		}
+
+		xap.widgets.dojo.Window.superclass.restoreWindow.call(this,event);
 		
 		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 ;
-			}		
+	
+	getIconWidth:function(){
+		if( !this._iconWidth ){
+			for(var action in  this.windowActions ){
+				this._iconWidth = this[action].offsetWidth ;
+				if(this._iconWidth>0){
+					break ;
+				}		
+			}	
+			// Got value from the dojo style sheet;
+			// should probably just figure out how
+			// to do that algorithmically:
+			this._iconWidth=Math.max(20,this._iconWidth);
 		}	
-		wI=Math.max(4,wI);
-		return wI*8 ;			
+		return this._iconWidth ;
+	},
+	
+	
+	minimizedWindowWidthPx:function(){
+
+		return this.getIconWidth()*8 ;			
 	},
 	
+	// resizeBar height seems to be underestimated:
+	minimizedWindowHeightPx: function(){
+		return this.getIconWidth()*4 ;
+	},	
+	
+	
+	
 	maximizeWindow:function(evt){
 		this.containerNode.style.visibility = "visible" ;
 		if (evt && xap.util.Event.getPreventDefault(evt)){
@@ -230,6 +249,13 @@
 	// copied from Floating Pane
 	// This is called when the user adjusts the size of the floating pane
 	resizeTo: function(w, h){
+		// About 5 icons' width
+		w = Math.max(5*this.getIconWidth(),Math.max(this.minimizedWindowWidthPx(),w)) ;
+		h = Math.max(2*this.getIconWidth(),Math.max(this.minimizedWindowHeightPx(),h)) ;
+		
+//		w = Math.max(100,w) ;
+//		h = Math.max(30,h) ;		
+	
 		// call the superclass resizeTo
 		xap.widgets.dojo.Window.superclass.resizeTo.call(this,w,h);
 		
@@ -264,6 +290,9 @@
 			bottom: this.domNode.style.bottom,
 			right: this.domNode.style.right
 		};	
+		
+			
+		
 	},
 	
 	enableResizeHandle: function(){
@@ -336,6 +365,11 @@
 		}
 	},
 	
+	endResizing: function(){
+		//this.resizeTo(this.domNode.clientWidth,this.domNode.clientHeight) ;
+		this.showTitleBarIcons() ;
+	},
+	
 	setVisible: function(bVisible){
 	
 		var sAttr = (bVisible)?"visible":"hidden" ;
@@ -362,11 +396,11 @@
 			// Do nothing now, but prepare for next
 			// time this window is in a "normal"
 			// state:
-			this.previous.height = val ;			
+			this.previous.height = Math.max(val,this.minimizedWindowHeightPx()+"px") ;			
 		} else {
 			// get value in pixels by resizing dom node first:
 			this.domNode.style.height = val ;
-			this.resizeTo(this.domNode.clientWidth,Math.max(this.domNode.clientHeight,this.minHeightPx)) ;	
+			this.resizeTo(this.domNode.clientWidth,Math.max(this.domNode.clientHeight,this.minimizedWindowHeightPx())) ;	
 			this.resizeWindow() ;
 		}
 	},
@@ -378,7 +412,7 @@
 			// Do nothing now, but prepare for next
 			// time this window is in a "normal"
 			// state:
-			this.previous.width = val ;			
+			this.previous.width = Math.max(val,this.minimizedWindowWidthPx()+"px")  ;			
 		} else {	
 			this.domNode.style.width = val ;
 			this.resizeTo(this.domNode.clientWidth,this.domNode.clientHeight) ;		
@@ -402,9 +436,11 @@
 //For debugging:		this.titleBarText.style.backgroundColor = "black" ;
 		var titleWidthPx = this.titleBar.offsetWidth ;
 		var maxTextWidthPx = this.titleBar.offsetWidth ;
+		var iconWidth = this.getIconWidth()
+				
 		// look at the css file
 		//...but to be sure:
-		var iconWidth = 11 ;
+		//var iconWidth = 11 ;
 		for(var action in  this.windowActions ){
 			var w = this[action].offsetWidth ;		
 			if(w){
@@ -414,6 +450,8 @@
 				}
 			}
 		}
+		
+		
 		if(iconWidth){
 			// Fudge--if this is too wide, makes title bar multi-line:
 			maxTextWidthPx -= Math.round(iconWidth/2) ;