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
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
|
Index: u_main.tk
===================================================================
RCS file: /cvsroot/pure-data/pd/src/u_main.tk,v
retrieving revision 1.7.2.4
diff -u -w -r1.7.2.4 u_main.tk
--- u_main.tk 21 Feb 2005 04:20:20 -0000 1.7.2.4
+++ u_main.tk 25 Nov 2005 22:47:06 -0000
@@ -24,6 +24,14 @@
# Tearoff is set to true by default:
set pd_tearoff 1
+
+# a menu on the main menubar named $whatever.help while be treated
+# as a special menu with specific behaviors on different platforms.
+# See SPECIAL MENUS IN MENUBARS http://www.tcl.tk/man/tcl8.4/TkCmd/menu.htm
+# this is the default name for the Help menu
+set help_menu_name "help"
+
+#################### init for Windows ####################
if {$pd_nt == 1} {
global pd_guidir
global pd_tearoff
@@ -32,8 +40,12 @@
set pd_guidir $pd_gui3/..
load $pd_guidir/bin/pdtcl.dll
set pd_tearoff 1
+ set help_top_directory $pd_guidir/doc
+ # init last help directory browsed
+ set help_directory $help_top_directory
}
+##################### init for Mac OS X/Darwin ####################
if {$pd_nt == 2} {
# turn on James Tittle II's fast drawing (wait until I can test this...):
# set tk::mac::useCGDrawing 1
@@ -43,6 +55,39 @@
set pd_guidir $pd_gui2/..
load $pd_guidir/bin/pdtcl
set pd_tearoff 0
+ set help_top_directory $pd_guidir/doc
+
+
+ # This procedure generates a temporary mirror of the documentation directory
+ # in /tmp so that it can be opened from the Help->Pure Documentation... menu
+ # under Mac OS X. It is meant to be run at startup.
+ # Damn you Apple and your hide-stuff-from-the-user "features".
+ # <hans@at.or.at.>
+ regsub -all "/" $help_top_directory "." help_directory_alias
+ set help_directory_alias /tmp/.pd_help_directory_alias-$help_directory_alias
+ set help_directory_tmpdir $help_directory_alias/doc
+ # if something other than a directory exists, delete it
+ if [file exists $help_directory_alias] {
+ file delete -force -- $help_directory_alias
+ }
+ if { ! [ file isdirectory $help_directory_tmpdir ] } {
+ file mkdir $help_directory_tmpdir
+ }
+ foreach file [ lsort [ glob -dir $help_top_directory * ] ] {
+ regsub -all ".*/" $file "" link_file_name
+ file link -symbolic $help_directory_tmpdir/$link_file_name $file
+ }
+ # init last help directory browsed
+ set help_directory $help_directory_tmpdir
+
+
+ # a menu on the main menubar named "$whatever.help" while be treated
+ # as a special menu with specific behaviors on different platforms.
+ # See SPECIAL MENUS IN MENUBARS http://www.tcl.tk/man/tcl8.4/TkCmd/menu.htm
+ # Apple doesn't allow cascading menus in their Help so I had to call this
+ # one "docs" <hans@at.or.at>
+ set help_menu_name "docs"
+
# tk::mac::OpenDocument is called with the filenames put into the
# var args whenever docs are either dropped on the Pd.app icon or
@@ -60,14 +105,22 @@
# hack so you can easily test-run this script in linux... define pd_guidir
# (which is normally defined at startup in pd under linux...)
+#################### init for GNU/Linux ####################
if {$pd_nt == 0} {
if {! [info exists pd_guidir]} {
global pd_guidir
puts stderr {setting pd_guidir to '.'}
set pd_guidir .
+ set help_top_directory $pd_guidir/doc
+ # init last help directory browsed
+ set help_directory $help_top_directory
}
}
+#################### init for all platforms ####################
+
+
+
# it's unfortunate but we seem to have to turn off global bindings
# for Text objects to get control-s and control-t to do what we want for
# "text" dialogs below. Also we have to get rid of tab's changing the focus.
@@ -95,25 +148,15 @@
if {$pd_nt != 2} {
.mbar add cascade -label "Windows" -menu .mbar.windows
.mbar add cascade -label "Media" -menu .mbar.audio
-# a menu on the main menubar named $whatever.help while be treated
-# as a special menu with specific behaviors on different platforms.
-# See SPECIAL MENUS IN MENUBARS http://www.tcl.tk/man/tcl8.4/TkCmd/menu.htm
- menu .mbar.help -tearoff $pd_tearoff
- .mbar add cascade -label "Help" -menu .mbar.help
} else {
menu .mbar.apple -tearoff 0
.mbar add cascade -label "Apple" -menu .mbar.apple
# arrange menus according to Apple HIG
.mbar add cascade -label "Media" -menu .mbar.audio
.mbar add cascade -label "Window" -menu .mbar.windows
-# a menu on the main menubar named "$whatever.help" while be treated
-# as a special menu with specific behaviors on different platforms.
-# See SPECIAL MENUS IN MENUBARS http://www.tcl.tk/man/tcl8.4/TkCmd/menu.htm
-# Apple doesn't allow cascading menus in their Help so I had to call this
-# one $mbar.docs # <hans@at.or.at>
- menu .mbar.docs -tearoff $pd_tearoff
- .mbar add cascade -label "Help" -menu .mbar.docs
}
+menu .mbar.$help_menu_name -tearoff $pd_tearoff
+.mbar add cascade -label "Help" -menu .mbar.$help_menu_name
set ctrls_audio_on 0
set ctrls_meter_on 0
@@ -371,25 +414,15 @@
}
}
-set help_directory $pd_guidir/doc
-set help_top_directory $pd_guidir/doc
-
+################## menu_documentation #########################
proc menu_documentation {} {
global help_directory
global pd_nt
global pd_guidir
- if {$pd_nt == 2} {
- exec rm -rf /tmp/pd-documentation
- exec cp -pr $pd_guidir/doc /tmp/pd-documentation
- set filename [tk_getOpenFile -defaultextension .pd \
- -filetypes { {{documentation} {.pd .txt .htm}} } \
- -initialdir /tmp/pd-documentation]
- } else {
set filename [tk_getOpenFile -defaultextension .pd \
- -filetypes { {{documentation} {.pd .txt .htm}} } \
+ -filetypes { {{documentation} {.pd .txt .htm .html}} } \
-initialdir $help_directory]
- }
if {$filename != ""} {
if {[string first .txt $filename] >= 0} {
menu_opentext $filename
@@ -411,42 +444,69 @@
set dirname $pd_guidir/$subdir
+ set file_type [file type $dirname/$basename]
+ if { $file_type == "directory" } {
+ pd [concat pd open [pdtk_enquote $basename] \
+ [pdtk_enquote $dirname] \;]
+ } else {
if {[regexp ".*\.(txt|c)$" $basename]} {
menu_opentext $dirname/$basename
+ } elseif {[regexp ".*\.(pd|max)$" $basename]} {
+ pd [concat pd open [pdtk_enquote $basename] \
+ [pdtk_enquote $dirname] \;]
} elseif {[regexp ".*\.html?$" $basename]} {
menu_openhtml $dirname/$basename
} else {
- pd [concat pd open [pdtk_enquote $basename] \
- [pdtk_enquote $dirname] \;]
+ menu_openhtml $dirname/$basename
}
}
+}
+
-proc doc_submenu {helpmenu subdir} {
- global help_top_directory pd_tearoff
+################## menu_doc_submenu #########################
+
+# this is a recursive function to generation a nested menu in the help menu
+# which shows the complete contents of the doc directory <hans@at.or.at>
+proc menu_doc_submenu {helpmenu base_dir sub_dir} {
+ global pd_tearoff
+ global help_top_directory
- set menudir $help_top_directory/$subdir
+ set menu_dir $help_top_directory/$base_dir/$sub_dir
- regsub -all "\\\." $subdir "" submenu
+ catch {
+ foreach file [ lsort [ glob -nocomplain -dir $menu_dir * ] ] {
+ set file_type [file type $file]
+ regsub {.*/(.*$)} $file {\1} file_name
+ # If links are going to be used then there needs to be a check to
+ # see if each link might cause this function to recurse forever
+ # <hans@at.or.at>
+ if { $file_type == "link"} {
+ puts stderr "Warning doc_submenu found a link: $file"
+ }
+ if { $file_type == "file" } {
+ # only put certain file types on the menu
+ if {[regexp ".*\.(htm|html|c|pd|txt|tk|pdf|wav|aif|aiff)$" $file]} {
+ $helpmenu add command -label $file_name \
+ -command "menu_doc_open doc/$base_dir/$sub_dir $file_name"
+ }
+ } elseif { $file_type == "directory" } {
+ regsub -all "\\\." [string tolower $file_name] "" submenu
menu $helpmenu.$submenu -tearoff $pd_tearoff
- regsub -all "\\\." $subdir " " submenuname
+ regsub -all "\\\." $file_name " " submenuname
$helpmenu add cascade -label $submenuname \
-menu $helpmenu.$submenu
-
-# use this glob pattern to exclude the supporting files
-# foreach file [ lsort [ glob -dir $menudir {*[0-9][0-9]*} ] ]
- foreach file [ lsort [ glob -dir $menudir * ] ] {
- set filename ""
- regsub {.*/(.*\..+$)} $file {\1} filename
- $helpmenu.$submenu add command -label $filename \
- -command "menu_doc_open doc/$subdir $filename"
+ menu_doc_submenu $helpmenu.$submenu $base_dir/$sub_dir \
+ [file tail $file]
+ }
+ }
}
}
############# routine to add media, help, and apple menu items ###############
proc menu_addstd {mbar} {
- global pd_apilist pd_nt pd_tearoff
+ global pd_apilist pd_nt pd_tearoff help_menu_name
# the "Audio" menu
$mbar.audio add command -label {audio ON} -accelerator [accel_munge "Ctrl+/"] \
-command {menu_audio 1}
@@ -494,30 +554,15 @@
# the "Help" menu
- if {$pd_nt != 2} {
-# a menu on the main menubar named "$whatever.help" while be treated
-# as a special menu with specific behaviors on different platforms.
-# See SPECIAL MENUS IN MENUBARS http://www.tcl.tk/man/tcl8.4/TkCmd/menu.htm
- $mbar.help add command -label {About Pd} \
- -command {menu_doc_open doc/1.manual 1.introduction.txt}
- $mbar.help add command -label {Pure Documentation...} \
+ puts stderr "Starting Menu crap"
+ $mbar.$help_menu_name add command -label {Browse Documentation...} \
-command {menu_documentation}
- # add menu items for each section instead of using Pd patches
- $mbar.help add separator
- set helpmenuname help
- } else {
-# Apple doesn't allow cascading menus in their Help so I had to call this
-# one "docs" <hans@at.or.at>
- set helpmenuname docs
- }
-
- $mbar.$helpmenuname add command -label {1 manual...} \
+ # the help menu only really works well on Mac OS X <hans@at.or.at>
+ $mbar.$help_menu_name add command -label {Pd HTML Manual...} \
-command {menu_doc_open doc/1.manual index.htm}
- doc_submenu $mbar.$helpmenuname 2.control.examples
- doc_submenu $mbar.$helpmenuname 3.audio.examples
- doc_submenu $mbar.$helpmenuname 4.fft.examples
- doc_submenu $mbar.$helpmenuname 5.reference
- doc_submenu $mbar.$helpmenuname 6.externs
+ $mbar.$help_menu_name add separator
+ menu_doc_submenu $mbar.$help_menu_name "." "."
+ puts stderr "Finishing Menu crap"
}
#################### the "File" menu for the Pd window ##############
@@ -820,6 +865,7 @@
global pd_opendir
global pd_tearoff
global pd_nt
+ global help_menu_name
toplevel $name -menu $name.m
# puts stderr [concat geometry: $geometry]
@@ -1078,13 +1124,11 @@
# as a special menu with specific behaviors on different platforms.
# See SPECIAL MENUS IN MENUBARS http://www.tcl.tk/man/tcl8.4/TkCmd/menu.htm
if {$pd_nt != 2} {
- menu $name.m.help -tearoff $pd_tearoff
- $name.m add cascade -label Help -menu $name.m.help
+ menu $name.m.$help_menu_name -tearoff $pd_tearoff
+ $name.m add cascade -label Help -menu $name.m.$help_menu_name
} else {
- # Apple doesn't allow cascading menus in their Help
- # so I had to call this one "docs". <hans@at.or.at>
- menu $name.m.docs -tearoff $pd_tearoff
- $name.m add cascade -label Help -menu $name.m.docs
+ menu $name.m.$help_menu_name -tearoff $pd_tearoff
+ $name.m add cascade -label Help -menu $name.m.$help_menu_name
}
menu_addstd $name.m
|