SpreadJS 13
GC.Spread.Sheets.CellTypes Namespace / Base class / Base Constructor
In This Topic
    Base Constructor
    In This Topic
    Represents the base class for the other cell type classes.
    Syntax
    var instance = new GC.Spread.Sheets.CellTypes.Base();
    function Base() : Base;
    Example
    This example creates a custom celltype.
    //Custom Cell Type
              function FivePointedStarCellType() {
                  this.fillStyle = "orange";
                  this.size = 10;
              }
              FivePointedStarCellType.prototype = new GC.Spread.Sheets.CellTypes.Base();
              FivePointedStarCellType.prototype.paint = function (ctx, value, x, y, w, h, style, context) {
                  if (!ctx) {
                      return;
                  }
    
                ctx.save();
    
                // draw inside the cell's boundary
                  ctx.rect(x, y, w, h);
                  ctx.clip();
                  ctx.beginPath();
    
                if (value) {
                      ctx.fillStyle = this.fillStyle;
                  } else {
                      ctx.fillStyle = "gray";
                  }
    
                var size = this.size;
                  var dx = x + w / 2;
                  var dy = y + h / 2;
                  ctx.beginPath();
                  var dig = Math.PI / 5 * 4;
                  for (var i = 0; i < 5; i++) {
                      ctx.lineTo(dx + Math.sin(i * dig) * size, dy + Math.cos(i * dig) * size);
                  }
                  ctx.closePath();
                  ctx.fill();
    
                ctx.restore();
              };
              FivePointedStarCellType.prototype.getHitInfo = function (x, y, cellStyle, cellRect, context) {
                  var xm = cellRect.x + cellRect.width / 2,
                          ym = cellRect.y + cellRect.height / 2,
                          size = 10;
                  var info = { x: x, y: y, row: context.row, col: context.col, cellRect: cellRect, sheetArea: context.sheetArea };
                  if (xm - size <= x && x <= xm + size && ym - size <= y && y <= ym + size) {
                      info.isReservedLocation = true;
                  }
                  return info;
              };
              FivePointedStarCellType.prototype.processMouseUp = function (hitInfo) {
                  var sheet = hitInfo.sheet;
                  if (sheet && hitInfo.isReservedLocation) {
                      var row = hitInfo.row, col = hitInfo.col, sheetArea = hitInfo.sheetArea;
                      var newValue = !sheet.getValue(row, col, sheetArea);
                      var cellEditInfo = { row: row, col: col, newValue: newValue };
             spread.commandManager().execute({cmd: "editCell", sheetName: activeSheet.name(), row: row, col: col, newValue: newValue});
                      return true;
                  }
                  return false;
              };
    
            function FullNameCellType() {
              }
              FullNameCellType.prototype = new GC.Spread.Sheets.CellTypes.Base();
              FullNameCellType.prototype.paint = function (ctx, value, x, y, w, h, style, context) {
                  if (value) {
                      GC.Spread.Sheets.CellTypes.Base.prototype.paint.apply(this, [ctx, value.firstName + "." + value.lastName, x, y, w, h, style, context]);
                  }
              };
              FullNameCellType.prototype.updateEditor = function (editorContext, cellStyle, cellRect, context) {
                  if (editorContext) {
                      $(editorContext).width(cellRect.width);
                      $(editorContext).height(100);
                  }
              };
              FullNameCellType.prototype.createEditorElement = function (context) {
                  var div = document.createElement("div");
                  var $div = $(div);
                  $div.attr("gcUIElement", "gcEditingInput");
                  $div.css("background-color", "white");
                  $div.css("position", "absolute");
                  $div.css("overflow", "hidden");
                  $div.css("border", "2px #5292f7 solid");
                  var $span1 = $("<span></span>");
                  $span1.css("display", "block");
                  var $span2 = $("<span></span>");
                  $span2.css("display", "block");
                  var $input1 = $("<input type='text'/>");
                  var $input2 = $("<input type='text'/>");
                  $div.append($span1);
                  $div.append($input1);
                  $div.append($span2);
                  $div.append($input2);
                  return div;
              };
              FullNameCellType.prototype.getEditorValue = function (editorContext) {
                  if (editorContext && editorContext.children.length === 4) {
                      var input1 = editorContext.children[1];
                      var firstName = $(input1).val();
                      var input2 = editorContext.children[3];
                      var lastName = $(input2).val();
                      return { firstName: firstName, lastName: lastName };
                  }
              };
              FullNameCellType.prototype.setEditorValue = function (editorContext, value) {
                  if (editorContext && editorContext.children.length === 4) {
                      var span1 = editorContext.children[0];
                      $(span1).text("First Name:");
                      var span2 = editorContext.children[2];
                      $(span2).text("Last Name:");
                      if (value) {
                          var input1 = editorContext.children[1];
                          $(input1).val(value.firstName);
                          var input2 = editorContext.children[3];
                          $(input2).val(value.lastName);
                      }
                  }
              };
              FullNameCellType.prototype.isReservedKey = function (e, context) {
                  //cell type handle tab key by itself
                  return (e.keyCode === GC.Spread.Commands.Key.tab && !e.ctrlKey && !e.shiftKey && !e.altKey);
              };
              FullNameCellType.prototype.isEditingValueChanged = function (oldValue, newValue,context) {
                  if (newValue.firstName != oldValue.firstName || newValue.lastName != oldValue.lastName) {
                      return true;
                  }
                  return false;
              };
              $(function () {
    
    var spread = new GC.Spread.Sheets.Workbook(document.getElementById("ss"),{sheetCount:3});
                  var sheet = spread.getActiveSheet();
                  sheet.suspendPaint();
                  sheet.setCellType(0, 0, new FivePointedStarCellType());
                  sheet.setValue(0, 0, true);
                  sheet.setRowHeight(0, 200);
                  sheet.setColumnWidth(0, 200);
                  sheet.setCellType(0, 1, new FullNameCellType());
                  sheet.setColumnWidth(1, 200);
                  sheet.setValue(0, 1, { firstName: "Bob", lastName: "Smith" });
                  sheet.resumePaint();
              });
    See Also

    Reference

    Base class