tioga 1.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/Tioga_README +372 -0
- data/lgpl.txt +504 -0
- data/split/Dtable/defs.h +33 -0
- data/split/Dtable/dtable.c +1928 -0
- data/split/Dtable/dtable_intern.h +144 -0
- data/split/Dtable/dvector.h +61 -0
- data/split/Dtable/extconf.rb +4 -0
- data/split/Dtable/include/dtable.h +35 -0
- data/split/Dtable/lib/Dtable_extras.rb +90 -0
- data/split/Dtable/namespace.h +47 -0
- data/split/Dtable/safe_double.h +104 -0
- data/split/Dtable/symbols.c +92 -0
- data/split/Dtable/symbols.h +52 -0
- data/split/Dvector/defs.h +33 -0
- data/split/Dvector/dvector.c +5486 -0
- data/split/Dvector/dvector_intern.h +142 -0
- data/split/Dvector/extconf.rb +4 -0
- data/split/Dvector/include/dvector.h +61 -0
- data/split/Dvector/lib/Dvector_extras.rb +328 -0
- data/split/Dvector/lib/Numeric_extras.rb +134 -0
- data/split/Dvector/namespace.h +47 -0
- data/split/Dvector/safe_double.h +104 -0
- data/split/Dvector/symbols.c +92 -0
- data/split/Dvector/symbols.h +52 -0
- data/split/Flate/defs.h +33 -0
- data/split/Flate/extconf.rb +19 -0
- data/split/Flate/flate.c +156 -0
- data/split/Flate/flate_intern.h +97 -0
- data/split/Flate/include/flate.h +98 -0
- data/split/Flate/namespace.h +47 -0
- data/split/Flate/safe_double.h +104 -0
- data/split/Flate/symbols.c +92 -0
- data/split/Flate/symbols.h +52 -0
- data/split/Function/defs.h +33 -0
- data/split/Function/dvector.h +61 -0
- data/split/Function/extconf.rb +4 -0
- data/split/Function/function.c +988 -0
- data/split/Function/joint_qsort.c +258 -0
- data/split/Function/lib/Function_extras.rb +44 -0
- data/split/Function/namespace.h +47 -0
- data/split/Function/safe_double.h +104 -0
- data/split/Function/symbols.c +92 -0
- data/split/Function/symbols.h +52 -0
- data/split/Tioga/axes.c +774 -0
- data/split/Tioga/defs.h +33 -0
- data/split/Tioga/dtable.h +35 -0
- data/split/Tioga/dvector.h +61 -0
- data/split/Tioga/extconf.rb +4 -0
- data/split/Tioga/figures.c +672 -0
- data/split/Tioga/figures.h +855 -0
- data/split/Tioga/flate.h +98 -0
- data/split/Tioga/init.c +524 -0
- data/split/Tioga/lib/Arcs_and_Circles.rb +64 -0
- data/split/Tioga/lib/ColorConstants.rb +274 -0
- data/split/Tioga/lib/Colorbars.rb +10 -0
- data/split/Tioga/lib/Colormaps.rb +105 -0
- data/split/Tioga/lib/Coordinate_Conversions.rb +194 -0
- data/split/Tioga/lib/Creating_Paths.rb +94 -0
- data/split/Tioga/lib/Doc.rb +91 -0
- data/split/Tioga/lib/Executive.rb +515 -0
- data/split/Tioga/lib/FigMkr.rb +2224 -0
- data/split/Tioga/lib/FigureConstants.rb +125 -0
- data/split/Tioga/lib/Figures_and_Plots.rb +268 -0
- data/split/Tioga/lib/Images.rb +278 -0
- data/split/Tioga/lib/Legends.rb +190 -0
- data/split/Tioga/lib/MarkerConstants.rb +122 -0
- data/split/Tioga/lib/Markers.rb +129 -0
- data/split/Tioga/lib/Page_Frame_Bounds.rb +567 -0
- data/split/Tioga/lib/Rectangles.rb +94 -0
- data/split/Tioga/lib/Shading.rb +100 -0
- data/split/Tioga/lib/Special_Paths.rb +307 -0
- data/split/Tioga/lib/Strokes.rb +129 -0
- data/split/Tioga/lib/TeX_Text.rb +454 -0
- data/split/Tioga/lib/TexPreamble.rb +358 -0
- data/split/Tioga/lib/Titles_and_Labels.rb +306 -0
- data/split/Tioga/lib/Transparency.rb +89 -0
- data/split/Tioga/lib/Using_Paths.rb +164 -0
- data/split/Tioga/lib/Utils.rb +74 -0
- data/split/Tioga/lib/X_and_Y_Axes.rb +749 -0
- data/split/Tioga/lib/irb_tioga.rb +122 -0
- data/split/Tioga/lib/tioga.rb +1 -0
- data/split/Tioga/lib/tioga_ui.rb +5 -0
- data/split/Tioga/lib/tioga_ui_cmds.rb +793 -0
- data/split/Tioga/makers.c +989 -0
- data/split/Tioga/mk_tioga_sty.rb +53 -0
- data/split/Tioga/namespace.h +47 -0
- data/split/Tioga/pdf_font_dicts.c +18253 -0
- data/split/Tioga/pdfcolor.c +486 -0
- data/split/Tioga/pdfcoords.c +505 -0
- data/split/Tioga/pdffile.c +342 -0
- data/split/Tioga/pdfimage.c +536 -0
- data/split/Tioga/pdfpath.c +914 -0
- data/split/Tioga/pdfs.h +229 -0
- data/split/Tioga/pdftext.c +443 -0
- data/split/Tioga/safe_double.h +104 -0
- data/split/Tioga/symbols.c +92 -0
- data/split/Tioga/symbols.h +52 -0
- data/split/Tioga/texout.c +380 -0
- data/split/defs.h +33 -0
- data/split/extconf.rb +107 -0
- data/split/mkmf2.rb +1612 -0
- data/split/namespace.h +47 -0
- data/split/safe_double.h +104 -0
- data/split/scripts/tioga +4 -0
- data/split/symbols.c +92 -0
- data/split/symbols.h +52 -0
- data/tests/dtable_test.data +6 -0
- data/tests/dvector_read_test.data +1 -0
- data/tests/dvector_test.data +101 -0
- data/tests/tc_Dtable.rb +221 -0
- data/tests/tc_Dvector.rb +791 -0
- data/tests/tc_FMkr.rb +162 -0
- data/tests/tc_Flate.rb +45 -0
- data/tests/tc_Function.rb +111 -0
- data/tests/ts_Tioga.rb +38 -0
- metadata +163 -0
|
@@ -0,0 +1,122 @@
|
|
|
1
|
+
require "Tioga/tioga_ui_cmds.rb"
|
|
2
|
+
|
|
3
|
+
module Tioga
|
|
4
|
+
module IRB_Tioga
|
|
5
|
+
|
|
6
|
+
$tioga_figure_filename = nil
|
|
7
|
+
$tioga_figure_num = nil
|
|
8
|
+
|
|
9
|
+
def o(filename=nil)
|
|
10
|
+
filename = $tioga_figure_filename if filename == nil
|
|
11
|
+
filename = $tioga_ui.fix_filename(filename)
|
|
12
|
+
result = $tioga_ui.setdir_and_load(filename)
|
|
13
|
+
return false if result == nil
|
|
14
|
+
$tioga_figure_filename = result
|
|
15
|
+
$tioga_figure_num = 0
|
|
16
|
+
return true
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
def do_figs(fignums,view)
|
|
20
|
+
if fignums.kind_of?String
|
|
21
|
+
fignums = $tioga_ui.parse_figs(fignums)
|
|
22
|
+
end
|
|
23
|
+
if fignums == nil
|
|
24
|
+
$tioga_ui.make_all_pdfs(view)
|
|
25
|
+
elsif fignums.kind_of?Integer
|
|
26
|
+
fignums += FigureMaker.default.num_figures if fignums < 0
|
|
27
|
+
$tioga_ui.do_fignums([fignums],view)
|
|
28
|
+
else
|
|
29
|
+
$tioga_ui.do_fignums(fignums,view)
|
|
30
|
+
end
|
|
31
|
+
set_figure_num(fignums[-1]) unless fignums == nil
|
|
32
|
+
return true
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
def s(fignums=nil)
|
|
36
|
+
do_figs(fignums,true)
|
|
37
|
+
return true
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
def m(fignums=nil)
|
|
41
|
+
do_figs(fignums,false)
|
|
42
|
+
return true
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
def set_figure_num(num)
|
|
46
|
+
num = FigureMaker.default.figure_names.index(num) unless num == nil || num.kind_of?(Integer)
|
|
47
|
+
$tioga_figure_num = num
|
|
48
|
+
end
|
|
49
|
+
|
|
50
|
+
def p(fignums=nil)
|
|
51
|
+
if fignums.kind_of?String
|
|
52
|
+
fignums = $tioga_ui.parse_figs(fignums)
|
|
53
|
+
end
|
|
54
|
+
if fignums == nil
|
|
55
|
+
$tioga_ui.make_portfolio(true)
|
|
56
|
+
elsif fignums.kind_of?Integer
|
|
57
|
+
fignums += FigureMaker.default.num_figures if fignums < 0
|
|
58
|
+
$tioga_ui.make_portfolio(true,[fignums])
|
|
59
|
+
else
|
|
60
|
+
$tioga_ui.make_portfolio(true,fignums)
|
|
61
|
+
end
|
|
62
|
+
set_figure_num(fignums[-1]) unless fignums == nil
|
|
63
|
+
return true
|
|
64
|
+
end
|
|
65
|
+
|
|
66
|
+
def r
|
|
67
|
+
if $tioga_figure_num != nil
|
|
68
|
+
figname = FigureMaker.default.figure_names[$tioga_figure_num]
|
|
69
|
+
else
|
|
70
|
+
figname = nil
|
|
71
|
+
end
|
|
72
|
+
o(nil)
|
|
73
|
+
if figname != nil
|
|
74
|
+
num = FigureMaker.default.figure_names.index(figname)
|
|
75
|
+
if num != nil
|
|
76
|
+
s(num)
|
|
77
|
+
end
|
|
78
|
+
end
|
|
79
|
+
end
|
|
80
|
+
|
|
81
|
+
|
|
82
|
+
def l
|
|
83
|
+
$tioga_ui.list_figures
|
|
84
|
+
return true
|
|
85
|
+
end
|
|
86
|
+
|
|
87
|
+
def h
|
|
88
|
+
puts ''
|
|
89
|
+
puts " Command description"
|
|
90
|
+
puts " o 'filename' open tioga file (with extension .rb)."
|
|
91
|
+
puts " l output a list of the defined figures by number and name."
|
|
92
|
+
puts " m <figs> make PDFs without showing them in the viewer."
|
|
93
|
+
puts " s <figs> make and show PDFs, each in a separate viewer window."
|
|
94
|
+
puts " p <figs> make PDFs and show the portfolio as a multi-page document."
|
|
95
|
+
puts " r reloads the current tioga file and reshows the current figure."
|
|
96
|
+
puts " h helpfully print this list of commands."
|
|
97
|
+
puts "\n Since the filename extension is known, you can skip typing it if you like."
|
|
98
|
+
puts "\n If <figs> is omitted, then tioga does all the figures defined in the file"
|
|
99
|
+
puts " ordered by their definition index numbers."
|
|
100
|
+
puts "\n Otherwise, <figs> must be either"
|
|
101
|
+
puts " a valid ruby array index number for a figure (can be negative), or"
|
|
102
|
+
puts " an array of index numbers for a set of figures, or"
|
|
103
|
+
puts " a string with a space-less, comma-separated list of figure indices and ranges, or"
|
|
104
|
+
puts " a string giving a defined figure name (as supplied to def_figure in the tioga file)."
|
|
105
|
+
puts ''
|
|
106
|
+
puts " For example, s 'Plot1' makes and shows the pdf for the figure named Plot1,"
|
|
107
|
+
puts " and p '5,0..3,-1' makes a portfolio with the figure having index 5 on page 1,"
|
|
108
|
+
puts " followed by pages showing the figures with indices 0, 1, 2, 3, and -1."
|
|
109
|
+
puts "\n The viewer for showing PDFs is specified by the $pdf_viewer variable."
|
|
110
|
+
puts " The default value can be set by creating a .tiogainit file in your home directory."
|
|
111
|
+
puts " Your current setting for $pdf_viewer is " + $pdf_viewer + '.'
|
|
112
|
+
puts " To change it, edit ~/.tiogainit to add the line $pdf_viewer = 'my viewer command'."
|
|
113
|
+
puts " The command tioga uses to show a pdf is $pdf_viewer + ' ' + full_PDF_filename."
|
|
114
|
+
puts ''
|
|
115
|
+
|
|
116
|
+
return true
|
|
117
|
+
end
|
|
118
|
+
|
|
119
|
+
end # module IRB_Tioga
|
|
120
|
+
end # module Tioga
|
|
121
|
+
|
|
122
|
+
$tioga_ui = TiogaUI.new([],true)
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
require 'Tioga/FigureMaker'
|
|
@@ -0,0 +1,793 @@
|
|
|
1
|
+
|
|
2
|
+
=begin
|
|
3
|
+
Copyright (C) 2007 Bill Paxton
|
|
4
|
+
|
|
5
|
+
This file is part of Tioga.
|
|
6
|
+
|
|
7
|
+
Tioga is free software; you can redistribute it and/or modify
|
|
8
|
+
it under the terms of the GNU General Library Public License as published
|
|
9
|
+
by the Free Software Foundation; either version 2 of the License, or
|
|
10
|
+
(at your option) any later version.
|
|
11
|
+
|
|
12
|
+
Tioga is distributed in the hope that it will be useful,
|
|
13
|
+
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
14
|
+
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
15
|
+
GNU Library General Public License for more details.
|
|
16
|
+
|
|
17
|
+
You should have received a copy of the GNU Library General Public License
|
|
18
|
+
along with Tioga; if not, write to the Free Software
|
|
19
|
+
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
|
20
|
+
=end
|
|
21
|
+
|
|
22
|
+
require 'Tioga/tioga.rb'
|
|
23
|
+
require "rbconfig.rb"
|
|
24
|
+
include Config
|
|
25
|
+
|
|
26
|
+
include Tioga
|
|
27
|
+
include FigureConstants
|
|
28
|
+
|
|
29
|
+
class TiogaUI
|
|
30
|
+
|
|
31
|
+
def fm
|
|
32
|
+
FigureMaker.default
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
|
|
36
|
+
def append_to_log(str)
|
|
37
|
+
if @no_Tk
|
|
38
|
+
puts str
|
|
39
|
+
return
|
|
40
|
+
end
|
|
41
|
+
return if @logText == nil
|
|
42
|
+
return unless str.kind_of?String
|
|
43
|
+
@logText.insert('end', str + "\n")
|
|
44
|
+
@logText.see('end')
|
|
45
|
+
end
|
|
46
|
+
|
|
47
|
+
|
|
48
|
+
def check_have_loaded
|
|
49
|
+
return true if @have_loaded
|
|
50
|
+
append_to_log "Must open a file first!"
|
|
51
|
+
return false
|
|
52
|
+
end
|
|
53
|
+
|
|
54
|
+
|
|
55
|
+
def report_number_and_name(num,name)
|
|
56
|
+
if num < 10
|
|
57
|
+
puts ' ' + num.to_s + ' ' + name
|
|
58
|
+
elsif num < 100
|
|
59
|
+
puts ' ' + num.to_s + ' ' + name
|
|
60
|
+
else
|
|
61
|
+
puts num.to_s + ' ' + name
|
|
62
|
+
end
|
|
63
|
+
end
|
|
64
|
+
|
|
65
|
+
|
|
66
|
+
def make_all_pdfs(view = true, fignums = nil)
|
|
67
|
+
return unless check_have_loaded
|
|
68
|
+
fm.make_all(fignums,false)
|
|
69
|
+
if view == false
|
|
70
|
+
if fignums == nil
|
|
71
|
+
fm.figure_pdfs.each_with_index { |name,num| report_number_and_name(num,name) }
|
|
72
|
+
else
|
|
73
|
+
fignums.each { |num| report_number_and_name(num,fm.figure_pdfs[num]) }
|
|
74
|
+
end
|
|
75
|
+
return
|
|
76
|
+
end
|
|
77
|
+
if fignums == nil
|
|
78
|
+
fm.num_figures.times { |i| view_pdf(fm.figure_pdfs[i]) }
|
|
79
|
+
else
|
|
80
|
+
fignums.each { |i| view_pdf(fm.figure_pdfs[i]) }
|
|
81
|
+
end
|
|
82
|
+
end
|
|
83
|
+
|
|
84
|
+
|
|
85
|
+
def make_portfolio(view = true, fignums = nil)
|
|
86
|
+
return unless check_have_loaded
|
|
87
|
+
name = @title_name + '_portfolio'
|
|
88
|
+
make_all_pdfs(false,fignums)
|
|
89
|
+
portfolio_name = fm.make_portfolio(name,fignums)
|
|
90
|
+
return unless view
|
|
91
|
+
view_pdf(portfolio_name)
|
|
92
|
+
return if @no_Tk
|
|
93
|
+
return unless $mac_command_key
|
|
94
|
+
append_to_log "\nNote: Preview fails to make updated thumbnails after a Revert for a portfolio,"
|
|
95
|
+
append_to_log "so for now you'll have to Close and redo Open as a workaround.\n"
|
|
96
|
+
end
|
|
97
|
+
|
|
98
|
+
|
|
99
|
+
def require_pdf(arg) # num is either figure number or name
|
|
100
|
+
begin
|
|
101
|
+
num = arg
|
|
102
|
+
num = fm.figure_names.index(num) unless num == nil || num.kind_of?(Integer)
|
|
103
|
+
if fm.num_figures == 0
|
|
104
|
+
puts "\nCan't build pdf because failed to define any figures."
|
|
105
|
+
puts ''
|
|
106
|
+
raise
|
|
107
|
+
end
|
|
108
|
+
if num == nil || num < 0 || num >= fm.num_figures
|
|
109
|
+
puts "\n" + arg.to_s + ' is an invalid figure specification.'
|
|
110
|
+
puts ''
|
|
111
|
+
raise
|
|
112
|
+
end
|
|
113
|
+
result = fm.require_pdf(num)
|
|
114
|
+
if result == nil
|
|
115
|
+
puts "\nFailed during attempt to create pdf file."
|
|
116
|
+
puts ''
|
|
117
|
+
raise
|
|
118
|
+
end
|
|
119
|
+
#append_to_log result + "\n"
|
|
120
|
+
return result
|
|
121
|
+
end
|
|
122
|
+
end
|
|
123
|
+
|
|
124
|
+
|
|
125
|
+
def view_pdf(pdf_file)
|
|
126
|
+
if pdf_file == nil || pdf_file == false
|
|
127
|
+
puts "\nERROR: invalid pdf file."
|
|
128
|
+
puts ''
|
|
129
|
+
raise
|
|
130
|
+
end
|
|
131
|
+
system($pdf_viewer + ' ' + pdf_file + ' > /dev/null')
|
|
132
|
+
append_to_log pdf_file
|
|
133
|
+
end
|
|
134
|
+
|
|
135
|
+
|
|
136
|
+
def loadfile(fname,reselect=true)
|
|
137
|
+
@have_loaded = false
|
|
138
|
+
fm.reset_state
|
|
139
|
+
begin
|
|
140
|
+
|
|
141
|
+
append_to_log "loading #{fname}\n"
|
|
142
|
+
load(fname) # this should define the TiogaFigures class
|
|
143
|
+
num_fig = fm.num_figures
|
|
144
|
+
if num_fig == 0
|
|
145
|
+
raise "Failed to define any figures. ' +
|
|
146
|
+
'Remember to invoke 'new' for the class containing the figure definitions"
|
|
147
|
+
end
|
|
148
|
+
|
|
149
|
+
@title_name = fname.split('/')[-1]
|
|
150
|
+
@title_name = @title_name[0..-4] if @title_name[-3..-1] == ".rb"
|
|
151
|
+
fname = fname[0..-4] if fname[-3..-1] == ".rb"
|
|
152
|
+
@pdf_name = fname + ".pdf"
|
|
153
|
+
@have_loaded = true
|
|
154
|
+
|
|
155
|
+
return if @no_Tk
|
|
156
|
+
|
|
157
|
+
@root.title('Tioga:' + @title_name)
|
|
158
|
+
@listBox.delete(0, 'end')
|
|
159
|
+
fm.figure_names.each { |name| @listBox.insert('end', name) }
|
|
160
|
+
set_selection(0) if reselect
|
|
161
|
+
|
|
162
|
+
rescue Exception => er
|
|
163
|
+
report_error(er, "ERROR: load failed for #{fname}\n")
|
|
164
|
+
end
|
|
165
|
+
end
|
|
166
|
+
|
|
167
|
+
|
|
168
|
+
def set_working_dir(filename)
|
|
169
|
+
|
|
170
|
+
return filename unless $change_working_directory
|
|
171
|
+
|
|
172
|
+
# if necessary, add the current directory to the front of the filename
|
|
173
|
+
filename = Dir.getwd + '/' + filename if filename[0..0] != '/'
|
|
174
|
+
|
|
175
|
+
parts = filename.split('/')
|
|
176
|
+
if parts[-1].length < 2 || parts[-1][-2..-1] != "rb"
|
|
177
|
+
append_to_log "ERROR: filename must have extension 'rb' instead has <" + parts[-1][-2..-1] + ">"
|
|
178
|
+
return nil
|
|
179
|
+
end
|
|
180
|
+
dir = ""
|
|
181
|
+
parts[0..-2].each {|part| dir << '/' + part unless part.length == 0 }
|
|
182
|
+
|
|
183
|
+
if dir != Dir.getwd
|
|
184
|
+
append_to_log "changing working directory to " + dir
|
|
185
|
+
Dir.chdir(dir) # change current working directory
|
|
186
|
+
end
|
|
187
|
+
|
|
188
|
+
return filename
|
|
189
|
+
|
|
190
|
+
end
|
|
191
|
+
|
|
192
|
+
|
|
193
|
+
def show_help(filename,opt1)
|
|
194
|
+
unless opt1 == '-help' || filename == '-help' || filename == nil
|
|
195
|
+
puts 'Sorry: ' + opt1 + ' is not a recognized option.'
|
|
196
|
+
end
|
|
197
|
+
puts "\nThis program is a command line interface for the open-source tioga kernel."
|
|
198
|
+
puts "The tioga kernel is for creating figures and plots using Ruby, PDF, and TeX."
|
|
199
|
+
puts "Following is a brief description of the tioga command line options."
|
|
200
|
+
puts "For more information, visit http://theory.kitp.ucsb.edu/~paxton/tioga.html."
|
|
201
|
+
puts "\nBefore any command line information is processed, tioga runs ~/.tiogainit if it exists."
|
|
202
|
+
puts " The primary use of this file is to set your default pdf viewer command (see below)."
|
|
203
|
+
puts "\nIf there are no command line arguments, or the argument is -h, this help info is output."
|
|
204
|
+
puts "\nOtherwise, the command line should start with a tioga file name (with extension .rb)."
|
|
205
|
+
puts " Since the extension is known, you can skip typing it if you like."
|
|
206
|
+
puts "\nThe remainder of the command line should consist of an optional series of control commands"
|
|
207
|
+
puts " followed by a figure command."
|
|
208
|
+
puts "\nAny control commands are done after ~/.tiogainit and before the figure file is loaded."
|
|
209
|
+
puts " -r file runs the file (using Ruby's require method)."
|
|
210
|
+
puts ' -C dir changes the working directory.'
|
|
211
|
+
puts ' If there is no -C command, tioga changes the working directory to the'
|
|
212
|
+
puts ' location of the figure file .'
|
|
213
|
+
puts ' -v prints version information.'
|
|
214
|
+
puts "\nThe figure command comes last and should be one of these:"
|
|
215
|
+
puts " -l output a list of the defined figures by number and name."
|
|
216
|
+
puts " -<num> make and show figure with index equal <num> (0 <= num < num_figures)."
|
|
217
|
+
puts " -m <figs> make PDFs without showing them in the viewer."
|
|
218
|
+
puts " -s <figs> make and show PDFs, each in a separate viewer window."
|
|
219
|
+
puts " -p <figs> make PDFs and show the portfolio as a multi-page document."
|
|
220
|
+
puts "\nIf the figure command is omitted, then it defaults to -0."
|
|
221
|
+
puts "\nIf <figs> is omitted, then tioga does all the figures defined in the file"
|
|
222
|
+
puts " ordered by their definition index numbers."
|
|
223
|
+
puts "\nOtherwise, <figs> must be either"
|
|
224
|
+
puts " a defined figure name (as supplied to def_figure in the tioga file), or"
|
|
225
|
+
puts " a valid ruby array index number for a figure (can be negative), or"
|
|
226
|
+
puts " a valid ruby range specification selecting a sequence of figures, or"
|
|
227
|
+
puts " a space-less, comma-separated list of figure indices and ranges."
|
|
228
|
+
puts ''
|
|
229
|
+
puts " For example, -s Plot1 makes and shows the pdf for the figure named Plot1,"
|
|
230
|
+
puts " and -p 5,0..3,-1 makes a portfolio with the figure having index 5 on page 1,"
|
|
231
|
+
puts " followed by pages showing the figures with indices 0, 1, 2, 3, and -1."
|
|
232
|
+
puts "\nThe viewer for showing PDFs is specified by the $pdf_viewer variable in tioga."
|
|
233
|
+
puts " The default value can be set by creating a .tiogainit file in your home directory."
|
|
234
|
+
puts " The .tiogainit file is run before any command line options are processed."
|
|
235
|
+
puts " Your current setting for $pdf_viewer is " + $pdf_viewer + '.'
|
|
236
|
+
puts " To change it, edit ~/.tiogainit to add the line $pdf_viewer = 'my viewer command'."
|
|
237
|
+
puts " The command tioga uses to show a pdf is $pdf_viewer + ' ' + full_PDF_filename."
|
|
238
|
+
puts " You can use the -e control command to try a different viewer setting"
|
|
239
|
+
puts " by doing the $pdf_viewer assignment from the command line."
|
|
240
|
+
puts ''
|
|
241
|
+
end
|
|
242
|
+
|
|
243
|
+
|
|
244
|
+
def report_error(er, msg)
|
|
245
|
+
if msg != nil
|
|
246
|
+
append_to_log msg
|
|
247
|
+
append_to_log ""
|
|
248
|
+
end
|
|
249
|
+
append_to_log " " + "#{er.message}" + " [version: " + FigureMaker.version + "]"
|
|
250
|
+
line_count = 0
|
|
251
|
+
show_count = 0
|
|
252
|
+
past_callers_routines = false
|
|
253
|
+
in_callers_routines = false
|
|
254
|
+
er.backtrace.each do |line|
|
|
255
|
+
if (line.include?('Tioga/FigMkr.rb')) || (line.include?('Tioga/tioga_ui.rb'))
|
|
256
|
+
if in_callers_routines
|
|
257
|
+
past_callers_routines = true
|
|
258
|
+
in_callers_routines = false
|
|
259
|
+
end
|
|
260
|
+
else
|
|
261
|
+
in_callers_routines = true
|
|
262
|
+
end
|
|
263
|
+
if (show_count < fm.num_error_lines) and in_callers_routines
|
|
264
|
+
append_to_log " " + line
|
|
265
|
+
show_count = show_count + 1
|
|
266
|
+
end
|
|
267
|
+
line_count = line_count + 1
|
|
268
|
+
end
|
|
269
|
+
end
|
|
270
|
+
|
|
271
|
+
|
|
272
|
+
def setdir_and_load(filename)
|
|
273
|
+
filename = set_working_dir(filename)
|
|
274
|
+
return nil if filename == nil
|
|
275
|
+
loadfile(filename)
|
|
276
|
+
return filename
|
|
277
|
+
end
|
|
278
|
+
|
|
279
|
+
|
|
280
|
+
def parse_figs(figs)
|
|
281
|
+
return [0] if (figs == nil) || (figs.length == 0)
|
|
282
|
+
return figs unless (/^\d/ === figs) || (/^-\d/ === figs)
|
|
283
|
+
ranges = figs.split(',')
|
|
284
|
+
fignums = Array.new(fm.num_figures) {|i| i}
|
|
285
|
+
result = []
|
|
286
|
+
ranges.each do |r|
|
|
287
|
+
nums = eval('fignums[' + r + ']') # do it this way in case r is negative
|
|
288
|
+
if nums.kind_of?Integer
|
|
289
|
+
result << nums
|
|
290
|
+
else
|
|
291
|
+
nums.each {|n| result << n}
|
|
292
|
+
end
|
|
293
|
+
end
|
|
294
|
+
return result
|
|
295
|
+
end
|
|
296
|
+
|
|
297
|
+
|
|
298
|
+
def show_version
|
|
299
|
+
puts FigureMaker.version
|
|
300
|
+
end
|
|
301
|
+
|
|
302
|
+
|
|
303
|
+
def setup(args)
|
|
304
|
+
|
|
305
|
+
# set the standard defaults
|
|
306
|
+
$tioga_args = Array.new(args.length) {|i| args[i]} # copy the args
|
|
307
|
+
$change_working_directory = true
|
|
308
|
+
if Config::CONFIG["target"] =~ /darwin/i
|
|
309
|
+
$pdf_viewer = "repreview"
|
|
310
|
+
#$mac_command_key = true
|
|
311
|
+
else
|
|
312
|
+
$pdf_viewer = "xpdf"
|
|
313
|
+
#$mac_command_key = false
|
|
314
|
+
end
|
|
315
|
+
|
|
316
|
+
=begin
|
|
317
|
+
# Ruby/Tk defaults
|
|
318
|
+
$geometry = '600x250+700+50'
|
|
319
|
+
$background = 'WhiteSmoke'
|
|
320
|
+
$mac_command_key = false
|
|
321
|
+
$log_font = 'system 12'
|
|
322
|
+
$figures_font = 'system 12'
|
|
323
|
+
=end
|
|
324
|
+
|
|
325
|
+
tiogainit_name = ENV['HOME'] + '/.tiogainit'
|
|
326
|
+
if File.exist?(tiogainit_name)
|
|
327
|
+
load(tiogainit_name)
|
|
328
|
+
end
|
|
329
|
+
|
|
330
|
+
@pdf_name = nil
|
|
331
|
+
@have_loaded = false
|
|
332
|
+
@no_Tk = true
|
|
333
|
+
|
|
334
|
+
end
|
|
335
|
+
|
|
336
|
+
|
|
337
|
+
def fix_filename(filename)
|
|
338
|
+
if filename != nil && filename[-3..-1] != '.rb' &&
|
|
339
|
+
filename[-3..-1] != '.RB' && filename != '-help' && filename != '-v'
|
|
340
|
+
filename += '.rb'
|
|
341
|
+
end
|
|
342
|
+
return filename
|
|
343
|
+
end
|
|
344
|
+
|
|
345
|
+
|
|
346
|
+
def do_fignums(fignums,view)
|
|
347
|
+
fignums.each do |n|
|
|
348
|
+
pdf_name = require_pdf(n)
|
|
349
|
+
if view
|
|
350
|
+
view_pdf(pdf_name)
|
|
351
|
+
else
|
|
352
|
+
report_number_and_name(n,pdf_name)
|
|
353
|
+
end
|
|
354
|
+
end
|
|
355
|
+
end
|
|
356
|
+
|
|
357
|
+
|
|
358
|
+
def list_figures
|
|
359
|
+
fm.figure_names.each_with_index do |name,i|
|
|
360
|
+
puts sprintf("%3i %s\n",i,name)
|
|
361
|
+
end
|
|
362
|
+
end
|
|
363
|
+
|
|
364
|
+
|
|
365
|
+
def initialize(args, just_setup=false)
|
|
366
|
+
|
|
367
|
+
setup(args)
|
|
368
|
+
|
|
369
|
+
return if just_setup
|
|
370
|
+
|
|
371
|
+
if ($tioga_args.length == 0) || ($tioga_args[0] == '-h') || ($tioga_args[0] == '-help')
|
|
372
|
+
show_help(nil,nil)
|
|
373
|
+
return
|
|
374
|
+
end
|
|
375
|
+
|
|
376
|
+
if ($tioga_args[0] == '-v') || ($tioga_args[0] == '-version') || ($tioga_args[0] == '-V')
|
|
377
|
+
show_version
|
|
378
|
+
return
|
|
379
|
+
end
|
|
380
|
+
|
|
381
|
+
if $tioga_args.length > 0
|
|
382
|
+
filename = fix_filename($tioga_args[0])
|
|
383
|
+
end
|
|
384
|
+
|
|
385
|
+
begin
|
|
386
|
+
# currently, we are only supporting command line interface.
|
|
387
|
+
# the code for making a Ruby/Tk interface can be enabled if you want to play with it.
|
|
388
|
+
|
|
389
|
+
argnum = 1 # the filename is in $tioga_args[0]
|
|
390
|
+
|
|
391
|
+
# do control commands
|
|
392
|
+
while argnum < $tioga_args.length
|
|
393
|
+
cmd = $tioga_args[argnum]
|
|
394
|
+
argnum = argnum + 1
|
|
395
|
+
if cmd == '-r'
|
|
396
|
+
puts 'require ' + $tioga_args[argnum]
|
|
397
|
+
require $tioga_args[argnum]
|
|
398
|
+
argnum = argnum + 1
|
|
399
|
+
elsif cmd == '-C'
|
|
400
|
+
puts 'chdir to ' + $tioga_args[argnum]
|
|
401
|
+
Dir.chdir($tioga_args[argnum])
|
|
402
|
+
$change_working_directory = false
|
|
403
|
+
argnum = argnum + 1
|
|
404
|
+
elsif cmd == '-v'
|
|
405
|
+
show_version
|
|
406
|
+
else
|
|
407
|
+
argnum = argnum - 1 # backup
|
|
408
|
+
break
|
|
409
|
+
end
|
|
410
|
+
end
|
|
411
|
+
|
|
412
|
+
setdir_and_load(filename)
|
|
413
|
+
|
|
414
|
+
# do the figure command
|
|
415
|
+
|
|
416
|
+
if argnum == $tioga_args.length
|
|
417
|
+
view_pdf(require_pdf(0))
|
|
418
|
+
return
|
|
419
|
+
end
|
|
420
|
+
|
|
421
|
+
cmd = $tioga_args[argnum]
|
|
422
|
+
argnum = argnum + 1
|
|
423
|
+
|
|
424
|
+
if /^-\d+$/ === cmd
|
|
425
|
+
view_pdf(require_pdf(cmd[1..-1].to_i))
|
|
426
|
+
elsif cmd == '-l'
|
|
427
|
+
list_figures
|
|
428
|
+
elsif cmd == '-h' || cmd == '-help'
|
|
429
|
+
show_help(nil,nil)
|
|
430
|
+
elsif (cmd == '-s' || cmd == '-m')
|
|
431
|
+
if argnum == $tioga_args.length
|
|
432
|
+
make_all_pdfs(cmd != '-m')
|
|
433
|
+
return
|
|
434
|
+
end
|
|
435
|
+
do_fignums(parse_figs($tioga_args[argnum]),cmd == '-s')
|
|
436
|
+
elsif cmd == '-p'
|
|
437
|
+
if argnum == $tioga_args.length
|
|
438
|
+
make_portfolio(true)
|
|
439
|
+
return
|
|
440
|
+
end
|
|
441
|
+
make_portfolio(true, parse_figs($tioga_args[argnum]))
|
|
442
|
+
else # unrecognized command
|
|
443
|
+
show_help(filename,cmd)
|
|
444
|
+
end
|
|
445
|
+
rescue
|
|
446
|
+
end
|
|
447
|
+
|
|
448
|
+
end
|
|
449
|
+
|
|
450
|
+
=begin
|
|
451
|
+
|
|
452
|
+
def start_Tk
|
|
453
|
+
# Ruby/Tk
|
|
454
|
+
|
|
455
|
+
@no_Tk = false
|
|
456
|
+
|
|
457
|
+
@history = [ ]
|
|
458
|
+
resetHistory
|
|
459
|
+
|
|
460
|
+
@accel_key = ($mac_command_key)? 'Cmd' : 'Ctrl'
|
|
461
|
+
@bind_key = ($mac_command_key)? 'Command' : 'Control'
|
|
462
|
+
|
|
463
|
+
require 'tk'
|
|
464
|
+
|
|
465
|
+
@root = TkRoot.new {
|
|
466
|
+
geometry $geometry
|
|
467
|
+
background $background
|
|
468
|
+
pady 2
|
|
469
|
+
}
|
|
470
|
+
|
|
471
|
+
createMenubar(@root)
|
|
472
|
+
contentFrame = TkFrame.new(@root) { background 'WhiteSmoke' }
|
|
473
|
+
createFigureList(contentFrame)
|
|
474
|
+
createLogText(contentFrame)
|
|
475
|
+
contentFrame.pack('side' => 'top', 'fill' => 'both', 'expand' => true)
|
|
476
|
+
createEvalField(@root)
|
|
477
|
+
@root.bind('Key-Up', proc { prev_in_list })
|
|
478
|
+
@root.bind('Key-Down', proc { next_in_list })
|
|
479
|
+
@root.bind('Key-Left', proc { back })
|
|
480
|
+
@root.bind('Key-Right', proc { forward })
|
|
481
|
+
|
|
482
|
+
loadfile unless filename == nil
|
|
483
|
+
Tk.mainloop(false)
|
|
484
|
+
end
|
|
485
|
+
|
|
486
|
+
|
|
487
|
+
def figureSelected
|
|
488
|
+
preview(@listBox.curselection[0])
|
|
489
|
+
end
|
|
490
|
+
|
|
491
|
+
|
|
492
|
+
def preview(num)
|
|
493
|
+
result = require_pdf(num)
|
|
494
|
+
return result if $pdf_viewer == nil
|
|
495
|
+
syscmd = "cp " + result + " " + @pdf_name
|
|
496
|
+
system(syscmd)
|
|
497
|
+
saveInHistory(num)
|
|
498
|
+
return view_pdf(@pdf_name)
|
|
499
|
+
end
|
|
500
|
+
|
|
501
|
+
|
|
502
|
+
def show_in_own_window
|
|
503
|
+
view_pdf(fm.figure_pdfs[@listBox.curselection[0]])
|
|
504
|
+
end
|
|
505
|
+
|
|
506
|
+
|
|
507
|
+
def set_selection(num)
|
|
508
|
+
@listBox.see(num)
|
|
509
|
+
@listBox.selection_clear(0,'end')
|
|
510
|
+
@listBox.selection_set(num)
|
|
511
|
+
figureSelected
|
|
512
|
+
end
|
|
513
|
+
|
|
514
|
+
|
|
515
|
+
def reload
|
|
516
|
+
return unless check_have_loaded
|
|
517
|
+
selection = @listBox.curselection[0]
|
|
518
|
+
name = (selection.kind_of?(Integer))? fm.figure_names[selection] : nil
|
|
519
|
+
loadfile(false)
|
|
520
|
+
num = fm.figure_names.index(name)
|
|
521
|
+
unless num.kind_of?(Integer)
|
|
522
|
+
reset_history
|
|
523
|
+
num = 0
|
|
524
|
+
end
|
|
525
|
+
set_selection(num)
|
|
526
|
+
end
|
|
527
|
+
|
|
528
|
+
|
|
529
|
+
def next_in_list
|
|
530
|
+
return unless check_have_loaded
|
|
531
|
+
num = @listBox.curselection[0] + 1
|
|
532
|
+
num = 0 if num >= @listBox.size
|
|
533
|
+
set_selection(num)
|
|
534
|
+
end
|
|
535
|
+
|
|
536
|
+
|
|
537
|
+
def prev_in_list
|
|
538
|
+
return unless check_have_loaded
|
|
539
|
+
num = @listBox.curselection[0] - 1
|
|
540
|
+
num = @listBox.size - 1 if num < 0
|
|
541
|
+
set_selection(num)
|
|
542
|
+
end
|
|
543
|
+
|
|
544
|
+
|
|
545
|
+
def resetHistory
|
|
546
|
+
@history_loc = -1
|
|
547
|
+
@history_len = 0
|
|
548
|
+
@forward_back = false
|
|
549
|
+
end
|
|
550
|
+
|
|
551
|
+
|
|
552
|
+
def saveInHistory(num)
|
|
553
|
+
if @forward_back
|
|
554
|
+
forward_back = false
|
|
555
|
+
return
|
|
556
|
+
end
|
|
557
|
+
return if (@history_len > 0 && @history_loc >= 0 && @history[@history_loc] == num)
|
|
558
|
+
@history_len = @history_loc + 2
|
|
559
|
+
@history_loc = @history_len - 1
|
|
560
|
+
@history[@history_loc] = num
|
|
561
|
+
end
|
|
562
|
+
|
|
563
|
+
|
|
564
|
+
def back
|
|
565
|
+
return if (@history_loc <= 0 || @history_len == 0)
|
|
566
|
+
@history_loc = @history_loc - 1
|
|
567
|
+
@forward_back = true
|
|
568
|
+
set_selection(@history[@history_loc])
|
|
569
|
+
end
|
|
570
|
+
|
|
571
|
+
|
|
572
|
+
def forward
|
|
573
|
+
return if (@history_loc + 1 >= @history_len)
|
|
574
|
+
@history_loc = @history_loc + 1
|
|
575
|
+
@forward_back = true
|
|
576
|
+
set_selection(@history[@history_loc])
|
|
577
|
+
end
|
|
578
|
+
|
|
579
|
+
|
|
580
|
+
def eval
|
|
581
|
+
begin
|
|
582
|
+
str = @evalEntry.get
|
|
583
|
+
append_to_log "eval " + str
|
|
584
|
+
result = fm.eval_function(str)
|
|
585
|
+
append_to_log result.to_s + "\n"
|
|
586
|
+
rescue Exception => er
|
|
587
|
+
report_error(er, "ERROR: eval failed for #{str}\n")
|
|
588
|
+
end
|
|
589
|
+
end
|
|
590
|
+
|
|
591
|
+
|
|
592
|
+
def openDocument
|
|
593
|
+
filetypes = [["Ruby Files", "*.rb"]]
|
|
594
|
+
filename = Tk.getOpenFile('filetypes' => filetypes,
|
|
595
|
+
'parent' => @root)
|
|
596
|
+
return unless (filename.kind_of?String) && (filename.length > 0)
|
|
597
|
+
set_working_dir(filename)
|
|
598
|
+
loadfile
|
|
599
|
+
end
|
|
600
|
+
|
|
601
|
+
|
|
602
|
+
def addFileMenu(menubar)
|
|
603
|
+
fileMenuButton = TkMenubutton.new(menubar,
|
|
604
|
+
'text' => 'File',
|
|
605
|
+
'background' => 'WhiteSmoke',
|
|
606
|
+
'underline' => 0)
|
|
607
|
+
fileMenu = TkMenu.new(fileMenuButton, 'tearoff' => false)
|
|
608
|
+
|
|
609
|
+
fileMenu.add('command',
|
|
610
|
+
'label' => 'Open',
|
|
611
|
+
'command' => proc { openDocument },
|
|
612
|
+
'underline' => 0,
|
|
613
|
+
'accel' => @accel_key + '+O')
|
|
614
|
+
@root.bind(@bind_key + '-o', proc { openDocument })
|
|
615
|
+
|
|
616
|
+
|
|
617
|
+
fileMenu.add('command',
|
|
618
|
+
'label' => 'Reload',
|
|
619
|
+
'command' => proc { reload },
|
|
620
|
+
'underline' => 0,
|
|
621
|
+
'accel' => @accel_key + '+R')
|
|
622
|
+
@root.bind(@bind_key + '-r', proc { reload })
|
|
623
|
+
|
|
624
|
+
fileMenuButton.menu(fileMenu)
|
|
625
|
+
fileMenuButton.pack('side' => 'left')
|
|
626
|
+
end
|
|
627
|
+
|
|
628
|
+
|
|
629
|
+
def addToolsMenu(menubar)
|
|
630
|
+
toolsMenuButton = TkMenubutton.new(menubar,
|
|
631
|
+
'text' => 'Tools',
|
|
632
|
+
'background' => 'WhiteSmoke',
|
|
633
|
+
'underline' => 0)
|
|
634
|
+
toolsMenu = TkMenu.new(toolsMenuButton, 'tearoff' => false)
|
|
635
|
+
|
|
636
|
+
acc = ($mac_osx)
|
|
637
|
+
|
|
638
|
+
toolsMenu.add('command',
|
|
639
|
+
'label' => 'Portfolio PDF',
|
|
640
|
+
'command' => proc { make_portfolio },
|
|
641
|
+
'underline' => 0,
|
|
642
|
+
'accel' => @accel_key + '+P')
|
|
643
|
+
@root.bind(@bind_key + '-p', proc { make_portfolio })
|
|
644
|
+
|
|
645
|
+
toolsMenu.add('command',
|
|
646
|
+
'label' => 'Make All PDFs',
|
|
647
|
+
'command' => proc { make_all_pdfs },
|
|
648
|
+
'underline' => 0,
|
|
649
|
+
'accel' => @accel_key + '+M')
|
|
650
|
+
@root.bind(@bind_key + '-m', proc { make_all_pdfs })
|
|
651
|
+
|
|
652
|
+
toolsMenu.add('command',
|
|
653
|
+
'label' => 'Show in Own Window',
|
|
654
|
+
'command' => proc { show_in_own_window },
|
|
655
|
+
'underline' => 0,
|
|
656
|
+
'accel' => @accel_key + '+S')
|
|
657
|
+
@root.bind(@bind_key + '-s', proc { show_in_own_window })
|
|
658
|
+
|
|
659
|
+
toolsMenuButton.menu(toolsMenu)
|
|
660
|
+
toolsMenuButton.pack('side' => 'left')
|
|
661
|
+
end
|
|
662
|
+
|
|
663
|
+
|
|
664
|
+
def addTiogaMenu(menubar)
|
|
665
|
+
tiogaMenuButton = TkMenubutton.new(menubar,
|
|
666
|
+
'text' => 'Tioga',
|
|
667
|
+
'background' => 'WhiteSmoke',
|
|
668
|
+
'underline' => 0)
|
|
669
|
+
tiogaMenu = TkMenu.new(tiogaMenuButton, 'tearoff' => false)
|
|
670
|
+
|
|
671
|
+
tiogaMenu.add('command',
|
|
672
|
+
'label' => 'About Tioga',
|
|
673
|
+
'command' => proc { showAboutBox },
|
|
674
|
+
'underline' => 0)
|
|
675
|
+
|
|
676
|
+
tiogaMenu.add('separator')
|
|
677
|
+
|
|
678
|
+
tiogaMenu.add('command',
|
|
679
|
+
'label' => 'Quit',
|
|
680
|
+
'command' => proc { exit },
|
|
681
|
+
'underline' => 0,
|
|
682
|
+
'accel' => @accel_key + '+Q')
|
|
683
|
+
@root.bind(@bind_key + '-q', proc { exit })
|
|
684
|
+
|
|
685
|
+
tiogaMenuButton.menu(tiogaMenu)
|
|
686
|
+
tiogaMenuButton.pack('side' => 'left')
|
|
687
|
+
end
|
|
688
|
+
|
|
689
|
+
|
|
690
|
+
def showAboutBox
|
|
691
|
+
Tk.messageBox('icon' => 'info', 'type' => 'ok',
|
|
692
|
+
'title' => 'About Tioga-Point-and-Click',
|
|
693
|
+
'parent' => @root,
|
|
694
|
+
'message' => "Tioga-Point-and-Click is a Ruby/Tk Application.\n" +
|
|
695
|
+
"It uses the Tioga kernel to create PDFs and then calls your favorite viewer to show them.\n\n" +
|
|
696
|
+
"Version 0.1 -- January, 2007\n\n" +
|
|
697
|
+
"Visit http://theory.kitp.ucsb.edu/~paxton/tioga.html")
|
|
698
|
+
end
|
|
699
|
+
|
|
700
|
+
|
|
701
|
+
def createMenubar(parent)
|
|
702
|
+
menubar = TkFrame.new(parent) { background 'WhiteSmoke' }
|
|
703
|
+
|
|
704
|
+
addTiogaMenu(menubar)
|
|
705
|
+
addFileMenu(menubar)
|
|
706
|
+
addToolsMenu(menubar)
|
|
707
|
+
|
|
708
|
+
menubar.pack('side' => 'top', 'fill' => 'x', 'padx' => 8, 'pady' => 8)
|
|
709
|
+
end
|
|
710
|
+
|
|
711
|
+
|
|
712
|
+
def createLogText(parent)
|
|
713
|
+
|
|
714
|
+
logFrame = TkFrame.new(parent) { background 'WhiteSmoke' }
|
|
715
|
+
|
|
716
|
+
logText = TkText.new(logFrame) {
|
|
717
|
+
borderwidth 0
|
|
718
|
+
selectborderwidth 0
|
|
719
|
+
height 6
|
|
720
|
+
font $log_font
|
|
721
|
+
}
|
|
722
|
+
|
|
723
|
+
scrollBar = TkScrollbar.new(logFrame) { command proc { |*args| logText.yview(*args) } }
|
|
724
|
+
logText.yscrollcommand(proc { |first, last| scrollBar.set(first, last) })
|
|
725
|
+
|
|
726
|
+
scrollBar.pack('side' => 'right', 'fill' => 'y', 'pady' => 3)
|
|
727
|
+
logText.pack('side' => 'right', 'fill' => 'both', 'expand' => true, 'pady' => 2)
|
|
728
|
+
|
|
729
|
+
logFrame.pack('side' => 'right', 'fill' => 'both', 'expand' => true)
|
|
730
|
+
|
|
731
|
+
@logText = logText
|
|
732
|
+
end
|
|
733
|
+
|
|
734
|
+
|
|
735
|
+
def createFigureList(parent)
|
|
736
|
+
|
|
737
|
+
listFrame = TkFrame.new(parent) { background 'WhiteSmoke' }
|
|
738
|
+
listBox = TkListbox.new(listFrame) {
|
|
739
|
+
selectmode 'single'
|
|
740
|
+
background 'white'
|
|
741
|
+
borderwidth 0
|
|
742
|
+
height 6
|
|
743
|
+
font $figures_font
|
|
744
|
+
}
|
|
745
|
+
scrollBar = TkScrollbar.new(listFrame) { command proc { |*args| listBox.yview(*args) } }
|
|
746
|
+
listBox.yscrollcommand(proc { |first, last| scrollBar.set(first, last) })
|
|
747
|
+
|
|
748
|
+
listBox.bind('ButtonRelease-1') { figureSelected }
|
|
749
|
+
|
|
750
|
+
spacer = TkFrame.new(listFrame) { background 'WhiteSmoke' }
|
|
751
|
+
spacer.pack('side' => 'left', 'padx' => 4)
|
|
752
|
+
|
|
753
|
+
listBox.pack('side' => 'left', 'fill' => 'both', 'expand' => true, 'pady' => 2)
|
|
754
|
+
scrollBar.pack('side' => 'right', 'fill' => 'y', 'pady' => 3)
|
|
755
|
+
|
|
756
|
+
listFrame.pack('side' => 'left', 'fill' => 'both', 'expand' => true)
|
|
757
|
+
|
|
758
|
+
@listBox = listBox
|
|
759
|
+
end
|
|
760
|
+
|
|
761
|
+
|
|
762
|
+
def createEvalField(parent)
|
|
763
|
+
|
|
764
|
+
evalFrame = TkFrame.new(parent, 'background' => 'WhiteSmoke') do
|
|
765
|
+
pack('side' => 'bottom', 'fill' => 'x', 'pady' => 4)
|
|
766
|
+
end
|
|
767
|
+
|
|
768
|
+
evalLabel = TkLabel.new(evalFrame, 'background' => 'WhiteSmoke') do
|
|
769
|
+
text ' eval'
|
|
770
|
+
font 'courier 12'
|
|
771
|
+
pack('side' => 'left')
|
|
772
|
+
end
|
|
773
|
+
|
|
774
|
+
evalEntry = TkEntry.new(evalFrame) do
|
|
775
|
+
borderwidth 0
|
|
776
|
+
pack('side' => 'left', 'fill' => 'x', 'expand' => true)
|
|
777
|
+
end
|
|
778
|
+
|
|
779
|
+
TkLabel.new(evalFrame, 'background' => 'WhiteSmoke') do
|
|
780
|
+
text ' '
|
|
781
|
+
font 'courier 12'
|
|
782
|
+
pack('side' => 'right')
|
|
783
|
+
end
|
|
784
|
+
|
|
785
|
+
evalEntry.bind('Key-Return', proc { eval })
|
|
786
|
+
|
|
787
|
+
@evalEntry = evalEntry
|
|
788
|
+
|
|
789
|
+
end
|
|
790
|
+
|
|
791
|
+
=end
|
|
792
|
+
|
|
793
|
+
end
|