Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Feature/new builder methods #3834

Merged
merged 5 commits into from
Oct 6, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions cell/api.js
Original file line number Diff line number Diff line change
Expand Up @@ -5689,9 +5689,9 @@ var editor;
};

// Frozen pane
spreadsheet_api.prototype.asc_freezePane = function (type) {
spreadsheet_api.prototype.asc_freezePane = function (type, col, row) {
if (this.canEdit()) {
this.wb.getWorksheet().freezePane(type);
this.wb.getWorksheet().freezePane(type, col, row);
}
};

Expand Down
233 changes: 232 additions & 1 deletion cell/apiBuilder.js
Original file line number Diff line number Diff line change
Expand Up @@ -50,6 +50,7 @@
* @property {ApiWorksheet} ActiveSheet - Returns an object that represents the active sheet.
* @property {ApiRange} Selection - Returns an object that represents the selected range.
* @property {ApiComment[]} Comments - Returns an array of ApiComment objects.
* @property {FreezePaneType} FreezePanes - Returns or sets a freeze panes type.
*/
var Api = window["Asc"]["spreadsheet_api"];

Expand Down Expand Up @@ -82,6 +83,7 @@
* @property {boolean} PrintGridlines - Returns or sets the page PrintGridlines property.
* @property {Array} Defnames - Returns an array of the ApiName objects.
* @property {Array} Comments - Returns an array of the ApiComment objects.
* @property {ApiFreezePanes} FreezePanes - Returns a freeze Panes for a current worsheet.
*/
function ApiWorksheet(worksheet) {
this.worksheet = worksheet;
Expand Down Expand Up @@ -355,6 +357,14 @@
this._object = object;
}

/**
* Class representing a freeze Panes.
* @constructor
*/
function ApiFreezePanes(ws) {
this.ws = ws;
}

/**
* Returns a class formatted according to the instructions contained in the format expression.
* @memberof Api
Expand Down Expand Up @@ -897,6 +907,83 @@
}
});

/**
* Specifies freeze panes type.
* @typedef {("row" | "column" | "cell" | null )} FreezePaneType
*/

/**
* Sets freeze panes type.
* @memberof Api
* @typeofeditors ["CSE"]
* @param {FreezePaneType} FreezePaneType - The type of freezing ('null' to unfreeze).
* @since 7.6.0
*/
Api.prototype.SetFreezePanesType = function(FreezePaneType) {
if (typeof FreezePaneType === 'string' || FreezePaneType === null) {
//detect current freeze type
let curType = this.GetFreezePanesType();

let type = null;
if (FreezePaneType === 'cell' && ( ( curType && curType !== 'cell' ) || ( !curType ) ) ) {
// make unfreeze and freeze then
if (curType)
this.asc_freezePane(undefined);

type = undefined;
} else if (FreezePaneType === null && curType) {
type = undefined;
} else if (FreezePaneType === 'row' && curType !== 'row') {
type = 1;
} else if (FreezePaneType === 'column' && curType !== 'column') {
type = 2;
}

if (type !== null)
this.asc_freezePane(type);

} else {
throw(new Error('Invalid parametr "FreezePaneType".'));
}
};

/**
* Rerutns freeze panes type.
* @memberof Api
* @typeofeditors ["CSE"]
* @returns {FreezePaneType} FreezePaneType - The type of freezing ('null' - if there is no frozen pane).
* @since 7.6.0
*/
Api.prototype.GetFreezePanesType = function() {
let cell = this.wb.getWorksheet().topLeftFrozenCell;
//detect current freeze type
let curType = null;
if (cell) {
let c = cell.getCol0();
let r = cell.getRow0();
if (c == 0) {
// hole row
curType = 'row';
} else if (r == 0) {
// whole column
curType = 'column';
} else {
// cell
curType = 'cell';
}
}
return curType;
};

Object.defineProperty(Api.prototype, "FreezePanes", {
get: function () {
return this.GetFreezePanesType();
},
set: function(FreezePaneType) {
this.SetFreezePanesType(FreezePaneType);
}
});

/**
* Returns the state of sheet visibility.
* @memberof ApiWorksheet
Expand Down Expand Up @@ -1888,6 +1975,23 @@
}
};

/**
* Returns a freezePanes for a current worsheet.
* @memberof ApiWorksheet
* @typeofeditors ["CSE"]
* @returns {ApiFreezePanes}
*/
ApiWorksheet.prototype.GetFreezePanes = function() {
return new ApiFreezePanes(this.worksheet);
};

Object.defineProperty(ApiWorksheet.prototype, "FreezePanes", {
get: function () {
return this.GetFreezePanes();
}
});


/**
* Specifies the cell border position.
* @typedef {("DiagonalDown" | "DiagonalUp" | "Bottom" | "Left" | "Right" | "Top" | "InsideHorizontal" | "InsideVertical")} BordersIndex
Expand Down Expand Up @@ -3087,7 +3191,14 @@
ApiRange.prototype.Select = function () {
if (this.range.worksheet.getId() === this.range.worksheet.workbook.getActiveWs().getId()) {
var newSelection = new AscCommonExcel.SelectionRange(this.range.worksheet);
newSelection.assign2(this.range.bbox);
let bbox = this.range.bbox;
newSelection.assign2(bbox);
if (this.areas) {
this.areas.forEach(function(el){
if (!bbox.isEqual(el.bbox))
newSelection.ranges.push(el.bbox);
})
}
newSelection.Select();
}
};
Expand Down Expand Up @@ -6355,6 +6466,116 @@
}
});


//------------------------------------------------------------------------------------------------------------------
//
// ApiFreezePanes
//
//------------------------------------------------------------------------------------------------------------------

/**
* Sets the frozen cells in the active worksheet view. The range provided corresponds to cells that will be frozen in the top- and left-most pane.
* @memberof ApiFreezePanes
* @typeofeditors ["CSE"]
* @param {ApiRange | String} frozenRange - A range that represents the cells to be frozen panes.
* @since 7.6.0
*/
ApiFreezePanes.prototype.FreezeAt = function(frozenRange) {
let api = this.ws.workbook.oApi;
let tempRange = (typeof frozenRange === 'string') ? api.GetRange(frozenRange) : frozenRange;

if (tempRange.range) {
let bbox = tempRange.range.bbox;
let r = bbox.r2 < AscCommon.gc_nMaxRow0 ? bbox.r2 + 1 : bbox.r2;
let c = bbox.c2 < AscCommon.gc_nMaxCol0 ? bbox.c2 + 1 : bbox.c2;
api.asc_freezePane(null, c, r);
} else {
throw(new Error('Invalid parametr "frozenRange".'));
}
};

/**
* Freeze the first column or columns of the worksheet in place.
* @memberof ApiFreezePanes
* @typeofeditors ["CSE"]
* @param {Number?} [count=0] - Optional number of columns to freeze, or zero to unfreeze all columns.
* @since 7.6.0
*/
ApiFreezePanes.prototype.FreezeColumns = function(count) {
let api = this.ws.workbook.oApi;
if (count == undefined) count = 0;
if (typeof count === 'number' && count > 0 && count <= AscCommon.gc_nMaxCol0) {
api.asc_freezePane(null, count, 0);
} else if (!!api.wb.getWorksheet().topLeftFrozenCell && count === 0) {
api.asc_freezePane(undefined);
} else {
throw(new Error('Invalid parameter "count".'))
}
};

/**
* Freeze the top row or rows of the worksheet in place.
* @memberof ApiFreezePanes
* @typeofeditors ["CSE"]
* @param {Number?} [count=0] - Optional number of rows to freeze, or zero to unfreeze all rows.
* @since 7.6.0
*/
ApiFreezePanes.prototype.FreezeRows = function(count) {
let api = this.ws.workbook.oApi;
if (count == undefined) count = 0;
if (typeof count === 'number' && count > 0 && count <= AscCommon.gc_nMaxRow0) {
api.asc_freezePane(null, 0, count);
} else if (!!api.wb.getWorksheet().topLeftFrozenCell && count === 0) {
api.asc_freezePane(undefined);
} else {
throw(new Error('Invalid parameter "count".'))
}
};

/**
* Gets a range that describes the frozen cells in the active worksheet view.
* @memberof ApiFreezePanes
* @typeofeditors ["CSE"]
* @returns {ApiRange | null} - Returns null if there is no frozen pane.
* @since 7.6.0
*/
ApiFreezePanes.prototype.GetLocation = function() {
let result = null;
let api = this.ws.workbook.oApi;
let cell = api.wb.getWorksheet().topLeftFrozenCell;
if (cell) {
let c = cell.getCol0();
let r = cell.getRow0();
if (c == 0) {
// hole row
r--;
c = AscCommon.gc_nMaxCol0;
} else if (r == 0) {
// whole column
c--;
r = AscCommon.gc_nMaxRow0;
} else {
// cell
r--;
c--;
}
result = new ApiRange(this.ws.getRange3(0, 0, r, c));
}
return result;
};

/**
* Removes all frozen panes in the worksheet.
* @memberof ApiFreezePanes
* @typeofeditors ["CSE"]
* @since 7.6.0
*/
ApiFreezePanes.prototype.Unfreeze = function() {
if (!!this.ws.workbook.oApi.wb.getWorksheet().topLeftFrozenCell)
this.ws.workbook.oApi.asc_freezePane(undefined);
};


Api.prototype["Format"] = Api.prototype.Format;
Api.prototype["AddSheet"] = Api.prototype.AddSheet;
Api.prototype["GetSheets"] = Api.prototype.GetSheets;
Expand All @@ -6380,6 +6601,8 @@
Api.prototype["AddComment"] = Api.prototype.AddComment;
Api.prototype["GetComments"] = Api.prototype.GetComments;
Api.prototype["GetCommentById"] = Api.prototype.GetCommentById;
Api.prototype["SetFreezePanesType"] = Api.prototype.SetFreezePanesType;
Api.prototype["GetFreezePanesType"] = Api.prototype.GetFreezePanesType;

ApiWorksheet.prototype["GetVisible"] = ApiWorksheet.prototype.GetVisible;
ApiWorksheet.prototype["SetVisible"] = ApiWorksheet.prototype.SetVisible;
Expand Down Expand Up @@ -6432,6 +6655,7 @@
ApiWorksheet.prototype["GetAllCharts"] = ApiWorksheet.prototype.GetAllCharts;
ApiWorksheet.prototype["GetAllOleObjects"] = ApiWorksheet.prototype.GetAllOleObjects;
ApiWorksheet.prototype["Move"] = ApiWorksheet.prototype.Move;
ApiWorksheet.prototype["GetFreezePanes"] = ApiWorksheet.prototype.GetFreezePanes;

ApiRange.prototype["GetClassType"] = ApiRange.prototype.GetClassType
ApiRange.prototype["GetRow"] = ApiRange.prototype.GetRow;
Expand Down Expand Up @@ -6646,6 +6870,13 @@
ApiFont.prototype["GetColor"] = ApiFont.prototype.GetColor;
ApiFont.prototype["SetColor"] = ApiFont.prototype.SetColor;

ApiFreezePanes.prototype["FreezeAt"] = ApiFreezePanes.prototype.FreezeAt;
ApiFreezePanes.prototype["FreezeColumns"] = ApiFreezePanes.prototype.FreezeColumns;
ApiFreezePanes.prototype["FreezeRows"] = ApiFreezePanes.prototype.FreezeRows;
ApiFreezePanes.prototype["GetLocation"] = ApiFreezePanes.prototype.GetLocation;
ApiFreezePanes.prototype["Unfreeze"] = ApiFreezePanes.prototype.Unfreeze;


function private_SetCoords(oDrawing, oWorksheet, nExtX, nExtY, nFromCol, nColOffset, nFromRow, nRowOffset, pos){
oDrawing.x = 0;
oDrawing.y = 0;
Expand Down
5 changes: 4 additions & 1 deletion cell/view/WorksheetView.js
Original file line number Diff line number Diff line change
Expand Up @@ -6278,7 +6278,7 @@
};

/** Для api закрепленных областей */
WorksheetView.prototype.freezePane = function (type) {
WorksheetView.prototype.freezePane = function (type, c, r) {
var t = this;
var activeCell = this.model.selectionRange.activeCell.clone();
var onChangeFreezePane = function (isSuccess) {
Expand All @@ -6292,6 +6292,9 @@
} else if (type === Asc.c_oAscFrozenPaneAddType.firstCol) {
col = 1;
row = 0;
} else if(type === null && c !== undefined && r !== undefined) {
col = c;
row = r;
} else {
if (null !== t.topLeftFrozenCell) {
col = row = 0;
Expand Down
Loading