mirror of
https://github.com/neon443/ShhShell.git
synced 2026-03-11 21:36:17 +00:00
added ansipickerview
added selectAnsi to select an ansi col
This commit is contained in:
@@ -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()
|
||||
|
||||
48
ShhShell/Views/Themes/AnsiPickerView.swift
Normal file
48
ShhShell/Views/Themes/AnsiPickerView.swift
Normal 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())
|
||||
}
|
||||
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user