3
3
// LogParser
4
4
//
5
5
// Created by Tyler Wilson on 3/13/20.
6
- // Copyright © 2020 Tyler Wilson. All rights reserved.
6
+ // Copyright © 2022 Tyler Wilson. All rights reserved.
7
7
//
8
8
9
9
import SwiftUI
@@ -30,15 +30,6 @@ struct LineView: View {
30
30
}
31
31
}
32
32
33
- var dateRangeText : String {
34
- if ( log. lineNum. count > 1 ) {
35
- return " \( Data . dateToShortTextFormatter. string ( from: log. dateAtLine [ log. lineNum [ 0 ] ] !! ) ) - " +
36
- " \( Data . dateToShortTextFormatter. string ( from: log. dateAtLine [ log. lineNum [ log. lineNum. count - 1 ] ] !! ) ) "
37
- } else {
38
- return " \( Data . dateToShortTextFormatter. string ( from: log. dateAtLine [ log. lineNum [ 0 ] ] !! ) ) "
39
- }
40
- }
41
-
42
33
var body : some View {
43
34
VStack {
44
35
//Basic View
@@ -48,16 +39,16 @@ struct LineView: View {
48
39
. foregroundColor ( Color . secondary)
49
40
50
41
Text ( verbatim: log. title. rawValue) . foregroundColor ( colorTitle ( title: log. title) )
51
- Text ( log. process) . foregroundColor ( Color . uiGreen)
52
- if ( filter. ignoreCase) {
53
- StyledText ( verbatim: log. text)
54
- . style ( . highlight( ) , ranges: { $0. lowercased ( ) . ranges ( of: filter. searchText. lowercased ( ) ) } )
55
- . foregroundColor ( Color . uiWhite)
56
- } else {
57
- StyledText ( verbatim: log. text)
58
- . style ( . highlight( ) , ranges: { $0. ranges ( of: filter. searchText) } )
42
+ StyledText ( verbatim: log. process)
43
+ . style ( . highlight( ) , ranges: {
44
+ filter. ignoreCase ? $0. lowercased ( ) . ranges ( of: filter. searchText. lowercased ( ) ) : $0. ranges ( of: filter. searchText)
45
+ } )
46
+ . foregroundColor ( Color . uiGreen)
47
+ StyledText ( verbatim: log. text)
48
+ . style ( . highlight( ) , ranges: {
49
+ filter. ignoreCase ? $0. lowercased ( ) . ranges ( of: filter. searchText. lowercased ( ) ) : $0. ranges ( of: filter. searchText)
50
+ } )
59
51
. foregroundColor ( Color . uiWhite)
60
- }
61
52
} . onHover ( perform: { val in
62
53
if ( val) {
63
54
NSCursor . pointingHand. set ( )
@@ -72,18 +63,22 @@ struct LineView: View {
72
63
73
64
Spacer ( )
74
65
75
- Button ( dateRangeText, action: {
76
- self . log. showDetails = !self . log. showDetails
77
- self . data. toggleShowDetails ( self . log)
78
- } ) . foregroundColor ( . uiBlue)
79
- . buttonStyle ( PlainButtonStyle ( ) )
80
- . onHover ( perform: { val in
81
- if ( val) {
82
- NSCursor . pointingHand. set ( )
83
- } else {
84
- NSCursor . arrow. set ( )
85
- }
86
- } )
66
+ StyledText ( verbatim: Data . dateRangeText ( log) )
67
+ . style ( . highlight( ) , ranges: {
68
+ filter. ignoreCase ? $0. lowercased ( ) . ranges ( of: filter. searchText. lowercased ( ) ) : $0. ranges ( of: filter. searchText)
69
+ } )
70
+ . foregroundColor ( . uiBlue)
71
+ . onHover ( perform: { val in
72
+ if ( val) {
73
+ NSCursor . pointingHand. set ( )
74
+ } else {
75
+ NSCursor . arrow. set ( )
76
+ }
77
+ } )
78
+ . onTapGesture {
79
+ self . log. showDetails = !self . log. showDetails
80
+ self . data. toggleShowDetails ( self . log)
81
+ }
87
82
}
88
83
. padding ( . trailing, 5 )
89
84
. opacity ( opacity)
@@ -98,10 +93,13 @@ struct LineView: View {
98
93
//Add line, date and thread
99
94
100
95
Text ( " line \( num) : " )
101
- . foregroundColor ( . secondary)
102
- Text ( " \( Data . dateToLongTextFormatter. string ( from: self . log. dateAtLine [ num] !! ) ) " )
96
+ . foregroundColor ( . secondary)
97
+ StyledText ( verbatim: " \( Data . dateToLongTextFormatter. string ( from: self . log. dateAtLine [ num] !! ) ) " )
98
+ . style ( . highlight( ) , ranges: { filter. includeTrace ? ( filter. ignoreCase ? $0. lowercased ( ) . ranges ( of: filter. searchText. lowercased ( ) ) : $0. ranges ( of: filter. searchText) ) : [ ] } )
103
99
. foregroundColor ( Color . uiBlue)
104
- Text ( " [ \( self . log. threadAtLine [ num] !) ] " )
100
+
101
+ StyledText ( verbatim: " [ \( self . log. threadAtLine [ num] !) ] " )
102
+ . style ( . highlight( ) , ranges: { filter. includeTrace ? ( filter. ignoreCase ? $0. lowercased ( ) . ranges ( of: filter. searchText. lowercased ( ) ) : $0. ranges ( of: filter. searchText) ) : [ ] } )
105
103
. foregroundColor ( Color . uiPurple)
106
104
}
107
105
}
@@ -113,7 +111,11 @@ struct LineView: View {
113
111
HStack {
114
112
VStack ( alignment: . leading) {
115
113
HStack {
116
- Text ( " Trace at line \( selectedLineNum!) : " ) . bold ( ) . foregroundColor ( Color . secondary)
114
+ if #available( macOS 12 . 0 , * ) {
115
+ Text ( " Trace at line \( selectedLineNum!) : " ) . bold ( ) . foregroundColor ( Color . secondary) . textSelection ( . enabled)
116
+ } else {
117
+ Text ( " Trace at line \( selectedLineNum!) : " ) . bold ( ) . foregroundColor ( Color . secondary)
118
+ }
117
119
118
120
Button ( " Open in Terminal " , action: {
119
121
let appleScript1 = " tell app \" Terminal \" to do script \" nano + \( self . selectedLineNum! + 1 ) ' \( self . data. getFilePath ( ) ) ' \" "
@@ -145,7 +147,12 @@ struct LineView: View {
145
147
Button ( " Copy to clipboard " , action: {
146
148
let pasteboard = NSPasteboard . general
147
149
pasteboard. declareTypes ( [ NSPasteboard . PasteboardType. string] , owner: nil )
148
- pasteboard. setString ( self . log. traceAtLine [ self . selectedLineNum!] !, forType: NSPasteboard . PasteboardType. string)
150
+ var stringToCopy = Data . dateToLongTextFormatter. string ( from: self . log. dateAtLine [ self . selectedLineNum!] !! ) + " "
151
+ stringToCopy += " [ " + self . log. title. rawValue + " ] "
152
+ stringToCopy += " [ " + self . log. threadAtLine [ self . selectedLineNum!] ! + " ] "
153
+ stringToCopy += " [ " + self . log. process + " ] - "
154
+ stringToCopy += self . log. traceAtLine [ self . selectedLineNum!] !
155
+ pasteboard. setString ( stringToCopy, forType: NSPasteboard . PasteboardType. string)
149
156
self . hasCopied = true
150
157
} )
151
158
. onHover ( perform: { val in
@@ -160,14 +167,15 @@ struct LineView: View {
160
167
}
161
168
. frame ( minWidth: 350 )
162
169
163
- if ( filter . ignoreCase ) {
170
+ if #available ( macOS 12 . 0 , * ) {
164
171
StyledText ( verbatim: log. traceAtLine [ selectedLineNum!] !)
165
- . style ( . highlight( ) , ranges: { $0. lowercased ( ) . ranges ( of: filter. searchText. lowercased ( ) ) } )
172
+ . style ( . highlight( ) , ranges: { filter. includeTrace ? ( filter. ignoreCase ? $0. lowercased ( ) . ranges ( of: filter. searchText. lowercased ( ) ) : $0. ranges ( of: filter. searchText) ) : [ ] } )
173
+ . textSelection ( . enabled)
166
174
. frame ( maxWidth: 800 )
167
175
. fixedSize ( ) //magic to make the textbox fit
168
176
} else {
169
177
StyledText ( verbatim: log. traceAtLine [ selectedLineNum!] !)
170
- . style ( . highlight( ) , ranges: { $0. ranges ( of: filter. searchText) } )
178
+ . style ( . highlight( ) , ranges: { filter . includeTrace ? ( filter . ignoreCase ? $0. lowercased ( ) . ranges ( of: filter. searchText. lowercased ( ) ) : $0 . ranges ( of : filter . searchText ) ) : [ ] } )
171
179
. frame ( maxWidth: 800 )
172
180
. fixedSize ( ) //magic to make the textbox fit
173
181
}
@@ -240,6 +248,7 @@ extension String {
240
248
}
241
249
}
242
250
251
+ @available ( macOS 12 . 0 , * )
243
252
struct LineView_Previews : PreviewProvider {
244
253
static var previews : some View {
245
254
LineView ( filter: . constant( Filter ( showErrors: true , showWarns: true , searchText: " here " , includeTrace: true , ignoreCase: true ) ) , log: Log ( lineNum: [ 1 , 2 ] ,
0 commit comments