Skip to content

원형 툴바: 사용 가능한 프리셋을 종류별 탭으로 나누기 (#343) - #463

Open
SeoJCalive wants to merge 1 commit into
KnifeLemon:mainfrom
SeoJCalive:feature/toolbar-tabs
Open

SeoJCalive wants to merge 1 commit into
KnifeLemon:mainfrom
SeoJCalive:feature/toolbar-tabs

Conversation

@SeoJCalive

Copy link
Copy Markdown
Contributor

What does this change?

#343(#266 2단계)입니다. #343에서 답해 주신 방향대로, 원형 툴바 화면 오른쪽의 사용 가능한 프리셋 목록을 종류별 탭으로 나눴습니다. #304에서 2단계로 미루신 도넛별 판정 캐시와 검색 시 숨긴 프리셋도 함께 넣었습니다.

  • 탭 묶음: #343에서 제안해 주신 아홉 탭입니다. PDF는 문서, 벡터는 이미지, 자막은 동영상·소리에 두었고, 데이터는 앞서 말씀드린 대로 문서에 두었습니다. 형식 범주 → 탭 대응과 탭 이름 키는 ToolbarPageViewModel.TabDefinitions 표 하나에 모았습니다. 탭을 더하거나 옮길 때는 이 표만 고치면 됩니다.

    탭 들어가는 형식 범주 탭 이름 문구
    전체 모두 새 키 toolbar.tab.all
    이미지 이미지, 벡터 기존 format.category.Image
    문서 PDF, 문서, 스프레드시트, 프레젠테이션, HWP, 텍스트, 전자책, 데이터 기존 format.category.Document
    동영상·소리 동영상, 오디오, 자막 새 키 toolbar.tab.media
    편집 도구(자르기 등)와 같은 형식으로 저장하는 프리셋(회전·크기·흑백 등). 형식 범주보다 먼저 적용 새 키 toolbar.tab.edit
    3D·CAD 3D 모델, CAD 새 키 toolbar.tab.model3d_cad
    지도 지리 정보 기존 format.category.Geo(한국어 "지리 정보")
    압축 압축 기존 format.category.Archive(한국어 "압축 파일")
    글꼴 글꼴 기존 format.category.Font
  • "전체" 탭: 첫 탭입니다.

  • 빈 탭: 숨깁니다. "전체" 말고 묶음 탭이 하나뿐이면 "전체"와 내용이 같아서 탭 줄을 숨기고 "전체"를 보여 줍니다(예: 오디오 도넛은 편집 프리셋만 있어 탭 줄이 없습니다).

  • 좁은 칸: 탭이 230px 칸을 넘으면 줄바꿈합니다. 탭 이름은 잘리지 않고, 방향키(좌우·위아래)로 모든 탭에 갈 수 있습니다. 확장자 없는 도넛(탭 9개)을 영어·한국어·스페인어·러시아어의 밝은·어두운 테마로 확인했습니다.

  • 그룹: 모든 탭 맨 앞에 보입니다.

  • 검색: 모든 탭에서 찾고, 결과가 있는 탭을 보여 줍니다. 이 도넛에서 숨긴 프리셋도 검색어에 걸리면 흐리게 보이고, 도넛과 같은 사유가 툴팁으로 나옵니다. 이 칩은 끌어넣기·더블클릭으로 추가할 수 없고, 우클릭 편집은 됩니다.

  • 탭 상태: 도넛을 바꾸면 "전체"로 돌아가고, 앞·뒷면을 뒤집을 때는 지금 탭을 유지합니다. 설정에는 저장하지 않습니다. 도넛을 바꿀 때 검색어를 지우는 Fix #425, #427: Donut toolbar counts both faces, search boxes clear #434([Bug]: Donut Toolbar Search Missing clear button and search state persists on profile switch #427)의 동작과 검색창 × 버튼은 그대로 두었습니다.

  • 새 그룹·새 프리셋: 목록에 남으면 그 항목이 보이는 탭으로 옮깁니다.

  • 도넛별 판정 캐시: 한 번 판정한 도넛을 다시 고르면 바로 채워집니다. 툴바 화면이 열려 있는 동안만 기억하고, 확장자·초기화·엔진·프리셋이 바뀌면 지금처럼 다시 판정합니다.

  • 판정 코드: PresetAvailability의 판정 순서는 건드리지 않았습니다(#326과 겹침 최소화).

  • UI 문구: 새 키 4개(toolbar.tab.all·media·edit·model3d_cad)를 프랑스어·네팔어·번체 중국어까지 13개 언어 모두에 넣었고, 나머지 다섯 탭 이름은 기존 format.category.* 문구를 씁니다. 프랑스어·네팔어는 각 파일에 이미 있는 용어(CAO, थ्रीडी)에 맞추었습니다.

구현 메모

  • 바꾼 파일: ToolbarPageViewModel.cs(탭·검색·캐시), ToolbarPage.axaml·ToolbarPage.axaml.cs(탭 줄, 위아래 방향키, 추가 막기), 13개 언어 파일. PresetAvailability, 설정 스키마, 패키지는 바꾸지 않았습니다.
  • 탭 줄: ListBox에 WrapPanel을 써서 칸을 넘으면 다음 줄로 내려갑니다. 좌우키는 ListBox 기본 동작을 쓰고, 위아래키는 윗·아랫줄에서 가장 가까운 탭으로 갑니다.
  • 캐시: 도넛별로 판정 결과를 기억합니다. 확장자 저장·초기화는 그 도넛만, 엔진 변경과 다른 창의 저장(LibraryChanged)은 전부, 프리셋 편집은 그 프리셋만 다시 판정합니다. 화면을 닫으면 캐시와 구독을 모두 정리합니다.
  • 시험: 모델 시험 18개(ToolbarEditorTests.cs), 실제 화면을 띄우는 시험 9개(ToolbarPaletteViewTests.cs), 렌더 시험 2개(9개 탭·230px·방향키, 검색으로 드러난 흐린 칩), 13개 언어 키 시험 1개를 더했습니다. 주요 단언은 코드를 일부러 되돌리는 변이로 실패하는 것을 확인했습니다.

How was it tested?

  • dotnet format --verify-no-changes
  • dotnet test: Core 462개 통과. App 863개 중 852개 통과, 10개 건너뜀, 1개 실패. 실패한 Engines_page_shows_versions_descriptions_and_download_speed는 main에서도 같이 실패합니다(제 Linux에 Ghostscript·LibreOffice가 설치되어 있음).
  • Tried it in the app (describe): macOS에서 Release 빌드를 빈 데이터 폴더로 띄워 확인했습니다. 이미지 도넛에서 탭 6개(전체 / 이미지 / 문서 / 동영상·소리 / 편집 / 3D·CAD)가 두 줄로 줄바꿈되고, 편집 탭은 회전·뒤집기만 보입니다. 'mp3'를 검색하면 이 도넛에서 쓸 수 없는 MP3 칩이 흐리게 나오고, 결과가 한 탭뿐이라 탭 줄이 숨겨집니다. 오디오 도넛은 묶음이 앞에 오고 탭 줄이 없습니다.

Screenshots (UI changes)

이미지 도넛 · 편집 탭 'mp3' 검색 · 흐린 칩 오디오 도넛 · 탭 줄 없음
image image image

(PR 작성 화면에 .omo/plans/toolbar-palette/step2/shots/의 파일을 끌어 넣으면 링크로 바뀝니다. 이미지 탭 장면은 mac-01-image-donut-image-tab.png입니다.)

Checklist

  • New UI strings are in all src/Filee.App/Assets/i18n/*.json files
  • New third-party code or binaries are listed in THIRD-PARTY-NOTICES.md (해당 없음)

@SeoJCalive

SeoJCalive commented Oct 23, 2026 •

Copy link
Copy Markdown
Contributor Author

@KnifeLemon 님, CI에서 실패한 ToolbarPaletteViewTests는 #351로 편집 프리셋(투명 테두리 자르기)이 늘어나 시험 기대값이 어긋난 것이라 고치는 중이었습니다.

올려 주신 #464을 확인하였는데 현재 수정 상태의 PR은 중지하고
#464 합친 상태에서도 툴바 시험을 후 필요하면 맞춘 뒤 통과하면 Ready로 바꾸면 될까요?

그리고 10k 스타 축하드립니다!!

@KnifeLemon

Copy link
Copy Markdown
Owner

@SeoJCalive 님, 네 그렇게 해 주시면 돼요. 축하도 감사합니다!

#464는 방금 main에 머지됐어요. main을 합친 뒤 툴바 시험을 맞춰 주시고, 통과하면 Ready로 바꿔 주세요. 참고로 #464에서 도넛 구성이 몇 가지 바뀌었어요.

그래서 편집 탭과 묶음 수 기대값이 달라질 수 있어요.

설정 스키마를 바꾸지 않으신 건 좋아요. 그사이 다른 언어(예: 태국어 #445)가 먼저 들어가면 그 파일의 새 문구 4개는 머지할 때 저희가 채울게요. 그 때문에 기다리실 필요는 없어요.

@KnifeLemon KnifeLemon added the feature New features label Oct 23, 2026
@KnifeLemon KnifeLemon self-assigned this Oct 23, 2026
…bar palette

The preset palette on the toolbar page grew long once every converter
showed up in one list. Split it into kind tabs and keep the per-donut
judgement so switching donuts stays instant.

- Tabs: All / Image (Image, Vector) / Document (Pdf, Document,
  Spreadsheet, Presentation, Hwp, Text, Ebook, Data) / Video & audio
  (Video, Audio, Subtitle) / Edit (tools, target *) / 3D & CAD /
  Map (Geo) / Archive / Font, mapped from format categories in one
  table. Empty tabs are hidden; the row is hidden when one kind tab
  would only repeat All. Tabs wrap inside the 230 px column and the
  arrow keys reach every tab. Groups lead every tab. Switching
  donuts returns to All (and clears the search, as KnifeLemon#427 does),
  flipping keeps the tab, nothing is saved.
- Search spans every tab and shows only the tabs with results. Presets
  this donut can't run are revealed dimmed with their reason; drag and
  double-click add are blocked, right-click edit still opens.
  PresetAvailability is unchanged.
- Cache: judgements are kept per donut for the life of the page and
  dropped on extension save, reset, engine change and preset
  edit/add/delete, including saves made from the radial window
  (LibraryChanged); the page's own saves don't clear other donuts.
- Tab names reuse format.category.* where they exist; four new keys
  (toolbar.tab.all/media/edit/model3d_cad) in all 13 locales.

Closes KnifeLemon#343
@SeoJCalive
SeoJCalive force-pushed the feature/toolbar-tabs branch from 7d8b923 to 936b5e3 Compare October 23, 2026 02:17
@SeoJCalive
SeoJCalive marked this pull request as ready for review October 23, 2026 02:53
@SeoJCalive

Copy link
Copy Markdown
Contributor Author

@KnifeLemon 님, #464가 들어간 main(61fd350) 위로 옮기고 툴바 시험을 맞췄습니다.

  • Merge #393, #432, #381 and #349 with their settings migrations renumbered #464 뒤로 오디오 도넛에도 동영상·소리 탭 프리셋(소리 압축·합치기 등)이 생겨 탭 줄이 보이게 됐습니다. 탭 규칙대로의 동작입니다.
  • 그래서 기본 오디오 도넛의 칩 목록을 고정해 두던 시험을, 실제 프리셋 기준으로 "각 종류 탭에는 그 종류 칩만 있고, 종류가 둘 이상일 때만 탭 줄이 보인다"를 확인하도록 바꿨습니다. 앞으로 기본 프리셋이 늘어도 깨지지 않습니다. "탭 줄 숨김"은 시험 안에서 만든 도넛으로 따로 확인하고 있습니다.
  • 본문의 "오디오 도넛은 탭 줄이 없습니다" 예시와 오디오 도넛 스크린샷은 Merge #393, #432, #381 and #349 with their settings migrations renumbered #464 이전 화면입니다. 지금은 편집 프리셋만 남는 도넛이나 검색 결과가 한 종류뿐일 때 탭 줄이 숨겨집니다.
  • 로컬에서는 빌드, dotnet format, App 시험을 통과했습니다(실패 1개는 main에서도 같은 환경 문제).

CI가 통과해서 Ready로 바꿨습니다.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

feature New features

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants