ux: FormatShift Utility 디자인을 메인 윈도우에 충실히 재현
새 메인 윈도우 (1280x960, dark minimal): - 320px 사이드바 — Target Format(JPG), Encoding Quality 슬라이더(파란색 fill + 흰 thumb), Output Destination, Skip/Rename/Replace 세그먼트, Stats Box, Processing Queue 버튼(disabled→enabled 상태 전이) - 메인 영역 — pill 탭 3개(Active Queue / Preview / Past Results), 액션 버튼 (Register Menu / Diagnose / Export Log / Clear All) - Past Results — 날짜별 그룹화, "Today/Yesterday" 헤더 + Session Savings 뱃지, 파일 아이콘(PDF/PNG/HEIC/JPG/...), 사이즈/savings/status 컬럼 - Active Queue — 빈 상태 드롭존 + 파일 행, 행 클릭 시 Preview 자동 전환 - Drop hint overlay — 파일 끌어올 때 흐릿한 가이드 표시 핵심 신규 인프라: - FormatShiftTheme.xaml — 디자인 토큰(색/타이포/슬라이더 스타일/탭 pill 스타일/ 세그먼트 스타일/primary·secondary 버튼) 전부 - PreviewService — 이미지/RAW(Magick), HEIC(libheif decode), PDF(PDFium)을 720px 긴변 BitmapSource로 렌더. DOCX/HWP/HTML은 안내 문구 fallback - HistoryStore — 변환 결과 누적(메모리), 날짜별 group + session savings 합산 - Export Log — Past Results를 CSV/JSON으로 저장 기존 기능 통합: - 사이드바 옵션이 ConvertOptions에 매핑 (Quality, Output Path, Conflict) - Process Queue 버튼이 ConvertManyAsync 호출 → 결과를 History에 누적 - Register Menu / Diagnose 액션 유지 Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
parent
8065bf7373
commit
01467a4d27
5 changed files with 1701 additions and 278 deletions
37
src/EverythingToJpeg.Core/HistoryStore.cs
Normal file
37
src/EverythingToJpeg.Core/HistoryStore.cs
Normal file
|
|
@ -0,0 +1,37 @@
|
|||
using System.Collections.ObjectModel;
|
||||
|
||||
namespace EverythingToJpeg.Core;
|
||||
|
||||
public sealed record HistoryEntry(
|
||||
DateTime Timestamp,
|
||||
string SourcePath,
|
||||
string SourceFormat,
|
||||
long SourceSizeBytes,
|
||||
long OutputSizeBytes,
|
||||
int OutputCount,
|
||||
string? MetaLine,
|
||||
ConvertStatus Status,
|
||||
string? Message)
|
||||
{
|
||||
public long SavingsBytes => SourceSizeBytes - OutputSizeBytes;
|
||||
|
||||
public DateOnly Date => DateOnly.FromDateTime(Timestamp);
|
||||
}
|
||||
|
||||
public sealed class HistoryStore
|
||||
{
|
||||
private readonly ObservableCollection<HistoryEntry> _entries = new();
|
||||
|
||||
public ReadOnlyObservableCollection<HistoryEntry> Entries { get; }
|
||||
|
||||
public HistoryStore()
|
||||
{
|
||||
Entries = new ReadOnlyObservableCollection<HistoryEntry>(_entries);
|
||||
}
|
||||
|
||||
public void Add(HistoryEntry entry) => _entries.Insert(0, entry);
|
||||
|
||||
public void Clear() => _entries.Clear();
|
||||
|
||||
public int Count => _entries.Count;
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue