Pman.Gnumeric.js
[Pman.Core] / Pman.Gnumeric.js
index 3055d5b..8ddf636 100644 (file)
@@ -380,7 +380,9 @@ Roo.extend(Pman.Gnumeric, Roo.util.Observable, {
                    continue;
                 }
                 for (var c = s.c; c < s.c1;c++) {
-                    if (c > _t.cmax) continue;
+                    if (c > _t.cmax) {
+                        continue;
+                    }
     
                     if (typeof(_t.grid[r][c]) == 'undefined') {
                         _t.createCell(r,c);
@@ -391,7 +393,9 @@ Roo.extend(Pman.Gnumeric, Roo.util.Observable, {
                         g.cls = [];
                         g.styles = [];
                     }
-                    if (g.cls.indexOf(s.name)  > -1) continue;
+                    if (g.cls.indexOf(s.name)  > -1) {
+                       continue;
+                    }
                     g.cls.push(s.name);
                     g.styles.push(s.dom);
                     
@@ -421,23 +425,23 @@ Roo.extend(Pman.Gnumeric, Roo.util.Observable, {
             },
             Fore : function(ent,v) { 
                 var col=[];
-                Roo.each(v.split(':'), function(c) { col.push(Math.round(parseInt(c,16)/256)); })
+                Roo.each(v.split(':'), function(c) { col.push(Math.round(parseInt(c,16)/256)); });
                 ent['color'] = 'rgb(' + col.join(',') + ')';
             },
             Back : function(ent,v) { 
                 var col=[];
-                Roo.each(v.split(':'), function(c) { col.push(Math.round(parseInt(c,16)/256)); })
+                Roo.each(v.split(':'), function(c) { col.push(Math.round(parseInt(c,16)/256)); });
                 ent['background-color'] = 'rgb(' + col.join(',') + ')';
             },
             FontUnit : function(ent,v) { 
                 ent['font-size'] = v + 'px';
             },
             FontBold : function(ent,v) { 
-                if (v*1 < 1) return;
+                if (v*1 < 1) { return; }
                 ent['font-weight'] = 'bold';
             },
             FontItalic : function(ent,v) { 
-                if (v*0 < 1) return;
+                if (v*0 < 1) { return; }
                 //ent['font-weight'] = 'bold';
             },
             FontName : function(ent,v) { 
@@ -451,10 +455,10 @@ Roo.extend(Pman.Gnumeric, Roo.util.Observable, {
             BorderColor : function(ent,v) { 
                 var vv  = v.split('-');
                 var col=[];
-                Roo.each(vv[1].split(':'), function(c) { col.push(Math.round(parseInt(c,16)/256)); })
+                Roo.each(vv[1].split(':'), function(c) { col.push(Math.round(parseInt(c,16)/256)); });
                 ent['border-'+vv[0]+'-color'] = 'rgb(' + col.join(',') + ')';
             }
-        }
+        };
         function add(e, k, v) {
             //Roo.log(k,v);
             e.gstyle[k] = v;
@@ -696,7 +700,9 @@ Roo.extend(Pman.Gnumeric, Roo.util.Observable, {
         
         data = data || this.data;
         for (var r = 0; r < this.rmax;r++) {
-            if (typeof(this.grid[r]) == 'undefined') continue;
+            if (typeof(this.grid[r]) == 'undefined') {
+                continue;
+            }
             for (var c = 0; c < this.cmax;c++) {  
                 if (typeof(this.grid[r][c]) == 'undefined') {
                     continue;
@@ -982,7 +988,7 @@ Roo.extend(Pman.Gnumeric, Roo.util.Observable, {
                  
             }
             
-        }
+        };
        
         var ent = {
                 HAlign:"1",
@@ -1025,14 +1031,18 @@ Roo.extend(Pman.Gnumeric, Roo.util.Observable, {
                 ent['Unit'] = v.replace(/px/, '');
             },
             'font-weight' : function(ent,v) { 
-                if (v != 'bold') return;
+                if (v != 'bold') {
+                   return;
+                }
                 ent['Bold'] = 1;
             },
             'font-style' : function(ent,v) { 
-                if (v != 'italic') return;
+                if (v != 'italic') {
+                    return;
+                }
                 ent['Italic'] = 1;
             } 
-        }
+        };
        
         var fent = {
             Unit:"10",
@@ -1129,9 +1139,12 @@ Roo.extend(Pman.Gnumeric, Roo.util.Observable, {
      */
     
     
-    writeImage : function (row, col, data, width, height) 
+    writeImage : function (row, col, data, width, height, type
     {
         
+        if (!data) {
+            throw "write Image called with missing data";
+        }
         // our default height width is 50/50 ?!
         //console.log('w='+width+',height='+height);
                 //        <gmr:Objects>
@@ -1174,7 +1187,6 @@ Roo.extend(Pman.Gnumeric, Roo.util.Observable, {
                 break;
             }
         }
-       
         
         soi.setAttribute('ObjectBound',
             //gnumeric_colRowToName(row,col) + ':' + gnumeric_colRowToName(row+1,col+1));
@@ -1197,14 +1209,122 @@ 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('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);
+        
+        return true;
+                //< /gnm:SheetObjectImage>
+                // < /gnm:Objects>
+
+    },
+    
+    writeFixedImage : function (startRow, startCol, endRow, endCol data, width, height, type) 
+    {
+        
+        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..
+        
+        // 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 ww2 = 1 - ((colwidth - width) / this.colInfo[endcol]);
+        var hh2 = 0.99;
         
-        content.setAttribute('size-bytes',data.length);
-        content.textContent = data;
+        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');
+        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');
+        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);
+        
         return true;
                 //< /gnm:SheetObjectImage>
                 // < /gnm:Objects>
@@ -1378,7 +1498,9 @@ Roo.extend(Pman.Gnumeric, Roo.util.Observable, {
                 }
                 var g = grid[r][c];
                 
-                if (typeof(g.cls) =='undefined') g.cls = [];
+                if (typeof(g.cls) =='undefined') {
+                    g.cls = [];
+                }
                 var w= calcWidth(c,g.colspan);
                 
                 var value = g.value[0] == '=' ? 'CALCULATED' : g.value;