From 9f05959d4d5fea7fc26e0cedb7217f0be92bcae9 Mon Sep 17 00:00:00 2001 From: wpxp123456 <2677556700@qq.com> Date: Tue, 25 Aug 2020 14:33:12 +0800 Subject: [PATCH] feat(hide column): hide column hide column --- src/controllers/constant.js | 10 ++ src/controllers/controlHistory.js | 20 ++++ src/controllers/rowColumnOperation.js | 88 +++++++++++++- src/global/draw.js | 164 ++++++++++++++------------ src/global/rhchInit.js | 29 +++-- src/locale/en.js | 2 +- 6 files changed, 215 insertions(+), 98 deletions(-) diff --git a/src/controllers/constant.js b/src/controllers/constant.js index ddb7e6f14..3731014a1 100644 --- a/src/controllers/constant.js +++ b/src/controllers/constant.js @@ -395,6 +395,16 @@ function rightclickHTML(){ ${rightclick.showHide}${rightclick.row} </div> </div> + <div id="luckysheet-hidCols" class="luckysheet-cols-menuitem luckysheet-mousedown-cancel"> + <div class="luckysheet-cols-menuitem-content luckysheet-mousedown-cancel"> + ${rightclick.hideSelected}${rightclick.column} + </div> + </div> + <div id="luckysheet-showHidCols" class="luckysheet-cols-menuitem luckysheet-mousedown-cancel"> + <div class="luckysheet-cols-menuitem-content luckysheet-mousedown-cancel"> + ${rightclick.showHide}${rightclick.column} + </div> + </div> </div> <div id="luckysheetCellsHandleDel_sub" class="luckysheet-cols-menu luckysheet-rightgclick-menu luckysheet-rightgclick-menu-sub luckysheet-mousedown-cancel"> <div id="luckysheet-delCellsMoveLeft" class="luckysheet-cols-menuitem luckysheet-mousedown-cancel"> diff --git a/src/controllers/controlHistory.js b/src/controllers/controlHistory.js index adaebd7e9..0046ff495 100644 --- a/src/controllers/controlHistory.js +++ b/src/controllers/controlHistory.js @@ -154,6 +154,16 @@ const controlHistory = { //行高、列宽 刷新 jfrefreshgrid_rhcw(Store.flowdata.length, Store.flowdata[0].length); } + else if (ctr.type == "showHidCols") { // 隐藏、显示列 撤销操作 + //config + Store.config = ctr.config; + Store.luckysheetfile[getSheetIndex(ctr.sheetIndex)].config = ctr.config; + + server.saveParam("cg", ctr.sheetIndex, ctr.config["colhidden"], { "k": "colhidden" }); + + //行高、列宽 刷新 + jfrefreshgrid_rhcw(Store.flowdata.length, Store.flowdata[0].length); + } else if (ctr.type == "datachangeAll") { formula.execFunctionGroup(); jfrefreshgridall(ctr.data[0].length, ctr.data.length, ctr.data, null, ctr.range, "datachangeAll", ctr.ctrlValue); @@ -405,6 +415,16 @@ const controlHistory = { //行高、列宽 刷新 jfrefreshgrid_rhcw(Store.flowdata.length, Store.flowdata[0].length); } + else if (ctr.type == "showHidCols") { // 隐藏、显示列 重做操作 + //config + Store.config = ctr.curconfig; + Store.luckysheetfile[getSheetIndex(ctr.sheetIndex)].config = ctr.curconfig; + + server.saveParam("cg", ctr.sheetIndex, ctr.curconfig["colhidden"], { "k": "colhidden" }); + + //行高、列宽 刷新 + jfrefreshgrid_rhcw(Store.flowdata.length, Store.flowdata[0].length); + } else if (ctr.type == "datachangeAll") { formula.execFunctionGroup(); jfrefreshgridall(ctr.curdata[0].length, ctr.curdata.length, ctr.curdata, null, ctr.currange, "datachangeAll", ctr.ctrlValue); diff --git a/src/controllers/rowColumnOperation.js b/src/controllers/rowColumnOperation.js index 2586cd447..f36900eaa 100644 --- a/src/controllers/rowColumnOperation.js +++ b/src/controllers/rowColumnOperation.js @@ -1295,9 +1295,7 @@ export function rowColumnOperationInitial(){ for(let s = 0; s < Store.luckysheet_select_save.length; s++){ let r1 = Store.luckysheet_select_save[s].row[0], - r2 = Store.luckysheet_select_save[s].row[1], - c1 = Store.luckysheet_select_save[s].column[0], - c2 = Store.luckysheet_select_save[s].column[1]; + r2 = Store.luckysheet_select_save[s].row[1]; for(let r = r1; r <= r2; r++){ cfg["rowhidden"][r] = 0; @@ -1336,9 +1334,7 @@ export function rowColumnOperationInitial(){ for(let s = 0; s < Store.luckysheet_select_save.length; s++){ let r1 = Store.luckysheet_select_save[s].row[0], - r2 = Store.luckysheet_select_save[s].row[1], - c1 = Store.luckysheet_select_save[s].column[0], - c2 = Store.luckysheet_select_save[s].column[1]; + r2 = Store.luckysheet_select_save[s].row[1]; for(let r = r1; r <= r2; r++){ delete cfg["rowhidden"][r]; @@ -1367,6 +1363,86 @@ export function rowColumnOperationInitial(){ jfrefreshgrid_rhcw(Store.flowdata.length, Store.flowdata[0].length); }) + //隐藏、显示列 + $("#luckysheet-hidCols").click(function (event) { + $("#luckysheet-rightclick-menu").hide(); + luckysheetContainerFocus(); + + let cfg = $.extend(true, {}, Store.config); + if(cfg["colhidden"] == null){ + cfg["colhidden"] = {}; + } + + for(let s = 0; s < Store.luckysheet_select_save.length; s++){ + let c1 = Store.luckysheet_select_save[s].column[0], + c2 = Store.luckysheet_select_save[s].column[1]; + + for(let c = c1; c <= c2; c++){ + cfg["colhidden"][c] = 0; + } + } + + //保存撤销 + if(Store.clearjfundo){ + let redo = {}; + redo["type"] = "showHidCols"; + redo["sheetIndex"] = Store.currentSheetIndex; + redo["config"] = $.extend(true, {}, Store.config); + redo["curconfig"] = cfg; + + Store.jfundo = []; + Store.jfredo.push(redo); + } + + //config + Store.config = cfg; + Store.luckysheetfile[getSheetIndex(Store.currentSheetIndex)].config = Store.config; + + server.saveParam("cg", Store.currentSheetIndex, cfg["colhidden"], { "k": "colhidden" }); + + //行高、列宽 刷新 + jfrefreshgrid_rhcw(Store.flowdata.length, Store.flowdata[0].length); + }) + $("#luckysheet-showHidCols").click(function (event) { + $("#luckysheet-rightclick-menu").hide(); + luckysheetContainerFocus(); + + let cfg = $.extend(true, {}, Store.config); + if(cfg["colhidden"] == null){ + return; + } + + for(let s = 0; s < Store.luckysheet_select_save.length; s++){ + let c1 = Store.luckysheet_select_save[s].column[0], + c2 = Store.luckysheet_select_save[s].column[1]; + + for(let c = c1; c <= c2; c++){ + delete cfg["colhidden"][c]; + } + } + + //保存撤销 + if(Store.clearjfundo){ + let redo = {}; + redo["type"] = "showHidCols"; + redo["sheetIndex"] = Store.currentSheetIndex; + redo["config"] = $.extend(true, {}, Store.config); + redo["curconfig"] = cfg; + + Store.jfundo = []; + Store.jfredo.push(redo); + } + + //config + Store.config = cfg; + Store.luckysheetfile[getSheetIndex(Store.currentSheetIndex)].config = Store.config; + + server.saveParam("cg", Store.currentSheetIndex, cfg["colhidden"], { "k": "colhidden" }); + + //行高、列宽 刷新 + jfrefreshgrid_rhcw(Store.flowdata.length, Store.flowdata[0].length); + }) + //删除单元格(左移、上移) $("#luckysheet-delCellsMoveLeft").click(function (event) { $("#luckysheet-rightclick-menu").hide(); diff --git a/src/global/draw.js b/src/global/draw.js index 2a2821263..397410319 100644 --- a/src/global/draw.js +++ b/src/global/draw.js @@ -223,28 +223,33 @@ function luckysheetDrawgridColumnTitle(scrollWidth, drawWidth, offsetLeft) { // if(end_c > scrollWidth + drawWidth+1){ // break; // } + + if (Store.config["colhidden"] != null && Store.config["colhidden"][c] != null) { - luckysheetTableContent.fillStyle = "#ffffff"; - luckysheetTableContent.fillRect( - (start_c + offsetLeft - 1) , - 0, - (end_c - start_c) , - Store.columeHeaderHeight -1 - ) - luckysheetTableContent.fillStyle = "#000000"; + } + else { + luckysheetTableContent.fillStyle = "#ffffff"; + luckysheetTableContent.fillRect( + (start_c + offsetLeft - 1) , + 0, + (end_c - start_c) , + Store.columeHeaderHeight -1 + ) + luckysheetTableContent.fillStyle = "#000000"; - //列标题栏序列号 - luckysheetTableContent.save();//save scale before draw text - luckysheetTableContent.scale(Store.zoomRatio,Store.zoomRatio); - let abc = chatatABC(c); - let textMetrics = getMeasureText(abc, luckysheetTableContent); - //luckysheetTableContent.measureText(abc); + //列标题栏序列号 + luckysheetTableContent.save();//save scale before draw text + luckysheetTableContent.scale(Store.zoomRatio,Store.zoomRatio); + let abc = chatatABC(c); + let textMetrics = getMeasureText(abc, luckysheetTableContent); + //luckysheetTableContent.measureText(abc); - let horizonAlignPos = Math.round((start_c + (end_c - start_c) / 2 + offsetLeft) - textMetrics.width / 2); - let verticalAlignPos = Math.round(Store.columeHeaderHeight / 2 ); - - luckysheetTableContent.fillText(abc, horizonAlignPos/Store.zoomRatio, verticalAlignPos/Store.zoomRatio); - luckysheetTableContent.restore();//restore scale after draw text + let horizonAlignPos = Math.round((start_c + (end_c - start_c) / 2 + offsetLeft) - textMetrics.width / 2); + let verticalAlignPos = Math.round(Store.columeHeaderHeight / 2 ); + + luckysheetTableContent.fillText(abc, horizonAlignPos/Store.zoomRatio, verticalAlignPos/Store.zoomRatio); + luckysheetTableContent.restore();//restore scale after draw text + } //列标题栏竖线 vertical luckysheetTableContent.beginPath(); @@ -465,6 +470,10 @@ function luckysheetDrawMain(scrollWidth, scrollHeight, drawWidth, drawHeight, of } let end_r = Store.visibledatarow[r] - scrollHeight; + + if (Store.config["rowhidden"] != null && Store.config["rowhidden"][r] != null) { + continue; + } for (let c = dataset_col_st; c <= dataset_col_ed; c++) { let start_c; @@ -477,78 +486,77 @@ function luckysheetDrawMain(scrollWidth, scrollHeight, drawWidth, drawHeight, of let end_c = Store.visibledatacolumn[c] - scrollWidth; - if (Store.config["rowhidden"] != null && Store.config["rowhidden"][r] != null) { - + if (Store.config["colhidden"] != null && Store.config["colhidden"][c] != null) { + continue + } + + let firstcolumnlen = Store.defaultcollen; + if (Store.config["columnlen"] != null && Store.config["columnlen"][c] != null) { + firstcolumnlen = Store.config["columnlen"][c]; } - else { - let firstcolumnlen = Store.defaultcollen; - if (Store.config["columnlen"] != null && Store.config["columnlen"][c] != null) { - firstcolumnlen = Store.config["columnlen"][c]; - } - if (Store.flowdata[r] != null && Store.flowdata[r][c] != null) { - let value = Store.flowdata[r][c]; + if (Store.flowdata[r] != null && Store.flowdata[r][c] != null) { + let value = Store.flowdata[r][c]; - if(getObjType(value) == "object" && ("mc" in value)){ - borderOffset[r + "_" + c] = { - "start_r": start_r, - "start_c": start_c, - "end_r": end_r, - "end_c": end_c - }; + if(getObjType(value) == "object" && ("mc" in value)){ + borderOffset[r + "_" + c] = { + "start_r": start_r, + "start_c": start_c, + "end_r": end_r, + "end_c": end_c + }; - if("rs" in value["mc"]){ - let key = "r"+ r + "c" + c; + if("rs" in value["mc"]){ + let key = "r"+ r + "c" + c; + mergeCache[key] = cellupdate.length; + } + else{ + let key = "r"+ value["mc"].r + "c" + value["mc"].c; + let margeMain = cellupdate[mergeCache[key]]; + + if(margeMain == null){ mergeCache[key] = cellupdate.length; + cellupdate.push({ + "r": r, + "c": c, + "start_c": start_c, + "start_r": start_r, + "end_r": end_r, + "end_c": end_c, + "firstcolumnlen": firstcolumnlen, + }); } else{ - let key = "r"+ value["mc"].r + "c" + value["mc"].c; - let margeMain = cellupdate[mergeCache[key]]; - - if(margeMain == null){ - mergeCache[key] = cellupdate.length; - cellupdate.push({ - "r": r, - "c": c, - "start_c": start_c, - "start_r": start_r, - "end_r": end_r, - "end_c": end_c, - "firstcolumnlen": firstcolumnlen, - }); + if(margeMain.c == c){ + margeMain.end_r += (end_r - start_r - 1); } - else{ - if(margeMain.c == c){ - margeMain.end_r += (end_r - start_r - 1); - } - - if(margeMain.r == r){ - margeMain.end_c += (end_c - start_c); - margeMain.firstcolumnlen += firstcolumnlen; - } + + if(margeMain.r == r){ + margeMain.end_c += (end_c - start_c); + margeMain.firstcolumnlen += firstcolumnlen; } - - continue; } + + continue; } } - - cellupdate.push({ - "r": r, - "c": c, - "start_r": start_r, - "start_c": start_c, - "end_r": end_r, - "end_c": end_c, - "firstcolumnlen": firstcolumnlen, - }); - borderOffset[r + "_" + c] = { - "start_r": start_r, - "start_c": start_c, - "end_r": end_r, - "end_c": end_c - }; } + + cellupdate.push({ + "r": r, + "c": c, + "start_r": start_r, + "start_c": start_c, + "end_r": end_r, + "end_c": end_c, + "firstcolumnlen": firstcolumnlen, + }); + borderOffset[r + "_" + c] = { + "start_r": start_r, + "start_c": start_c, + "end_r": end_r, + "end_c": end_c + }; } } diff --git a/src/global/rhchInit.js b/src/global/rhchInit.js index 90066fac0..f8622b3eb 100644 --- a/src/global/rhchInit.js +++ b/src/global/rhchInit.js @@ -8,21 +8,19 @@ export default function rhchInit(rowheight, colwidth) { Store.visibledatarow = []; Store.rh_height = 0; - for (let i = 0; i < rowheight; i++) { + for (let r = 0; r < rowheight; r++) { let rowlen = Store.defaultrowlen; - if (Store.config["rowlen"] != null && Store.config["rowlen"][i] != null) { - rowlen = Store.config["rowlen"][i]; + if (Store.config["rowlen"] != null && Store.config["rowlen"][r] != null) { + rowlen = Store.config["rowlen"][r]; } - if (Store.config["rowhidden"] != null && Store.config["rowhidden"][i] != null) { - rowlen = Store.config["rowhidden"][i]; + if (Store.config["rowhidden"] != null && Store.config["rowhidden"][r] != null) { Store.visibledatarow.push(Store.rh_height); continue; } - else { - Store.rh_height += Math.round((rowlen + 1)*Store.zoomRatio); - } + + Store.rh_height += Math.round((rowlen + 1) * Store.zoomRatio); Store.visibledatarow.push(Store.rh_height); //行的临时长度分布 } @@ -37,14 +35,14 @@ export default function rhchInit(rowheight, colwidth) { let maxColumnlen = 120; - for (let i = 0; i < colwidth; i++) { + for (let c = 0; c < colwidth; c++) { let firstcolumnlen = Store.defaultcollen; - if (Store.config["columnlen"] != null && Store.config["columnlen"][i] != null) { - firstcolumnlen = Store.config["columnlen"][i]; + if (Store.config["columnlen"] != null && Store.config["columnlen"][c] != null) { + firstcolumnlen = Store.config["columnlen"][c]; } else { - if (Store.flowdata[0] != null && Store.flowdata[0][i] != null) { + if (Store.flowdata[0] != null && Store.flowdata[0][c] != null) { if (firstcolumnlen > 300) { firstcolumnlen = 300; } @@ -57,11 +55,16 @@ export default function rhchInit(rowheight, colwidth) { Store.config["columnlen"] = {}; } - Store.config["columnlen"][i] = firstcolumnlen; + Store.config["columnlen"][c] = firstcolumnlen; } } } + if(Store.config["colhidden"] != null && Store.config["colhidden"][c] != null){ + Store.visibledatacolumn.push(Store.ch_width); + continue; + } + Store.ch_width += Math.round((firstcolumnlen + 1)*Store.zoomRatio); Store.visibledatacolumn.push(Store.ch_width);//列的临时长度分布 diff --git a/src/locale/en.js b/src/locale/en.js index fd9c80f8c..689742265 100644 --- a/src/locale/en.js +++ b/src/locale/en.js @@ -496,7 +496,7 @@ export default { deleteSelected: 'Delete selected ', hide: 'Hide', hideSelected: 'Hide selected ', - showHide: 'Show hide', + showHide: 'Show hide ', to: 'Towards', left: 'Left', right: 'Right',