feat(spreadsheet): 탭에 숨긴 시트 · 탭 색 반영(sub4 spreadsheet_sheet_extra 잇기)
- 숨긴 시트(Sheet.숨김)는 탭 목록에서 뺌 - 탭 우클릭에 [숨기기] · 숨긴 시트가 있으면 [숨긴 시트 보이기] 하위 목록(이름 눌러 바로 보임) - Sheet.탭색 은 탭 밑줄 색으로 - ORCA 실 엔진 확인 — 숨기기 → 탭 사라짐 → 하위 목록에서 보이기 → 다시 나타남 · 탭색 지정 → 밑줄 반영
This commit is contained in:
@@ -1,8 +1,11 @@
|
||||
/* =============================================================================
|
||||
* spreadsheet_tabs.ts (주인 E)
|
||||
* 시트 탭 — 고르기(`ctx.showSheet`) · 더하기 · 이름 바꾸기(두 번 누르기) · 지우기 ·
|
||||
* 시트 탭 — 고르기(`ctx.showSheet`) · 더하기 · 이름 바꾸기(두 번 누르기) · 지우기 · 숨기기 ·
|
||||
* 끌어 옮기기 · 복사. 우클릭 메뉴는 `ui_template_context_menu.ts` 재사용.
|
||||
* 이름 바꾸기 · 지우기 · 옮기기는 명령(`시트이름` · `시트지우기` · `시트옮기기` · `시트더하기`).
|
||||
* 숨김 · 탭 색은 `spreadsheet_sheet_extra.ts`(sub4)의 `hideSheet` · `unhideSheet` 를 부름 —
|
||||
* `Sheet.숨김` 인 시트는 탭을 안 그림 · 숨긴 시트 목록은 우클릭 [숨긴 시트 보이기] 하위 메뉴 ·
|
||||
* `Sheet.탭색` 은 탭 밑줄 색.
|
||||
*
|
||||
* 이음(D `spreadsheet.ts` 잇는 자리) — `mountTabs(ctx)` 한 번 부르고 `root` 를 탭 자리(격자 아래)에
|
||||
* 붙임. `ctx.showSheet` 로 활성 시트가 바뀌면(다른 길로도) `refresh()` 를 불러 다시 그림.
|
||||
@@ -11,6 +14,7 @@
|
||||
import { createMapContextMenu, type MapContextMenuItem } from "@ui/ui_template_context_menu";
|
||||
import { el, showConfirmDialog, showToast } from "@ui/ui_template_elements";
|
||||
import { emptySheet } from "./spreadsheet_commands";
|
||||
import { hideSheet, unhideSheet } from "./spreadsheet_sheet_extra";
|
||||
import { st } from "./spreadsheet_text";
|
||||
import type { Sheet, Workbook } from "./spreadsheet_types";
|
||||
import type { PartHandle, SpreadsheetContext } from "./spreadsheet_view_types";
|
||||
@@ -45,7 +49,11 @@ export function mountTabs(ctx: SpreadsheetContext): PartHandle {
|
||||
}
|
||||
|
||||
function render(): void {
|
||||
root.replaceChildren(menu.element, ...ctx.book.시트.map(renderTab), addButton());
|
||||
root.replaceChildren(
|
||||
menu.element,
|
||||
...ctx.book.시트.filter((s) => !s.숨김).map(renderTab),
|
||||
addButton(),
|
||||
);
|
||||
}
|
||||
|
||||
function renderTab(sheet: Sheet): HTMLElement {
|
||||
@@ -55,6 +63,7 @@ export function mountTabs(ctx: SpreadsheetContext): PartHandle {
|
||||
attrs: { "data-sheet-id": sheet.id },
|
||||
});
|
||||
tab.draggable = true;
|
||||
if (sheet.탭색) tab.style.borderBottom = `3px solid ${sheet.탭색}`;
|
||||
|
||||
tab.addEventListener("click", () => ctx.showSheet(sheet.id));
|
||||
tab.addEventListener("dblclick", () => beginRename(sheet));
|
||||
@@ -136,7 +145,21 @@ export function mountTabs(ctx: SpreadsheetContext): PartHandle {
|
||||
}
|
||||
},
|
||||
],
|
||||
[
|
||||
st("SheetHide"),
|
||||
() => {
|
||||
const err = hideSheet(ctx, sheet.id);
|
||||
if (err) showToast(err, "error");
|
||||
},
|
||||
],
|
||||
];
|
||||
const hidden = ctx.book.시트.filter((s) => s.숨김);
|
||||
if (hidden.length) {
|
||||
items.push({
|
||||
label: st("SheetUnhideMenu"),
|
||||
children: hidden.map((s): [string, () => void] => [s.이름, () => unhideSheet(ctx, s.id)]),
|
||||
});
|
||||
}
|
||||
menu.open(x, y, items);
|
||||
}
|
||||
|
||||
|
||||
@@ -72,6 +72,8 @@ const TEXT = {
|
||||
"Delete this sheet? This cannot be undone.",
|
||||
],
|
||||
SheetDeleteLastError: ["마지막 시트는 지울 수 없음", "Cannot delete the last sheet"],
|
||||
SheetHide: ["숨기기", "Hide"],
|
||||
SheetUnhideMenu: ["숨긴 시트 보이기", "Show hidden sheets"],
|
||||
MenuCut: ["잘라내기", "Cut"],
|
||||
MenuCopy: ["복사", "Copy"],
|
||||
MenuPasteHint: ["Ctrl+V 를 쓸 것", "Use Ctrl+V"],
|
||||
|
||||
Reference in New Issue
Block a user