Pman.Gnumeric.js
[Pman.Core] / Pman.Gnumeric.js
index 61486cf..223933f 100644 (file)
@@ -327,7 +327,6 @@ Roo.extend(Pman.Gnumeric, Roo.util.Observable, {
                }
            }
             
-            
         });
         // read colinfo..
         var ci = this.sheet.getElementsByTagNameNS('*','ColInfo');
@@ -699,9 +698,6 @@ Roo.extend(Pman.Gnumeric, Roo.util.Observable, {
     {
         
         data = data || this.data;
-        
-        Roo.log(data);
-        
         for (var r = 0; r < this.rmax;r++) {
             if (typeof(this.grid[r]) == 'undefined') {
                 continue;
@@ -714,7 +710,7 @@ Roo.extend(Pman.Gnumeric, Roo.util.Observable, {
                         || !this.grid[r][c].value.match(/\{/)) {
                     continue;
                 }
-                Roo.log(this.grid[r][c].value);
+                
                 var x = new Roo.Template({ html: this.grid[r][c].value });
                 try {
                     var res = x.applyTemplate(data);
@@ -837,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;
@@ -1142,7 +1137,7 @@ Roo.extend(Pman.Gnumeric, Roo.util.Observable, {
      */
     
     
-    writeImage : function (row, col, data, width, height) 
+    writeImage : function (row, col, data, width, height, type
     {
         
         if (!data) {
@@ -1190,7 +1185,6 @@ Roo.extend(Pman.Gnumeric, Roo.util.Observable, {
                 break;
             }
         }
-       
         
         soi.setAttribute('ObjectBound',
             //gnumeric_colRowToName(row,col) + ':' + gnumeric_colRowToName(row+1,col+1));
@@ -1203,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');
@@ -1213,19 +1207,105 @@ Roo.extend(Pman.Gnumeric, Roo.util.Observable, {
         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','jpeg');
-        //alert(imgsrc);
-        
-        content.setAttribute('size-bytes',data.length);
-        content.textContent = data;
+        content.setAttribute('image-type', type ? type : 'jpeg');
+        content.setAttribute('name', name);
         soi.appendChild(content);
         objs.appendChild(soi);
+        
+        var godoc = this.doc.getElementsByTagNameNS('*','GODoc')[0];
+        
+        var goimage = this.doc.createElement('GOImage');
+        goimage.setAttribute('image-type', type ? type : 'jpeg');
+        goimage.setAttribute('name', name);
+        goimage.setAttribute('type', 'GOPixbuf');
+        goimage.setAttribute('width', width);
+        goimage.setAttribute('height', height);
+        goimage.textContent = data;
+        
+        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>
 
     },
+    
+    writeFixedImage : function (startCol, startRow, endCol, endRow, type, data, width, height) 
+    {
+        if (!data) {
+            throw "write Image called with missing data";
+        }
+        
+        startCol = startCol * 1;
+        startRow = startRow * 1;
+        endCol = endCol * 1;
+        endRow = endRow * 1;
+        width = width * 1;
+        height = height * 1;
+        
+        var objs = this.sheet.getElementsByTagNameNS('*','Objects')[0];
+        var soi = this.doc.createElementNS('http://www.gnumeric.org/v10.dtd', 'gnm:SheetObjectImage');
+        
+        soi.setAttribute('ObjectBound',this.RCtoCell(startRow, startCol) + ':' + this.RCtoCell(endRow, endCol));
+        
+        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');
+        
+        var name = 'Image' + Math.random().toString(36).substring(2);
+        var content = this.doc.createElement('Content');
+        content.setAttribute('image-type', type ? type : 'jpeg');
+        content.setAttribute('name', name);
+        soi.appendChild(content);
+        objs.appendChild(soi);
+        
+        var godoc = this.doc.getElementsByTagNameNS('*','GODoc')[0];
+        
+        var goimage = this.doc.createElement('GOImage');
+        goimage.setAttribute('image-type', type ? type : 'jpeg');
+        goimage.setAttribute('name', name);
+        goimage.setAttribute('type', 'GOPixbuf');
+        goimage.setAttribute('width', width);
+        goimage.setAttribute('height', height);
+        goimage.textContent = data;
+        
+        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;
+    },
  
     /**
      * mergeRegion:
@@ -1345,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);
@@ -1415,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;' +