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/05/18 05:46:08 UTC
svn commit: r539267 -
/incubator/xap/trunk/codebase/src/xap/widgets/dojo/TreeTable.js
Author: mturyn
Date: Thu May 17 22:46:07 2007
New Revision: 539267
URL: http://svn.apache.org/viewvc?view=rev&rev=539267
Log:
Extending last column in better shape, but table width clipping is off in IE when table domNode width exceeds table body width.
Modified:
incubator/xap/trunk/codebase/src/xap/widgets/dojo/TreeTable.js
Modified: incubator/xap/trunk/codebase/src/xap/widgets/dojo/TreeTable.js
URL: http://svn.apache.org/viewvc/incubator/xap/trunk/codebase/src/xap/widgets/dojo/TreeTable.js?view=diff&rev=539267&r1=539266&r2=539267
==============================================================================
--- incubator/xap/trunk/codebase/src/xap/widgets/dojo/TreeTable.js (original)
+++ incubator/xap/trunk/codebase/src/xap/widgets/dojo/TreeTable.js Thu May 17 22:46:07 2007
@@ -65,7 +65,7 @@
this._initialResizePending = true;
// width of each column sizer, in pixels:
- this._sizerWidth = 8 ;
+ this._sizerWidth = 6 ;
};
@@ -729,23 +729,43 @@
},
extendLastColumn: function(changeInPixels){ //debug::this.loggit('extendLastColumn') ;
+
+ // Since their layout is fixed, this will mean that
+ // the tables in question will end up as wide as their
+ // columns (or first row cells, under IE) and borders
+ // will need. If we don't do this, space ends up getting
+ // added to or subtracted from (it seems) the first cell,
+ // which ends up with a width of "100%":
+ this.headerTable.style.width = "auto" ;
+ this.table.style.width = "auto" ;
+
+
var headerChildren = this.headerRow.childNodes ;
var len = headerChildren.length ;
+ var lastIdx = len - 1 ;
if(len > 0){
var newWidth = dojo.html.getMarginBox(headerChildren[len-1]).width ;
newWidth += changeInPixels ;
- headerChildren[len-1].style.width = newWidth+"px";
+ headerChildren[lastIdx].style.width = newWidth+"px";
var sizer = this.columnsSizer ;
// Put all the extra space in the last column:
- sizer.children[len-1].sizeShare = newWidth ;
- sizer.children[len-1].sizeActual = newWidth ;
- this._columns[len-1]._explicitColumnWidth
+ sizer.children[lastIdx].sizeShare = newWidth ;
+ sizer.children[lastIdx].sizeActual = newWidth ;
+ this._columns[lastIdx]._explicitColumnWidth
= newWidth + "px" ;
}
- // We're now in much the same situation as at a drag end:
- // we need to resize headers and body cells according to the
- // new columns:
- this._reconcileHeaderAndBodyColumns() ;
+ // Match headers to body columns:
+ this._fixColumnWidths(lastIdx,lastIdx) ;
+
+ // Fix these widths (in the sense of "set them");
+ // leaving them free seems to hurt scrolling:
+ this.headerTable.style.width
+ = this.headerTable.scrollWidth +"px" ;
+ this.table.style.width
+ = this.headerTable.scrollWidth +"px" ;
+
+ this._renewColumnSizers();
+
},
@@ -1077,7 +1097,7 @@
_sizeSplitterContainer: function(){ //debug::this.loggit('_sizeSplitterContainer') ;
var box = {} ;
- box.width = this.domNode.clientWidth
+ box.width = Math.max(this.domNode.scrollWidth,this.table.scrollWidth) ;
box.height = this.scrollDiv.clientHeight
+ this.headerTable.clientHeight - 2 ;
@@ -1142,6 +1162,7 @@
this._sizeSplitterContainer() ;
+
// Get a more accurate result with
// a splitter width of 1px; make wider
// at rest...
@@ -1217,6 +1238,10 @@
_applyBasicSizerStyling: function(){
+//debug var rainbow=["red","orange","yellow","green",
+// "blue","indigo","violet"
+// ] ;
+
for( var idx = 0; idx < this.columnsSizer.sizers.length; ++idx){
var aSizer = this.columnsSizer.sizers[idx] ;
/*debug*/ aSizer.id = this.domNode.id + "_sizer_"+idx ;
@@ -1238,7 +1263,7 @@
// splitter container desendent:
aSizer.style.visibility="visible" ;
-// /*debug:*/ aSizer.style.backgroundColor = "darkcyan" ;
+ // /*debug:*/ aSizer.style.backgroundColor = rainbow[idx] ;
if( dojo.render.html.ie ){
aSizer.style.filter = "alpha(opacity=0)" ;
@@ -1294,7 +1319,7 @@
var remainingWidthPx
= this.columnsSizer.paneWidth ;
-
+
for(var ii=0; ii<sizerPanes.length; ++ii){
var sizerPane = sizerPanes[ii] ;
@@ -1304,7 +1329,7 @@
sizerPane.sizeShare = w ;
sizerPane.sizeActual = w ;
sizerPane.domNode.style.width = (w)+"px" ;
- remainingWidthPx -= w ;
+ remainingWidthPx -= w ;
} else {
// this is the extra pane on the right
sizerPane.sizeShare = remainingWidthPx ;
@@ -1401,7 +1426,9 @@
= (child.offsetLeft
- Math.floor(w/2)
) + "px" ;
- }
+ }
+
+
sizer.virtualSizer.style.visibility = "visible" ;
},
@@ -1462,9 +1489,9 @@
delete this._lastTableRightPx ;
delete this._grabbedSizerIndex ;
delete this._grabbedTheLastSizer ;
- this.headerTable.style.width = currentTableRightPx +"px" ;
- this.table.style.width = this.headerTable.style.width ;
+
this.extendLastColumn(deltaTableRightPx) ;
+
return ;
}
// else---all other sizers: