SpreadJS 의 시트에서 마우스 우 클릭을 하게 되면 컨텍스트 메뉴가 뜬다. 웹 화면을 구성하면서 시트에 우클릭 했을 때 뜨는 컨텍스트 메뉴를 별도로 커스터마이징 해야 했는데 그래서 이번엔 컨텍스트 메뉴와 관련된 내용을 정리할 것 이다.
컨텍스트 메뉴
SpreadJS 의 컨텍스트 메뉴는 앞에서 말한 것과 같이 시트에서 마우스 우 클릭해서 확인 할 수 있다.
SpreadJS 에서 제공하는 컨텍스트 메뉴를 쓰지 않을려고 하면 spread.options.allowContextMenu 옵션을 false 로 지정하면 된다.
<<코드 예시>>
var spread = GC.Spread.Sheets.findControl(document.getElementById('ss'));
spread.options.allowContextMenu = false;
[참고 링크 : SpreadJS 컨텍스트 메뉴 소개 데모]
소개 | 기능별 학습 | SpreadJS 데모
상황에 맞는 메뉴는 다음과 같은 기능을 제공합니다: 테마는 현재 스프레드 테마와 동일합니다. 필터 상황에 맞는 메뉴 데이터 결과를 변경합니다. 메뉴 보기의 모양과 구조를 수정합니다. spread
demo.grapecity.co.kr
컨텍스트 메뉴 추가하기
- spread.contextMenu.menuData 속성에 원하는 메뉴에 대한 옵션을 설정한 객체를 추가하여 새로운 컨택스트 메뉴를 생성
- 생성하고자 하는 메뉴를 설정하는 옵션을 이용해서 메뉴를 커스터 마이징
- name : 컨텍스트 메뉴를 판별하는 이름. string 형태
- text : 컨텍스트 메뉴에서 해당 메뉴 항목에 표현되는 내용. 만약 컨텍스트 메뉴 항목이 그룹 형태이면, 그 그룹를 나타내는 DOM 요소의 title 속성 값으로 들어감. string 형태.
- command : 메뉴 선택(클릭) 시, 실행되는 동작. string 혹은 함수 형태. string 으로 들어가는 command 의 경우, 이를 사용하기 위해서는 spread.commandManager() 를 통해서 해당 동작에 대해 선언해주어야 함.
- disable : 컨택스트 메뉴 활성화 여부. 기본값은 false
- iconClass : 컨텍스트 메뉴 항목의 텍스트 앞에 표현되는 아이콘 혹은 이미지를 설정하는 id 속성. CSS 스타일 속성에서 해당 속성을 id 식별자로 불러와 설정.
- group : 컨텍스트 메뉴 항목을 그룹 형태로 나타냄.(ex. 컨텍스트 메뉴의 '붙여넣기 옵션') 해당 속성의 value 값은 메뉴 항목의 헤더 값으로 설정 됨.
- subMenu : 하위 항목들을 가지는 컨텍스트 메뉴를 설정. 객체 배열의 형태
- type : 컨텍스트 메뉴의 형태
- workArea : 컨텍스트 메뉴가 동작하는 위치.
- "sheetTab" : 시트의 탭 부분.
- "outline" : 아웃라인 부분.
- "viewport" : 시트 부분.
- "rowHeader" : 행 헤더 부분.
- "colHeader" : 열 헤더 부분.
- "comment" : 메모 부분.
- "slicer" : 슬라이서 부분.
- "corner" : 시트의 모든 셀을 선택하는 열 및 행 헤더가 겹치는 부분에 위치한 코너 부분.
- 객체 추가 시, push 메서드 이용
<<코드 예시>>
var commandManager = spread.commandManager();
var markWithRedBg = {
text: "Format Cells",
name: "markWithRedBg",
command: "markWithRedBg",
workArea: "viewport"
};
spread.contextMenu.menuData.push(markWithRedBg);
var markWithRedBgCommand = {
canUndo: false,
execute: function () {
var style = new GC.Spread.Sheets.Style();
style.name = 'style1';
style.backColor = 'red';
var sheet = spread.getActiveSheet();
sheet.suspendPaint();
var selections = sheet.getSelections();
var selectionIndex = 0, selectionCount = selections.length;
for (; selectionIndex < selectionCount; selectionIndex++) {
var selection = selections[selectionIndex];
for (var i = selection.row; i < (selection.row + selection.rowCount); i++) {
for (var j = selection.col; j < (selection.col + selection.colCount); j++) {
sheet.setStyle(i, j, style, GC.Spread.Sheets.SheetArea.viewport);
}
}
}
sheet.resumePaint();
}
};
commandManager.register("markWithRedBg", markWithRedBgCommand, null, false, false, false, false);
[참고 링크 : SpreadJS 사용자 정의 메뉴보기 데모] | [참고 링크 : SpreadJS 확장된 컨텍스트 메뉴 데모]
[참고 링크 : SpreadJS menuData API]
사용자 정의 메뉴보기 | 기능별 학습 | SpreadJS 데모
정의된 컨텍스트 메뉴 스타일 클래스를 다시 작성하여 다른 스타일을 적용할 수 있습니다. 예: MenuView의 createMenuItemElement 함수를 덮어써 메뉴 항목의 뷰 구조를 사용자 정의할 수 있습니다: 명령
demo.grapecity.co.kr
확장된 상황에 맞는 메뉴 | 기능별 학습 | SpreadJS 데모
The SpreadJS에서 기본 제공 상황에 맞는 메뉴는 사용자 정의 메뉴 옵션 추가/제거를 지원합니다. 각 옵션은 JSON 스키마의 정의된 메뉴 데이터를 따릅니다.
demo.grapecity.co.kr
GC.Spread.Sheets.ContextMenu.ContextMenu | JavaScript Spreadsheet | SpreadJS
www.grapecity.com
컨텍스트 메뉴 삭제하기
- spread.contextMenu.menuData 속성에 지정된 메뉴들을 불러온 후 특정 메뉴에 해당하는 객체를 제거
- 제거 시 splice 메서드 이용
<<코드 예시>>
$.each(spread.contextMenu.menuData, function (p, v) {
if (v.name === 'openDialog') { // name 속성이 'openDialog'인 메뉴 객체 일 떄
spread.contextMenu.menuData.splice(p, 1)
}
});
[참고 링크 : SpreadJS 확장된 컨텍스트 메뉴 데모]
확장된 상황에 맞는 메뉴 | 기능별 학습 | SpreadJS 데모
The SpreadJS에서 기본 제공 상황에 맞는 메뉴는 사용자 정의 메뉴 옵션 추가/제거를 지원합니다. 각 옵션은 JSON 스키마의 정의된 메뉴 데이터를 따릅니다.
demo.grapecity.co.kr
컨텍스트 메뉴 스크롤
SpreadJS 에서 제공하는 컨텍스트 메뉴 리스트의 높이도 설정할 수 있다. spread.contextMenu.menuView.maxHeight 메서드로 최대 높이를 설정하면 된다. 대신 너무 높이 값이 작으면 메뉴 항목이 전부 안보여서 선택 할 수 없게 되므로 spread.contextMenu.menuView.scrollable 메서드를 사용해서 컨텍스트 메뉴 리스트가 스크롤 되게 설정해야 한다.
<<코드 예시>>
var spread = GC.Spread.Sheets.findControl(document.getElementById('ss'));
spread.contextMenu.menuView.scrollable(true);
spread.contextMenu.menuView.maxHeight(150);
[참고 링크 : SpreadJS 컨텍스트 메뉴 스크롤 데모]
상황에 맞는 메뉴 스크롤 | 기능별 학습 | SpreadJS 데모
상황에 맞는 메뉴는 스크롤을 지원하며, spread.contextMenu.menuView.scrollable을 사용하여 상황에 맞는 메뉴를 스크롤할지 여부를 제어할 수 있습니다. spread.contextMenu.menuView.scrollable을 사용하여 상황에
demo.grapecity.co.kr
결론
SpreadJS 에서는 별도로 제공하는 컨텍스트 메뉴가 있으며, 해당 메뉴들을 쓰지 않으려면 spread.options.allowContextMenu 옵션을 false 로 지정하면 된다.
컨텍스트 메뉴는 push 메서드와 splice 메서드를 통해 추가하거나 제거할 수 있다.
컨텍스트 메뉴 추가 시, 추가할 메뉴 객체의 옵션을 설정하여 커스터 마이징 할 수 있다.
SpreadJS 에서 제공하는 컨텍스트 메뉴 리스트의 높이는 조정 가능하며 리스트의 스크롤 여부를 설정 할 수 있다.
'SpreadJS' 카테고리의 다른 글
[SpreadJS] 테이블 시트 (0) | 2023.03.23 |
---|---|
[SpreadJS] 이미지 삽입 (0) | 2023.03.15 |
[SpreadJS] 조건부 서식 (0) | 2023.03.03 |
[SpreadJS] ExcelIO (0) | 2023.02.16 |
[SpreadJS] 데이터 바인딩 (0) | 2023.02.13 |