Pman.Gnumeric.js
[Pman.Core] / Pman.Gnumeric.js
index 1dba187..223933f 100644 (file)
@@ -327,7 +327,6 @@ Roo.extend(Pman.Gnumeric, Roo.util.Observable, {
                }
            }
             
-            
         });
         // read colinfo..
         var ci = this.sheet.getElementsByTagNameNS('*','ColInfo');
@@ -834,14 +833,13 @@ Roo.extend(Pman.Gnumeric, Roo.util.Observable, {
                 this.setRowHeight( row + yoff +1, Roo.get(rows[row]).getHeight());
             }
             
-         
             var cols = rows[row].getElementsByTagName('td');
             
-            
             for(var col=0;col < cols.length; col++) {
                 
-                
-               
+                if (cols[col].getAttribute('xls:width')) {
+                    this.setColumnWidth(col, 1 * cols[col].getAttribute('xls:width'));
+                }
                 
                 var colspan = cols[col].getAttribute('colspan');
                 colspan  = colspan ? colspan *1 : 1;
@@ -1199,7 +1197,7 @@ Roo.extend(Pman.Gnumeric, Roo.util.Observable, {
         var hh2 = 0.99;
         
         var offset_str = ww + ' '  + hh + ' ' + ww2 + ' '+hh2;
-        //console.log(offset_str );
+        
         //alert(offset_str);
         soi.setAttribute('ObjectOffset', offset_str);
         soi.setAttribute('ObjectAnchorType','16 16 16 16');
@@ -1229,6 +1227,19 @@ Roo.extend(Pman.Gnumeric, Roo.util.Observable, {
         
         godoc.appendChild(goimage);
         
+        if (typeof(this.grid[row]) == 'undefined') {
+            this.grid[row] = [];
+        }
+        if (typeof(this.grid[row][col]) == 'undefined') {
+            this.createCell(row,col);
+        }
+        
+        this.grid[row][col].value=  data;
+        this.grid[row][col].valueFormat = 'image';
+        this.grid[row][col].imageType = type;
+        this.grid[row][col].width = width;
+        this.grid[row][col].height = height;
+        
         return true;
                 //< /gnm:SheetObjectImage>
                 // < /gnm:Objects>
@@ -1237,75 +1248,30 @@ Roo.extend(Pman.Gnumeric, Roo.util.Observable, {
     
     writeFixedImage : function (startCol, startRow, endCol, endRow, type, data, width, height) 
     {
-        
         if (!data) {
             throw "write Image called with missing data";
         }
-        // our default height width is 50/50 ?!
-        //console.log('w='+width+',height='+height);
-                //        <gmr:Objects>
-        row*=1;
-        col*=1;
-        height*=1;
-        width*=1;
-        var objs = this.sheet.getElementsByTagNameNS('*','Objects')[0];
-        var soi = this.doc.createElementNS('http://www.gnumeric.org/v10.dtd', 'gnm:SheetObjectImage');
         
-        //<gmr:SheetObjectImage 
-        //      ObjectBound="A3:J8" 
-        //      ObjectOffset="0.375 0.882 0.391 0.294" 
-        //      ObjectAnchorType="16 16 16 16" 
-        //      Direction="17" 
-        //      crop-top="0.000000" 
-        //      crop-bottom="0.000000" 
-        //      crop-left="0.000000" 
-        //      crop-right="0.000000">
-                
-                
-        //alert(gnumeric_colRowToName(row,col));
-               
-        // this is where we really have fun!!!... 
-        // since our design currently assumes the height is enough to fit
-        // stuff in, we only really need to work out how wide it has to be..
+        startCol = startCol * 1;
+        startRow = startRow * 1;
+        endCol = endCol * 1;
+        endRow = endRow * 1;
+        width = width * 1;
+        height = height * 1;
         
-        // note we should probably use centralized calcs if it fits in the first cell!
-        
-        // step 1 - work out how many columns it will span..
-        // lets hope the spreadsheet is big enought..
-        var colwidth = 0;
-        var endcol=col;
-        for ( endcol=col;endcol <100; endcol++) {
-            if (!this.colInfo[endcol]) {
-                this.colInfo[endcol] = 100; // eak fudge
-            }
-            colwidth += this.colInfo[endcol];
-            if (colwidth > width) {
-                break;
-            }
-        }
-        
-        soi.setAttribute('ObjectBound',
-            //gnumeric_colRowToName(row,col) + ':' + gnumeric_colRowToName(row+1,col+1));
-            this.RCtoCell(row,col) + ':' + this.RCtoCell(row,endcol));
-     
-        var ww = 0.01; // offset a bit...
-        var hh = 0.01; //
+        var objs = this.sheet.getElementsByTagNameNS('*','Objects')[0];
+        var soi = this.doc.createElementNS('http://www.gnumeric.org/v10.dtd', 'gnm:SheetObjectImage');
         
-        var ww2 = 1 - ((colwidth - width) / this.colInfo[endcol]);
-        var hh2 = 0.99;
+        soi.setAttribute('ObjectBound',this.RCtoCell(startRow, startCol) + ':' + this.RCtoCell(endRow, endCol));
         
-        var offset_str = ww + ' '  + hh + ' ' + ww2 + ' '+hh2;
-        //console.log(offset_str );
-        //alert(offset_str);
-        soi.setAttribute('ObjectOffset', offset_str);
+        soi.setAttribute('ObjectOffset', '0 0 0 0');
         soi.setAttribute('ObjectAnchorType','16 16 16 16');
         soi.setAttribute('Direction','17');
         soi.setAttribute('crop-top','0.000000');
         soi.setAttribute('crop-bottom','0.000000');
         soi.setAttribute('crop-left','0.000000');
         soi.setAttribute('crop-right','0.000000');
-                // <Content image-type="jpeg" size-bytes="3900">......  < / Content>
-                
+        
         var name = 'Image' + Math.random().toString(36).substring(2);
         var content = this.doc.createElement('Content');
         content.setAttribute('image-type', type ? type : 'jpeg');
@@ -1325,10 +1291,20 @@ Roo.extend(Pman.Gnumeric, Roo.util.Observable, {
         
         godoc.appendChild(goimage);
         
+        if (typeof(this.grid[startRow]) == 'undefined') {
+            this.grid[startRow] = [];
+        }
+        if (typeof(this.grid[startRow][startCol]) == 'undefined') {
+            this.createCell(startRow,startCol);
+        }
+        
+        this.grid[startRow][startCol].value=  data;
+        this.grid[startRow][startCol].valueFormat = 'image';
+        this.grid[startRow][startCol].imageType = type;
+        this.grid[startRow][startCol].width = width;
+        this.grid[startRow][startCol].height = height;
+        
         return true;
-                //< /gnm:SheetObjectImage>
-                // < /gnm:Objects>
-
     },
  
     /**
@@ -1449,7 +1425,7 @@ Roo.extend(Pman.Gnumeric, Roo.util.Observable, {
         column = column *1; 
         width= width*1;
         if (typeof(this.colInfoDom[column]) == 'undefined') {
-            var cols = this.doc.getElementsByTagNameNS('*','Cols')[0];
+            var cols = this.sheet.getElementsByTagNameNS('*','Cols')[0];
             var ri = this.doc.createElementNS('http://www.gnumeric.org/v10.dtd', 'gnm:ColInfo');
             ri.setAttribute('No', column);
             ri.setAttribute('Unit', width);
@@ -1519,6 +1495,23 @@ Roo.extend(Pman.Gnumeric, Roo.util.Observable, {
                     
                 }
                 
+                if(g.valueFormat == 'image') {
+                
+                    out+=String.format('<td colspan="{0}" rowspan="{1}"  class="{2}"><div style="{3}"><img src="data:image/{4};base64, {5}" width="{6}" height="{7}"></div></td>', 
+                        g.colspan, g.rowspan, g.cls.join(' '),
+                        'overflow:hidden;' + 
+                        'width:'+g.width+'px;' +
+
+                        'text-overflow:ellipsis;' +
+                        'white-space:nowrap;',
+                         g.imageType,
+                         value, g.width, g.height
+
+                    );
+                    c+=(g.colspan-1);
+                    continue;
+                }
+                
                 out+=String.format('<td colspan="{0}" rowspan="{1}"  class="{4}"><div style="{3}">{2}</div></td>', 
                     g.colspan, g.rowspan, value,
                     'overflow:hidden;' +