diff --git a/Xcodes/Frontend/Common/NavigationSplitViewWrapper.swift b/Xcodes/Frontend/Common/NavigationSplitViewWrapper.swift index 594c811..120cd77 100644 --- a/Xcodes/Frontend/Common/NavigationSplitViewWrapper.swift +++ b/Xcodes/Frontend/Common/NavigationSplitViewWrapper.swift @@ -26,7 +26,7 @@ struct NavigationSplitViewWrapper: View where Sidebar: View, De if #available(macOS 14, *) { sidebar - .navigationSplitViewColumnWidth(min: 250, ideal: 300) + .navigationSplitViewColumnWidth(min: 290, ideal: 290) } else { sidebar } @@ -39,7 +39,7 @@ struct NavigationSplitViewWrapper: View where Sidebar: View, De NavigationView { // The first column is the sidebar. sidebar - .frame(minWidth: 250) + .frame(minWidth: 300) detail } .navigationViewStyle(.columns) diff --git a/Xcodes/Frontend/MainWindow.swift b/Xcodes/Frontend/MainWindow.swift index 88b301d..ee04d21 100644 --- a/Xcodes/Frontend/MainWindow.swift +++ b/Xcodes/Frontend/MainWindow.swift @@ -16,7 +16,7 @@ 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) diff --git a/Xcodes/Frontend/XcodeList/MainToolbar.swift b/Xcodes/Frontend/XcodeList/MainToolbar.swift index c64c1dd..55a0c35 100644 --- a/Xcodes/Frontend/XcodeList/MainToolbar.swift +++ b/Xcodes/Frontend/XcodeList/MainToolbar.swift @@ -5,7 +5,7 @@ struct MainToolbarModifier: ViewModifier { @Binding var category: XcodeListCategory @Binding var isInstalledOnly: Bool @Binding var isShowingInfoPane: Bool - + func body(content: Content) -> some View { content .toolbar { toolbar } @@ -13,9 +13,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 +22,7 @@ struct MainToolbarModifier: ViewModifier { .keyboardShortcut(KeyEquivalent("r")) .help("RefreshDescription") Spacer() + Button(action: { switch category { case .all: category = .release @@ -56,7 +56,7 @@ struct MainToolbarModifier: ViewModifier { } } .help("FilterAvailableDescription") - + Button(action: { isInstalledOnly.toggle() }) { @@ -65,11 +65,9 @@ struct MainToolbarModifier: ViewModifier { .foregroundColor(.accentColor) } else { Label("Filter", systemImage: "arrow.down.app") - } } .help("FilterInstalledDescription") - } } } @@ -80,7 +78,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..e2ce3b6 100644 --- a/Xcodes/Frontend/XcodeList/XcodeListView.swift +++ b/Xcodes/Frontend/XcodeList/XcodeListView.swift @@ -45,7 +45,8 @@ struct XcodeListView: View { .listStyle(.sidebar) .safeAreaInset(edge: .bottom, spacing: 0) { PlatformsPocket() - .padding() + .padding(.horizontal) + .padding(.vertical, 8) } } } @@ -54,19 +55,21 @@ struct PlatformsPocket: View { @SwiftUI.Environment(\.openWindow) private var openWindow var body: some View { - Button(action: { - openWindow(id: "platforms") } + Button(action: { + openWindow(id: "platforms") + } ) { - VStack(spacing: 5) { + HStack(spacing: 5) { Image(systemName: "square.3.layers.3d") - .font(.title) - Text("Platforms") - .font(.callout) + .font(.title3.weight(.medium)) + Text("PlatformsDescription") } - .frame(width: 70, height: 70) - .background(.quaternary) - .clipShape(RoundedRectangle(cornerRadius: 5, style: .continuous)) - + .font(.body.weight(.medium)) + .padding(.horizontal) + .padding(.vertical, 12) + .frame(maxWidth: .infinity, alignment: .leading) + .background(.quaternary.opacity(0.75)) + .clipShape(RoundedRectangle(cornerRadius: 8, style: .continuous)) } .buttonStyle(.plain) } diff --git a/Xcodes/Frontend/XcodeList/XcodeListViewRow.swift b/Xcodes/Frontend/XcodeList/XcodeListViewRow.swift index 55f431c..60777d7 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.version.isPrerelease ? "xcode-beta" : "xcode") + .resizable() .frame(width: 32, height: 32) - .foregroundColor(.secondary) + .opacity(0.2) } } diff --git a/Xcodes/Resources/Assets.xcassets/xcode-beta.imageset/Contents.json b/Xcodes/Resources/Assets.xcassets/xcode-beta.imageset/Contents.json new file mode 100644 index 0000000..62beec5 --- /dev/null +++ b/Xcodes/Resources/Assets.xcassets/xcode-beta.imageset/Contents.json @@ -0,0 +1,12 @@ +{ + "images" : [ + { + "filename" : "Image.png", + "idiom" : "universal" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Xcodes/Resources/Assets.xcassets/xcode-beta.imageset/Image.png b/Xcodes/Resources/Assets.xcassets/xcode-beta.imageset/Image.png new file mode 100644 index 0000000..2bc9d7a Binary files /dev/null and b/Xcodes/Resources/Assets.xcassets/xcode-beta.imageset/Image.png differ 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 0000000..d8b43ba Binary files /dev/null and b/Xcodes/Resources/Assets.xcassets/xcode.imageset/xcode.png differ diff --git a/Xcodes/Resources/Localizable.xcstrings b/Xcodes/Resources/Localizable.xcstrings index c63266b..f93f2da 100644 --- a/Xcodes/Resources/Localizable.xcstrings +++ b/Xcodes/Resources/Localizable.xcstrings @@ -15542,6 +15542,16 @@ } } }, + "PlatformsDescription" : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Installed Platforms" + } + } + } + }, "PlatformsList.Title" : { "extractionState" : "manual", "localizations" : {