From e520a96021fd8bf763a02ecf0c5c8c38b7d6ab64 Mon Sep 17 00:00:00 2001 From: huihuisang <101007168+huihuisang@users.noreply.github.com> Date: Sun, 18 Feb 2024 13:52:32 +0800 Subject: [PATCH] Improve the layout of the sidebar --- Xcodes/Frontend/MainWindow.swift | 4 +-- Xcodes/Frontend/XcodeList/MainToolbar.swift | 20 +++++++++----- Xcodes/Frontend/XcodeList/XcodeListView.swift | 26 ------------------ .../Frontend/XcodeList/XcodeListViewRow.swift | 9 +++--- .../xcode.imageset/Contents.json | 12 ++++++++ .../Assets.xcassets/xcode.imageset/xcode.png | Bin 0 -> 23472 bytes Xcodes/Resources/Localizable.xcstrings | 10 +++++++ 7 files changed, 41 insertions(+), 40 deletions(-) create mode 100644 Xcodes/Resources/Assets.xcassets/xcode.imageset/Contents.json create mode 100644 Xcodes/Resources/Assets.xcassets/xcode.imageset/xcode.png diff --git a/Xcodes/Frontend/MainWindow.swift b/Xcodes/Frontend/MainWindow.swift index 6bbe1ee..80d0e85 100644 --- a/Xcodes/Frontend/MainWindow.swift +++ b/Xcodes/Frontend/MainWindow.swift @@ -16,11 +16,11 @@ struct MainWindow: View { @AppStorage("isShowingInfoPane") private var isShowingInfoPane = false @AppStorage("xcodeListCategory") private var category: XcodeListCategory = .all @AppStorage("isInstalledOnly") private var isInstalledOnly = false - + var body: some View { NavigationSplitViewWrapper { XcodeListView(selectedXcodeID: $selectedXcodeID, searchText: searchText, category: category, isInstalledOnly: isInstalledOnly) - .frame(minWidth: 250) + .frame(minWidth: 260) .layoutPriority(1) .alert(item: $appState.xcodeBeingConfirmedForUninstallation) { xcode in Alert(title: Text(String(format: localizeString("Alert.Uninstall.Title"), xcode.description)), diff --git a/Xcodes/Frontend/XcodeList/MainToolbar.swift b/Xcodes/Frontend/XcodeList/MainToolbar.swift index c64c1dd..b2c7aea 100644 --- a/Xcodes/Frontend/XcodeList/MainToolbar.swift +++ b/Xcodes/Frontend/XcodeList/MainToolbar.swift @@ -5,7 +5,8 @@ struct MainToolbarModifier: ViewModifier { @Binding var category: XcodeListCategory @Binding var isInstalledOnly: Bool @Binding var isShowingInfoPane: Bool - + @SwiftUI.Environment(\.openWindow) private var openWindow + func body(content: Content) -> some View { content .toolbar { toolbar } @@ -13,9 +14,8 @@ struct MainToolbarModifier: ViewModifier { private var toolbar: some ToolbarContent { ToolbarItemGroup { - ProgressButton( - isInProgress: appState.isUpdating, + isInProgress: appState.isUpdating, action: appState.update ) { Label("Refresh", systemImage: "arrow.clockwise") @@ -23,6 +23,7 @@ struct MainToolbarModifier: ViewModifier { .keyboardShortcut(KeyEquivalent("r")) .help("RefreshDescription") Spacer() + Button(action: { switch category { case .all: category = .release @@ -56,7 +57,7 @@ struct MainToolbarModifier: ViewModifier { } } .help("FilterAvailableDescription") - + Button(action: { isInstalledOnly.toggle() }) { @@ -65,11 +66,16 @@ struct MainToolbarModifier: ViewModifier { .foregroundColor(.accentColor) } else { Label("Filter", systemImage: "arrow.down.app") - } } .help("FilterInstalledDescription") - + + Button(action: { + openWindow(id: "platforms") + }) { + Label("Platforms", systemImage: "square.3.layers.3d") + } + .help("PlatformsDescription") } } } @@ -80,7 +86,7 @@ extension View { isInstalledOnly: Binding, isShowingInfoPane: Binding ) -> some View { - self.modifier( + modifier( MainToolbarModifier( category: category, isInstalledOnly: isInstalledOnly, diff --git a/Xcodes/Frontend/XcodeList/XcodeListView.swift b/Xcodes/Frontend/XcodeList/XcodeListView.swift index d68936d..fdbdfc8 100644 --- a/Xcodes/Frontend/XcodeList/XcodeListView.swift +++ b/Xcodes/Frontend/XcodeList/XcodeListView.swift @@ -43,32 +43,6 @@ struct XcodeListView: View { XcodeListViewRow(xcode: xcode, selected: selectedXcodeID == xcode.id, appState: appState) } .listStyle(.sidebar) - .safeAreaInset(edge: .bottom, spacing: 0) { - PlatformsPocket() - .padding() - } - } -} - -struct PlatformsPocket: View { - @SwiftUI.Environment(\.openWindow) private var openWindow - - var body: some View { - Button(action: { - openWindow(id: "platforms") } - ) { - VStack(spacing: 5) { - Image(systemName: "square.3.layers.3d") - .font(.title) - Text("Platforms") - .font(.callout) - } - .frame(width: 70, height: 70) - .background(.quaternary) - .clipShape(RoundedRectangle(cornerRadius: 5, style: .continuous)) - - } - .buttonStyle(.plain) } } diff --git a/Xcodes/Frontend/XcodeList/XcodeListViewRow.swift b/Xcodes/Frontend/XcodeList/XcodeListViewRow.swift index 55f431c..6c51600 100644 --- a/Xcodes/Frontend/XcodeList/XcodeListViewRow.swift +++ b/Xcodes/Frontend/XcodeList/XcodeListViewRow.swift @@ -30,9 +30,6 @@ struct XcodeListViewRow: View { Text(verbatim: path.string) .font(.caption) .foregroundColor(.secondary) - } else { - Text(verbatim: "") - .font(.caption) } } @@ -42,6 +39,7 @@ struct XcodeListViewRow: View { .padding(.trailing, 16) installControl(for: xcode) } + .padding(.vertical, 4) .contextMenu { switch xcode.installState { case .notInstalled: @@ -75,9 +73,10 @@ struct XcodeListViewRow: View { if let icon = xcode.icon { Image(nsImage: icon) } else { - Color.clear + Image("xcode") + .resizable() .frame(width: 32, height: 32) - .foregroundColor(.secondary) + .opacity(0.2) } } diff --git a/Xcodes/Resources/Assets.xcassets/xcode.imageset/Contents.json b/Xcodes/Resources/Assets.xcassets/xcode.imageset/Contents.json new file mode 100644 index 0000000..4c2a7f7 --- /dev/null +++ b/Xcodes/Resources/Assets.xcassets/xcode.imageset/Contents.json @@ -0,0 +1,12 @@ +{ + "images" : [ + { + "filename" : "xcode.png", + "idiom" : "universal" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Xcodes/Resources/Assets.xcassets/xcode.imageset/xcode.png b/Xcodes/Resources/Assets.xcassets/xcode.imageset/xcode.png new file mode 100644 index 0000000000000000000000000000000000000000..d8b43ba520a5cce3539eb70f1f4db5139890a9a4 GIT binary patch literal 23472 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 literal 0 HcmV?d00001 diff --git a/Xcodes/Resources/Localizable.xcstrings b/Xcodes/Resources/Localizable.xcstrings index 74a637f..39005ef 100644 --- a/Xcodes/Resources/Localizable.xcstrings +++ b/Xcodes/Resources/Localizable.xcstrings @@ -14716,6 +14716,16 @@ } } }, + "PlatformsDescription" : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Installed platforms" + } + } + } + }, "PlatformsList.Title" : { "extractionState" : "manual", "localizations" : {