- 624-3 도구줄 = 공용 표 「b05」 · 아래 줄 = 공용 겹 줄(띠 · 올린 임도망도 숨김 · 처음 = 등고선 · 하천) · 범례 = 공용 legendRows(상태 글판 위) - 노선 띠 300 m 자르기 = B05 자기 칸(등고선 · 하천 · 1 m)만 · 그 밖 겹 = 안 자르는 둘째 GL 칸(맨 밑 · 켠 겹 있을 때만 · GL 만) · 등고선 끔 = 등고 글도 숨김 - 626-1 추천 보기 = 도구줄 아이콘 + 아래 판(영선 · 토공 최소 · 기울기 최소 · 비중 계산 · 끔) — route_recommend 저장본(지금 설계 지형) 선만 · 다시 셈 · 쓰기 없음 - 지형 칩 → 확인창 → 새 POST /route/design-terrain(설계 지형만 바꿈 · 노선 저장 체인 다시 · 노선 · 초기값 · 추천 저장본 그대로 · 잠금 · 실패 되돌림) - 걷음 — 추천 모달(_Recommend · _Help · _Map · CSS) · 좌측 「노선 추천」 칸 · saveRecommendedRoute · UI_RouteReset(서버 as_initial 길 · 시험은 남김) - 부품 상자 — createPickMenu(아이콘 고르기 메뉴 · 판 = body fixed · ✓) - 낡은 시험 고침 · 지움 — 모달 · 좌측 칸 · [적용] 화면 배선을 보던 시험(283 · 346_3 · 349 · 364_4 · 383_1 · 390_5 · 418 · 421 · 421_2 · 476_2 · 509_2 · 509_5 · 551_2 · 600_3 · b05_routeedit_initial · design_view_parity · modal_top · 133_1 · 133_2) · test_508_2 · helper_283 지움(모달 전용) Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
76 lines
3.6 KiB
TypeScript
76 lines
3.6 KiB
TypeScript
/* =============================================================================
|
|
* map_toolbar.ts
|
|
* 공용 지도 도구줄 표(PLAN 624-2 · 요구 530 「상단 아이콘 셋 같게 · 필요 없는 것 숨김」) — 예정노선(D03) · B05 평면이 같이 씀.
|
|
* 한 줄 = 열쇠(`ui_template_map_tools` 단추 이름 · 아이콘 · 마우스 글은 거기) · 할 일 · 보일 페이지.
|
|
* 묶음 = 나눔선 · 차례 = 도구줄 차례 · 단추 아닌 칸(간격 고르기 · 추천 노선 보기 · 지형 칩)은 이름을 여기 둠.
|
|
* 누름 동작 · 페이지 문구는 페이지 몫 — 만든 요소를 `parts` 로 넘기면 그 자리에 · 안 넘긴 단추는 기본 단추(돌리기 둘 = 공용 돌림이 `data-act` 로 찾음).
|
|
* 거리 재기 = 단추 자리만 같고 동작은 페이지 몫(결정 A⑩) · 지형 칩 = `map_terrain_chip`.
|
|
* 쓰는 법 = `createMapTools({ label, hint, groups: mapToolGroups("d03", { undo: undoButton, terrain: chip.root }) })`.
|
|
* ========================================================================== */
|
|
|
|
import type { MapToolAct } from "@ui/ui_template_map_tools";
|
|
import type { MapPage } from "./map_layer_list";
|
|
|
|
export type MapToolKey = MapToolAct | "snap-step" | "recommend" | "terrain";
|
|
|
|
export interface MapToolRow {
|
|
key: MapToolKey;
|
|
/** 단추 아닌 칸 이름(단추는 `MAP_TOOLS` 이름). */
|
|
name?: string;
|
|
does: string;
|
|
pages: readonly MapPage[];
|
|
}
|
|
|
|
const BOTH: readonly MapPage[] = ["d03", "b05"];
|
|
const B05: readonly MapPage[] = ["b05"];
|
|
|
|
export const MAP_TOOLBAR: readonly (readonly MapToolRow[])[] = [
|
|
[
|
|
{ key: "undo", does: "편집 한 걸음 되돌림", pages: BOTH },
|
|
{ key: "redo", does: "되돌린 걸음 다시", pages: BOTH },
|
|
],
|
|
[
|
|
{ key: "view3d", does: "3D 큰 창(동작 = 페이지 몫)", pages: BOTH },
|
|
{ key: "rotate-ccw", does: "지도 반시계로 돌림(Ctrl+휠도)", pages: BOTH },
|
|
{ key: "rotate-cw", does: "지도 시계로 돌림", pages: BOTH },
|
|
],
|
|
[
|
|
{ key: "contour-minor", does: "라이다 1 m 등고선 켬끔(라이다일 때만 열림)", pages: B05 },
|
|
{ key: "stations", does: "측점 눈금 · 번호 켬끔", pages: BOTH },
|
|
{ key: "slopes", does: "구간 기울기 글 켬끔", pages: BOTH },
|
|
{ key: "footprint", does: "도로 끝 · 비탈 끝(절/성토선) 켬끔", pages: B05 },
|
|
{ key: "measure", does: "거리 재기(동작 = 페이지 몫 · A⑩)", pages: BOTH },
|
|
],
|
|
[
|
|
{ key: "station-snap", does: "곡선 가운데(MC)를 간격 배수에 맞춤", pages: B05 },
|
|
{ key: "snap-step", name: "측점 스냅 간격", does: "스냅 간격 고르기", pages: B05 },
|
|
],
|
|
[
|
|
{
|
|
key: "recommend",
|
|
name: "추천 노선 보기",
|
|
does: "노선 추천 저장본 선 하나만 보기 · 끔(626-1 · 고르기 = 페이지 몫)",
|
|
pages: B05,
|
|
},
|
|
],
|
|
[{ key: "terrain", name: "지형 칩", does: "지형 원천 보기 · 고르기", pages: BOTH }],
|
|
];
|
|
|
|
const isAct = (key: MapToolKey): key is MapToolAct =>
|
|
key !== "snap-step" && key !== "recommend" && key !== "terrain";
|
|
|
|
/** 그 페이지 도구줄 묶음 — 넘긴 요소 · 기본 단추(단추 열쇠만) · 빈 묶음 뺌. */
|
|
export function mapToolGroups(
|
|
page: MapPage,
|
|
parts: Partial<Record<MapToolKey, HTMLElement>> = {},
|
|
): (MapToolAct | HTMLElement)[][] {
|
|
return MAP_TOOLBAR.map((group) =>
|
|
group
|
|
.filter((row) => row.pages.includes(page))
|
|
.flatMap((row): (MapToolAct | HTMLElement)[] => {
|
|
const made = parts[row.key];
|
|
return made ? [made] : isAct(row.key) ? [row.key] : [];
|
|
}),
|
|
).filter((group) => group.length);
|
|
}
|