using System.Windows; using Microsoft.Extensions.DependencyInjection; using MergeHub.Services; using MergeHub.ViewModels; using MergeHub.Views; using UbisamBase.Core.Modules; using UbisamBase.Core.Setup; namespace MergeHub { /// /// UbisamBase.Shell.exe 가 리플렉션으로 찾아 로드하는 단일 진입점. /// 이 dll 자체는 실행 파일이 아니다. /// public class AppSetup : IAppSetup { public string GetAppName() => "MergeHub - 사내 Git Merge/Diff"; public void RegisterViews(ITabManager manager) { // 머지툴은 3분할 비교라 가로 공간이 곧 성능이다. // 셸 기본 여백(26,22)을 없애고 창 전체를 쓴다 - 안쪽 여백은 HomeView가 직접 준다. // 이 키는 테마 전환에도 유지되므로 한 번만 덮어쓰면 되고, // ShellWindow가 창 생성 시점에 읽어가므로 RegisterViews 안에서 정해야 한다. if (Application.Current is { } app) app.Resources["Ubisam.Metric.ContentPadding"] = new Thickness(0); // 탭 순서는 실제 작업 순서를 따른다. // 폴더 비교로 "어느 파일이 다른가"를 먼저 보고 → 그 파일을 골라 파일 비교로 들어가고 // → 필요하면 Git 으로 커밋한다. // 폴더 비교에서 항목을 더블클릭하면 파일 비교 탭으로 넘어가므로 흐름이 이어진다. manager.AddMain(Icon.Folder, ViewIds.Folder, "폴더 비교"); manager.AddMain(Icon.Document, ViewIds.Home, "파일 비교"); manager.AddMain(Icon.Link, ViewIds.Git, "Git"); } public void RegisterSettings(ITabManager manager) { manager.AddSettingsSub(TabManager.SettingsTabKey, "MergeHub"); } public void RegisterServices(IServiceCollection services) { // Git 조작 계층. Repository 핸들 하나를 화면 전체가 공유하므로 싱글턴. services.AddSingleton(); // 홈(머지툴) 탭과 Git 탭이 함께 보는 저장소 상태. 호출 직렬화도 여기서 한다. services.AddSingleton(); } } /// AddMain/AddSub 에서 탭을 다시 찾을 때 쓰는 키. public static class ViewIds { public const string Home = "MergeHub.Home"; public const string Folder = "MergeHub.Folder"; public const string Git = "MergeHub.Git"; } }