-
Notifications
You must be signed in to change notification settings - Fork 0
/
about.tcl
277 lines (235 loc) · 13.5 KB
/
about.tcl
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
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
namespace eval About {
variable icondir
variable tk_version
variable bwidget_version
variable snit_version
variable copyright_year
variable donateUrl
variable BTC
variable config
variable keystrokes
set tk_version [package version Tk]
set bwidget_version [package version BWidget]
set snit_version [package version snit]
set icondir $::APP_DIR/icons
set copyright_year "2013-2014"
set donateUrl "http://qweex.com/donate"
set BTC "1G6cCKnhbESiBXLprxNjzjFDZsES4tH9ZM"
set LTC "LRthYyVMBUJJqkoJTnnWrTQpuATWfv5s7g"
set config(timeout) {"(integer)" "the time in milliseconds to wait for a server to connect"}
set config(raiseNewTabs) {"(boolean)" "when opening a new tab if you want to immediately switch to it"}
set config(useTheme) {"(boolean)" "if you want to use ttk themed Tk widgets"}
set config(defaultQuit) {"(string)" "the default message when issuing the /quit command or pressing the Quit button"}
set config(defaultKick) {"(string)" "the default message when issuing the /kick command or using the Ban/Kick menu)"}
set config(defaultBan) {"(string)" "the default message when issuing the /kb command or using the Ban/Kick menu; used specifically for the Kick message in kickbans)"}
set config(defaultPart) {"(string)" "the default message when issuing the /part command or pressing the Part button)"}
set config(defaultAway) {"(string)" "the default message when issuing the /away command or pressing the Away button"}
set config(logServers) {"(boolean)" "if you want all messages to be logged for servers"}
set config(logChannels) {"(boolean)" "if you want all messages to be logged for channels"}
set config(logPMs) {"(boolean)" "if you want all messages to be logged for PMs"}
set config(logDir) {"(string)" "the location of the log"}
set config(popupTimeout) {"(integer)" "the duration in milliseconds the popup notification for mentions should stay on the screen; set to 0 for it to stay indefinitely until manually dismissed"}
set config(popupLocation) {"(nsew)" "the location on the screen for the popup; should contain one of 'n' or 's' for the vertical and one of 'e' or 'w' for the horizontal; example: 'nw'"}
set config(popupFont) {"(list)" "the font to be used in the mention popup; see the Tcl/Tk documentation on fonts for syntax"}
set config(maxSendHistory) {"(integer)" "how many of your past commands to keep"}
set config(maxScrollback) {"(integer)" "how many lines on screen the chats should be limited"}
set config(mentionColor) {"(string/hex)" "the color to change a tab to when it has been mentioned; can use the strings builtin to Tcl/Tk or a custom RGB value"}
set config(mentionSound) {"(string)" "the path to the sound file to be played when you are mentioned; set to the empty string if you want to disable sounds"}
set config(bookmarks) {"" "bookmarks are slightly more complicated, in that they are stored in the array 'bookmarks' with a list of the values needed to connect. If any channels are given, they are joined automatically.\nSyntax: bookmarks($nickname) \{$server $port $nick $channel1 $channel2 ...\}"}
set config(toolbarHidden) {"boolean" "hides the toolbar by default"}
# Key strokes
set keystrokes [list]
if { $::PLATFORM == $::PLATFORM_MAC } {
lappend keystrokes [list "⌘F" "Find"]
lappend keystrokes [list "⌘G" "Find Next"]
for {set i 1} {$i < 10} {incr i} {
lappend keystrokes [list "⌘$i" "Nick completion"]
}
lappend keystrokes [list "⌘0" "Nick completion"]
} else {
lappend keystrokes [list "Ctrl+F" "Find"]
lappend keystrokes [list "F3" "Find Next"]
for {set i 1} {$i < 10} {incr i} {
lappend keystrokes [list "Alt+$i" "Switch to tab $i"]
}
lappend keystrokes [list "Alt+0" "Switch to tab 10"]
}
lappend keystrokes [list "Up/Down" "Scroll through previous sent messages"]
lappend keystrokes [list "Tab" "Nick completion"]
lappend keystrokes [list "F10" "Toggle Toolbar"]
}
proc About::show {} {
if [winfo exists .aboutDialog] {
Main::foreground_win .aboutDialog
return
}
toplevel .aboutDialog
wm title .aboutDialog "About"
wm maxsize .aboutDialog 600 400
wm resizable .aboutDialog 0 0
set notebook [NoteBook .aboutDialog.nb]
$notebook compute_size
pack $notebook -fill both -expand yes -padx 4 -pady 4
#################### About tab ####################
set page [$notebook insert end about -text "About"]
$notebook raise [$notebook page 0]
set theFrame [frame $page.frame]
pack $theFrame -fill both -expand 1
set builtonString ""
set builtonString "${builtonString} Tcl v[info patchlevel]\n"
set builtonString "${builtonString} Tk v$About::tk_version\n"
set builtonString "${builtonString} BWidget v$About::bwidget_version\n"
set builtonString "${builtonString} snit v$About::snit_version\n"
xlabel $theFrame.icon -image [image create photo -file $About::icondir/butterfly-icon_192.gif]
xlabel $theFrame.title -text "$Main::APP_NAME $Main::APP_VERSION" -font {Arial 25}
xlabel $theFrame.cwith -text "Compiled with:\n$builtonString" -justify left
xlabel $theFrame.builton -text "Built on $Main::APP_BUILD_DATE"
xlabel $theFrame.copyright -text "Copyright $About::copyright_year Jon Petraglia of Qweex"
xlabel $theFrame.license -text "Released under the BSD 3-clause license"
grid config $theFrame.icon -row 0 -column 0 -padx 5 -sticky "w" -rowspan 5
grid config $theFrame.title -row 0 -column 1 -padx 5 -sticky "w"
grid config $theFrame.cwith -row 1 -column 1 -padx 5 -sticky "w"
grid config $theFrame.builton -row 2 -column 1 -padx 5 -sticky "w"
grid config $theFrame.copyright -row 3 -column 1 -padx 5 -sticky "w"
grid config $theFrame.license -row 4 -column 1 -padx 5 -sticky "w"
label $theFrame.hr -foreground grey \
-text "_________________________________________________________________"
grid $theFrame.hr -row 5 -column 0 -padx 5 -pady 15 -columnspan 2
# Donate
xlabel $theFrame.donate -text "Like Psyche? Support the developer." -foreground blue
set defaultfont [lappend [getDefaultFont $theFrame.donate] -underline true]
$theFrame.donate configure -font $defaultfont
$theFrame.donate configure -cursor $Main::cursor_link
grid config $theFrame.donate -row 6 -column 0 -padx 5 -columnspan 2 -pady 15
bind $theFrame.donate <ButtonRelease> {platformOpen $About::donateUrl}
# Crypto coins
xlabel $theFrame.btc_l -text "BTC"
xentry $theFrame.btc -textvariable About::BTC -state readonly -width 35 -foreground black
xlabel $theFrame.ltc_l -text "LTC"
xentry $theFrame.ltc -textvariable About::LTC -state readonly -width 35 -foreground black
grid config $theFrame.btc_l -row 7 -column 0 -padx 5 -sticky "e"
grid config $theFrame.btc -row 7 -column 1 -padx 5 -sticky "w"
grid config $theFrame.ltc_l -row 8 -column 0 -padx 5 -sticky "e"
grid config $theFrame.ltc -row 8 -column 1 -padx 5 -sticky "w"
#################### Config tab ####################
set page [$notebook insert end config -text "Config"]
$notebook raise [$notebook page 0]
set theFrame [frame $page.frame]
pack $theFrame -fill both -expand 1
# Scroll window content
set sw [ScrolledWindow $theFrame.sv -background white ]
set sf [ScrollableFrame $sw.scrollable -background white]
$sw setwidget $sf
set options [$sf getframe]
# Headers
xlabel $options.a -text "Variable" -background white
set defaultfont [lappend [getDefaultFont $options.a] -underline true]
$options.a configure -font $defaultfont ;#TODO how do get real font size + 2
grid config $options.a -row 0 -column 0 -padx 2 -pady 2 -sticky "w"
xlabel $options.b -text "Type" -background white
$options.b configure -font $defaultfont ;#TODO how do get real font size + 2
grid config $options.b -row 0 -column 1 -padx 2 -pady 2 -sticky "w"
xlabel $options.c -text "Description" -background white
$options.c configure -font $defaultfont ;#TODO how do get real font size + 2
grid config $options.c -row 0 -column 2 -padx 2 -pady 2 -sticky "w"
set i 1
foreach c [array names About::config] {
xlabel $options.a$i -text $c -background white
set defaultfont [lappend [getDefaultFont $options.a$i] -underline true]
$options.a$i configure -font defaultFont ;#TODO how do get real font size
grid config $options.a$i -row $i -column 0 -padx 2 -pady 2 -sticky "w"
xlabel $options.b$i -text [lindex $About::config($c) 0] -background white
grid config $options.b$i -row $i -column 1 -padx 2 -pady 2 -sticky "w"
xlabel $options.c$i -text [lindex $About::config($c) 1] -background white -justify left
grid config $options.c$i -row $i -column 2 -padx 2 -pady 2 -sticky "w"
incr i
}
pack $sw -fill both -expand 1 -padx 2
# Info text
xlabel $theFrame.locationL -text "\nPsyche's configuration is stored in a Tcl file located at:" -anchor w
pack $theFrame.locationL -fill x -expand 1
xlabel $theFrame.location -text "$Pref::prefFile" -anchor w -foreground blue
#$theFrame.location configure -font [lappend [$theFrame.location cget -font] -underline true] ;#TODO: reliable way of getting font size
$theFrame.location configure -font [list underline] ;#TODO: reliable way of getting font size
pack $theFrame.location -anchor w
$theFrame.location configure -cursor $Main::cursor_link
bind $theFrame.location <ButtonRelease> {platformOpen $Pref::prefFile}
#################### Keyboard tab ####################
set page [$notebook insert end keyboard -text "Keyboard"]
$notebook raise [$notebook page 0]
set theFrame [frame $page.frame]
pack $theFrame -fill both -expand 1
# Scroll window content
set sw [ScrolledWindow $theFrame.sv -background white ]
set sf [ScrollableFrame $sw.scrollable -background white]
$sw setwidget $sf
set options [$sf getframe]
# Headers
xlabel $options.a -text "Keys" -background white
set defaultfont [lappend [getDefaultFont $options.a] -underline true]
$options.a configure -font $defaultfont ;#TODO how do get real font size
grid config $options.a -row 0 -column 0 -padx 2 -pady 2 -sticky "w"
xlabel $options.b -text "Action" -background white
$options.b configure -font $defaultfont ;#TODO how do get real font size
grid config $options.b -row 0 -column 1 -padx 16 -pady 2 -sticky "w"
set i 1
foreach keyAndAction $About::keystrokes {
xlabel $options.a$i -text [lindex $keyAndAction 0] -background white
set defaultfont [lappend [getDefaultFont $options.a$i] -underline true]
$options.a$i configure -font [lappend [$options.a$i cget -font] -size 9 -weight bold] ;#TODO how do get real font size
grid config $options.a$i -row $i -column 0 -padx 2 -sticky "w"
xlabel $options.b$i -text [lindex $keyAndAction 1] -background white
grid config $options.b$i -row $i -column 1 -padx 16 -sticky "w"
incr i
}
pack $sw -fill both -expand 1 -padx 2
#################### License tab ####################
set page [$notebook insert end license -text "License"]
$notebook raise [$notebook page 0]
set theFrame [frame $page.frame]
pack $theFrame -fill both -expand 1
# Scroll window content
set sw [ScrolledWindow $theFrame.sv -background white ]
set sf [ScrollableFrame $sw.scrollable -background white]
$sw setwidget $sf
set license [$sf getframe]
# Header
xlabel $license.header -text "BSD 3-Clause License" -background white
$license.header configure -font [lappend [getDefaultFont $license.header] -weight bold -underline true]
# Read in dat license!
set fp [open "$::APP_DIR/LICENSE" r]
xlabel $license.content -text "[read $fp]" -background white
close $fp
# Pack it in
pack $license.header -expand 1
pack $license.content -fill both -expand 1
pack $sw -fill both -expand 1 -padx 2
# Bindings for scrollviews
bind .aboutDialog <MouseWheel> "set_scroll_helper $notebook $sf %X %Y \[expr %D * -1\] y "
bind .aboutDialog <4> "set_scroll_helper $notebook $sf %X %Y -1 y"
bind .aboutDialog <5> "set_scroll_helper $notebook $sf %X %Y 1 y"
bind .aboutDialog <Control-4> "set_scroll_helper $notebook $sf %X %Y -1 x"
bind .aboutDialog <Control-5> "set_scroll_helper $notebook $sf %X %Y 1 x"
bind .aboutDialog <Control-MouseWheel> "set_scroll_helper $notebook $sf %X %Y \[expr %D * -1\] x "
}
proc platformOpen { whatwhat } {
Log D "Attempting to open ${whatwhat}"
if {$::PLATFORM == $::PLATFORM_WIN} {
Log V "Opening on Windows"
exec {*}[auto_execok start] [regsub -all "\&" [regsub -all "\\\^" $whatwhat "^^"] "^&"]
} elseif {$::PLATFORM == $::PLATFORM_MAC} {
Log V "Opening on Mac"
exec "open" $whatwhat
} else {
Log V "Opening on Etc"
if { [catch {exec "xdg-open" $whatwhat}] } {
Log E "Could not open $whatwhat"
}
}
}
proc getDefaultFont {ctrl} {
if {[$ctrl cget -font]!=""} {
return [font configure [$ctrl cget -font]]
}
return [list]
}