added ansipickerview

added selectAnsi to select an ansi col
This commit is contained in:
neon443
2025-07-03 16:47:16 +01:00
parent 288b37a0d6
commit fdc5c4c503
4 changed files with 58 additions and 24 deletions

View File

@@ -67,6 +67,11 @@ class HostsManager: ObservableObject, @unchecked Sendable {
task.resume()
}
func selectAnsi(_ ansi: Int) {
withAnimation { selectedAnsi = ansi }
saveThemes()
}
func selectTheme(_ selectedTheme: Theme) {
withAnimation { self.selectedTheme = selectedTheme }
saveThemes()

View File

@@ -0,0 +1,48 @@
//
// AnsiPickerView.swift
// ShhShell
//
// Created by neon443 on 03/07/2025.
//
import SwiftUI
struct AnsiPickerView: View {
@ObservedObject var hostsManager: HostsManager
var body: some View {
GeometryReader { geo in
VStack(spacing: 0) {
ForEach(1...2, id: \.self) { row in
HStack(spacing: 0) {
ForEach(1...8, id: \.self) { col in
let index = (row * col)-1
var isSelected: Bool { hostsManager.selectedAnsi == index }
ZStack {
Rectangle()
.fill(Color.blue)
Rectangle()
.fill(hostsManager.selectedTheme.ansi[index].suiColor)
.padding(isSelected ? 5 : 0)
.clipShape(
RoundedRectangle(
cornerRadius: isSelected ? 10 : 0
)
)
.onTapGesture {
hostsManager.selectAnsi(index)
}
}
}
}
}
}
.clipShape(RoundedRectangle(cornerRadius: 15))
.frame(width: 400, height: 100)
}
}
}
#Preview {
AnsiPickerView(hostsManager: HostsManager())
}

View File

@@ -34,30 +34,7 @@ struct ThemeManagerView: View {
.ignoresSafeArea(.all)
GeometryReader { geo in
VStack {
VStack(spacing: 0) {
HStack(spacing: 0) {
ForEach(0..<8, id: \.self) { index in
Rectangle()
.fill(hostsManager.selectedTheme.ansi[index].suiColor)
.onTapGesture {
hostsManager.selectedAnsi = index
hostsManager.saveThemes()
}
}
}
HStack(spacing: 0) {
ForEach(8..<16, id: \.self) { index in
Rectangle()
.fill(hostsManager.selectedTheme.ansi[index].suiColor)
.onTapGesture {
hostsManager.selectedAnsi = index
hostsManager.saveThemes()
}
}
}
}
.clipShape(RoundedRectangle(cornerRadius: 15))
.frame(maxWidth: geo.size.width, maxHeight: geo.size.height/2)
AnsiPickerView(hostsManager: hostsManager)
let columns: Int = max(1, Int((geo.size.width - 2*spacing) / (minColWidth + spacing)))
let layout = Array(repeating: grid, count: columns)