diff --git a/punchnet/Views/Settings/SettingsState.swift b/punchnet/Views/Settings/SettingsState.swift index e591027..9593651 100644 --- a/punchnet/Views/Settings/SettingsState.swift +++ b/punchnet/Views/Settings/SettingsState.swift @@ -20,12 +20,12 @@ class SettingsState { var name: String } - enum MenuItem { - case accout - case network - case device - case system - case about + enum MenuItem: String, CaseIterable { + case accout = "账号" + case network = "网络" + case device = "设备" + case system = "软件" + case about = "关于" } var networks: [Network] diff --git a/punchnet/Views/Settings/SettingsView.swift b/punchnet/Views/Settings/SettingsView.swift index 8d7433f..6759865 100644 --- a/punchnet/Views/Settings/SettingsView.swift +++ b/punchnet/Views/Settings/SettingsView.swift @@ -9,15 +9,32 @@ import SwiftUI struct SettingsView: View { @State private var state = SettingsState() + @State private var hovering = false var body: some View { NavigationSplitView { - List { - SettingsMenuItemView(title: "账号", .accout, state: state) - SettingsMenuItemView(title: "网络", .network, state: state) - SettingsMenuItemView(title: "设备", .device, state: state) - SettingsMenuItemView(title: "软件", .system, state: state) - SettingsMenuItemView(title: "关于", .about, state: state) + List(SettingsState.MenuItem.allCases, id: \.self) { menu in + HStack(alignment: .center) { + Rectangle() + .frame(width: 3, height: 25) + .foregroundColor(self.state.currentMeun == menu ? .black : .clear) + + Text(menu.rawValue) + + Spacer() + } + .contentShape(Rectangle()) + .onTapGesture { + self.state.currentMeun = menu + } + .onHover { inside in + hovering = inside + if inside { + NSCursor.pointingHand.push() + } else { + NSCursor.pop() + } + } } .listStyle(.sidebar) .border(Color.red) @@ -45,32 +62,6 @@ struct SettingsView: View { } -struct SettingsMenuItemView: View { - var title: String - var role: SettingsState.MenuItem - @Bindable var state: SettingsState - - init(title: String, _ role: SettingsState.MenuItem, state: SettingsState) { - self.title = title - self.role = role - self.state = state - } - - var body: some View { - HStack(alignment: .center) { - Rectangle() - .frame(width: 3, height: 25) - .foregroundColor(self.state.currentMeun == role ? .black : .clear) - - Text(title) - .onTapGesture { - self.state.currentMeun = self.role - } - } - } -} - - #Preview { SettingsView() }