From 73ad5c70707b8234c4c881d2ea41695d9b31d3dd Mon Sep 17 00:00:00 2001 From: umsangdon Date: Sun, 27 Sep 2026 21:17:16 +0900 Subject: [PATCH] =?UTF-8?q?feat(spreadsheet):=20D=20=EC=9E=87=EA=B8=B0=20?= =?UTF-8?q?=E2=80=94=20=EC=85=80=20=EC=84=9C=EC=8B=9D=20=EC=B0=BD(Ctrl+1?= =?UTF-8?q?=20=C2=B7=20[=EC=84=9C=EC=8B=9D=E2=80=A6]=20=EB=8B=A8=EC=B6=94?= =?UTF-8?q?=20=C2=B7=20sub1)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - spreadsheet_keys.ts — Ctrl+1 자리 - spreadsheet_extras.ts — openFormatDialog 잇기 · 수식 입력줄 앞 [서식…](Ctrl+1 을 ORCA · 브라우저가 가로챌 때) · 창이 닫히면 초점을 격자로 Co-Authored-By: Claude Opus 5.5 Claude-Session: https://claude.ai/code/session_01L6KXAabDTenEU7hrDQmCKY --- A00_Common/spreadsheet/spreadsheet_extras.ts | 26 ++++++++++++++++++-- A00_Common/spreadsheet/spreadsheet_keys.ts | 6 +++++ 2 files changed, 30 insertions(+), 2 deletions(-) diff --git a/A00_Common/spreadsheet/spreadsheet_extras.ts b/A00_Common/spreadsheet/spreadsheet_extras.ts index 668b2f4d..863a8d27 100644 --- a/A00_Common/spreadsheet/spreadsheet_extras.ts +++ b/A00_Common/spreadsheet/spreadsheet_extras.ts @@ -1,7 +1,7 @@ /* ============================================================================= * spreadsheet_extras.ts (주인 D) * 2단계 부품 잇기(sub1 파일들의 「잇는 법」) — 찾기 패널 · 메모 풍선(마우스 올림) · 메모 편집(Shift+F2) · - * 서식 붓(수식 입력줄 앞 단추 · 두 번 누르면 계속 · Esc 끔) · 골라 붙여넣기(Ctrl+Shift+V → 값만 · 서식만 · 수식만) · + * 셀 서식 창(Ctrl+1) · 서식 붓(수식 입력줄 앞 단추 · 두 번 누르면 계속 · Esc 끔) · 골라 붙여넣기(Ctrl+Shift+V → 값만 · 서식만 · 수식만) · * 도구 모음을 누른 뒤 초점을 격자로 되돌림 · 데이터 단추 · 메뉴는 `spreadsheet_data_menu.ts`. * 빨간 세모는 C 격자 · 우클릭 [메모 …] 는 E 메뉴 몫(브레인 배정). * ========================================================================== */ @@ -12,6 +12,7 @@ import { attachComments, getComment, setComment } from "./spreadsheet_comments"; import { mountDataMenu } from "./spreadsheet_data_menu"; import type { Editor } from "./spreadsheet_editor"; import { mountFindPanel } from "./spreadsheet_find_panel"; +import { openFormatDialog } from "./spreadsheet_format_dialog"; import { createFormatPainter } from "./spreadsheet_format_painter"; import type { KeyHooks } from "./spreadsheet_keys"; import type { MouseHooks } from "./spreadsheet_mouse"; @@ -19,6 +20,7 @@ import { pasteSpecial, type PasteSpecialMode } from "./spreadsheet_paste_special import type { PartHandle, SpreadsheetContext } from "./spreadsheet_view_types"; const TEXT = { + format: "셀 서식(Ctrl+1)", painter: "서식 붓 — 한 번 누르면 한 번 · 두 번 누르면 Esc 까지 계속", pasteTitle: "골라 붙여넣기", modes: { 값: "값만", 서식: "서식만", 수식: "수식만" } as Record, @@ -107,7 +109,25 @@ export function attachExtras( showBrush(); back(); }); - if (!ctx.readOnly) ed.bar.prepend(brush); + // 셀 서식 창 — Ctrl+1 을 브라우저 · ORCA 가 가로챌 때 누를 자리 + const fmt = el("button", { + className: "ss-brush", + text: "서식…", + attrs: { type: "button", title: TEXT.format }, + }); + /** 창이 닫히면(확인 · 취소) 초점을 격자로 */ + function openFormat(): void { + if (ctx.readOnly) return; + openFormatDialog(ctx); + const watch = new MutationObserver(() => { + if (document.querySelector(".ss-fmtdlg")) return; + watch.disconnect(); + back(); + }); + watch.observe(document.body, { childList: true }); + } + fmt.addEventListener("click", openFormat); + if (!ctx.readOnly) ed.bar.prepend(fmt, brush); // ── 데이터 단추 · 메뉴(정렬 · 필터 · 조건부 서식 · 유효성 · 이름 · 눈금선) ───────── const data = mountDataMenu(ctx, back); @@ -178,6 +198,7 @@ export function attachExtras( memo.remove(); picker.remove(); brush.remove(); + fmt.remove(); }, }; @@ -186,6 +207,7 @@ export function attachExtras( find: (replace) => find.open(replace), pasteSpecial: () => (armed = true), comment: editMemo, + formatDialog: openFormat, ...data.keys, escape() { painter.clear(); diff --git a/A00_Common/spreadsheet/spreadsheet_keys.ts b/A00_Common/spreadsheet/spreadsheet_keys.ts index 105e5725..b90a88b0 100644 --- a/A00_Common/spreadsheet/spreadsheet_keys.ts +++ b/A00_Common/spreadsheet/spreadsheet_keys.ts @@ -41,6 +41,8 @@ export interface KeyHooks { comment?(): void; /** 고름 중 Esc(서식 붓 끄기 등) */ escape?(): void; + /** Ctrl+1 셀 서식 창 */ + formatDialog?(): void; /** Ctrl+Shift+L 필터 켜기 · 끄기 */ filter?(): void; /** Alt+↓ — 필터 머리 칸이면 값 목록을 열고 true */ @@ -142,6 +144,10 @@ export function attachKeys(ctx: SpreadsheetContext, ed: Editor, hooks: KeyHooks if (!hooks.find) return false; hooks.find(k === "h"); return true; + case "1": + if (!hooks.formatDialog) return false; + hooks.formatDialog(); + return true; case "l": if (!e.shiftKey || !hooks.filter) return false; hooks.filter();