/
TabStickyNote.swift
150 lines (125 loc) · 7.21 KB
/
TabStickyNote.swift
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
//
// TabStickyNote.swift
// Mizuame
//
// Created by Nakamura Akira(3colorr) on 2023/05/25.
//
import SwiftUI
import StoreKit
struct TabStickyNote: View {
@AppStorage(SettingKeys.FontSize().key) private var fontSize: Int = SettingKeys.FontSize().initialValue
@AppStorage(SettingKeys.StickyNote().keyLineSpacing) private var lineSpacing: Int = SettingKeys.StickyNote().initialLineSpacing
@AppStorage(SettingKeys.StickyNote().keyWidth) private var width: Int = SettingKeys.StickyNote().initialWidth
@AppStorage(SettingKeys.StickyNote().keyHeight) private var height: Int = SettingKeys.StickyNote().initialHeight
@AppStorage(SettingKeys.MessageColor().keyTheme) private var messageTheme: String = SettingKeys.MessageColor().initialTheme
@AppStorage(SettingKeys.MessagebarColor().keyTheme) private var messagebarTheme: String = SettingKeys.MessagebarColor().initialTheme
@AppStorage(SettingKeys.StickyNoteColor().keyForeground) private var bodyForegroundTheme: String = SettingKeys.StickyNoteColor().initialForegroundTheme
@AppStorage(SettingKeys.StickyNoteColor().keyBackground) private var bodyBackgroundTheme: String = SettingKeys.StickyNoteColor().initialBackgroundTheme
@AppStorage(SettingKeys.FrameColor().keyTheme) private var frameTheme: String = SettingKeys.FrameColor().initialTheme
private let INIT_FONT_SIZE: Int = SettingKeys.FontSize().initialValue
private let INIT_LINE_SPACING: Int = SettingKeys.StickyNote().initialLineSpacing
private let INIT_WIDTH: Int = SettingKeys.StickyNote().initialWidth
private let INIT_HEIGHT: Int = SettingKeys.StickyNote().initialHeight
private let INIT_MESSAGE_THEME: String = SettingKeys.MessageColor().initialTheme
private let INIT_MESSAGEBAR_THEME: String = SettingKeys.MessagebarColor().initialTheme
private let INIT_BODY_FOREGROUND_THEME: String = SettingKeys.StickyNoteColor().initialForegroundTheme
private let INIT_BODY_BACKGROUND_THEME: String = SettingKeys.StickyNoteColor().initialBackgroundTheme
private let INIT_FRAME_THEME: String = SettingKeys.FrameColor().initialTheme
private var noteWidthFormatter = NumberFormatter()
private var noteHeightFormatter = NumberFormatter()
init() {
noteWidthFormatter.minimumIntegerDigits = 1
noteWidthFormatter.maximumIntegerDigits = 4
noteWidthFormatter.minimum = SettingKeys.StickyNote().minWidth
noteWidthFormatter.maximum = SettingKeys.StickyNote().maxWidth
noteHeightFormatter.minimumIntegerDigits = 1
noteHeightFormatter.maximumIntegerDigits = 4
noteHeightFormatter.minimum = SettingKeys.StickyNote().minHeight
noteHeightFormatter.maximum = SettingKeys.StickyNote().maxHeight
}
var body: some View {
VStack {
VStack(alignment: .leading) {
Text("settings.tab.stickynote.greeting")
.padding(EdgeInsets(top: 10, leading: 0, bottom: 5, trailing: 0))
}
StickyNotePreview(fontSize: fontSize, width: width, height: height, message: messageTheme, messagebar: messagebarTheme, bodyForeground: bodyForegroundTheme, bodyBackground: bodyBackgroundTheme, bodyFrame: frameTheme)
.padding(EdgeInsets(top: 5, leading: 0, bottom: 10, trailing: 0))
ScrollView {
VStack(alignment: .leading) {
HStack {
Text("settings.tab.stickynote.font.size")
.frame(width: 100, alignment: .leading)
Picker("", selection: $fontSize) {
ForEach(1..<41, id: \.self) { num in
Text("\(num)")
}
}
.frame(width: 60)
}
HStack {
Text("settings.tab.stickynote.linespacing")
.frame(width: 100, alignment: .leading)
Picker("", selection: $lineSpacing) {
ForEach(0..<21, id: \.self) { num in
Text("\(num)")
}
}
.frame(width: 60)
}
HStack {
Text("settings.tab.stickynote.window.size")
.frame(width: 100, alignment: .leading)
HStack {
Text("settings.tab.stickynote.window.size.width")
.frame(width: 60)
TextField("\(INIT_WIDTH)", value: $width, formatter: noteWidthFormatter)
.frame(width: 60)
.padding(EdgeInsets(top: 0, leading: -10, bottom: 0, trailing: 0))
}
HStack {
Text("settings.tab.stickynote.window.size.height")
.frame(width: 50)
TextField("\(INIT_HEIGHT)", value: $height, formatter: noteHeightFormatter)
.frame(width: 60)
.padding(EdgeInsets(top: 0, leading: -5, bottom: 0, trailing: 0))
}
}
Text("settings.tab.stickynote.theme")
ThemePalette(message: $messageTheme, messagebar: $messagebarTheme, bodyForeground: $bodyForegroundTheme, bodyBackground: $bodyBackgroundTheme, bodyFrame: $frameTheme)
.padding(EdgeInsets(top: 0, leading: 0, bottom: 0, trailing: 20))
Spacer()
HStack {
Text("settings.tab.stickynote.reset.title")
Button(action: {
self.fontSize = INIT_FONT_SIZE
self.lineSpacing = INIT_LINE_SPACING
self.width = INIT_WIDTH
self.height = INIT_HEIGHT
self.messageTheme = INIT_MESSAGE_THEME
self.messagebarTheme = INIT_MESSAGEBAR_THEME
self.bodyForegroundTheme = INIT_BODY_FOREGROUND_THEME
self.bodyBackgroundTheme = INIT_BODY_BACKGROUND_THEME
self.frameTheme = INIT_FRAME_THEME
}) {
Text("settings.tab.stickynote.reset.button.caption")
.padding(EdgeInsets(top: 2, leading: 10, bottom: 2, trailing: 10))
}
}
}
}
.padding(EdgeInsets(top: 10, leading: 20, bottom: 0, trailing: 20))
}
.frame(width: 400, height: 500)
}
}
struct TabGeneral_Previews: PreviewProvider {
static var previews: some View {
let localizations = ["en", "ja"]
ForEach(localizations, id: \.self) { lang in
TabStickyNote()
.previewDisplayName("lcal:\(lang)")
.environment(\.locale, .init(identifier: lang))
}
}
}