Piggy 0.4.2.4 → 0.4.3.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (61) hide show
  1. data/CHANGES.txt +15 -0
  2. data/INSTALL.txt +9 -4
  3. data/README.txt +8 -6
  4. data/bin/directory_diff +1 -1
  5. data/bin/ftp_browser +1 -1
  6. data/bin/piggy +1 -1
  7. data/lib/directory_diff.rb +8 -6
  8. data/lib/ftp_browser.rb +8 -6
  9. data/lib/icons/connect.ico +0 -0
  10. data/lib/icons/hide_details.ico +0 -0
  11. data/lib/icons/show_details.ico +0 -0
  12. data/lib/piggy-core/alive_check.rb +4 -4
  13. data/lib/piggy-core/debug.rb +4 -4
  14. data/lib/piggy-core/environment.rb +24 -26
  15. data/lib/piggy-core/exifr_adapter.rb +11 -11
  16. data/lib/piggy-core/file_info.rb +61 -61
  17. data/lib/piggy-core/ftp_adapter.rb +24 -24
  18. data/lib/piggy-core/htmlgen.rb +41 -45
  19. data/lib/piggy-core/nconvert_thumbsgen.rb +22 -22
  20. data/lib/piggy-core/options.rb +25 -19
  21. data/lib/piggy-core/options_persistence.rb +8 -8
  22. data/lib/piggy-core/progress.rb +7 -7
  23. data/lib/piggy-core/rmagick_thumbnail_page_generator.rb +14 -14
  24. data/lib/piggy-core/thumbnail_generator.rb +26 -26
  25. data/lib/piggy-core/thumbnail_page_generator.rb +234 -230
  26. data/lib/piggy-core/upload_info.rb +22 -22
  27. data/lib/piggy-core/version.rb +7 -7
  28. data/lib/piggy-core/winshell.rb +136 -80
  29. data/lib/piggy-gui/dir_chooser.rb +14 -14
  30. data/lib/piggy-gui/directory_diff_widget.rb +177 -160
  31. data/lib/piggy-gui/filtered_file_list.rb +87 -87
  32. data/lib/piggy-gui/fox_thumbsgen.rb +4 -4
  33. data/lib/piggy-gui/ftp_browser_widget.rb +211 -155
  34. data/lib/piggy-gui/fullscreen.rb +4 -4
  35. data/lib/piggy-gui/html_generation_dialog.rb +42 -115
  36. data/lib/piggy-gui/html_options_widget.rb +97 -0
  37. data/lib/piggy-gui/image_processor.rb +58 -58
  38. data/lib/piggy-gui/modal_dialog.rb +11 -5
  39. data/lib/piggy-gui/multiimagecanvas.rb +59 -59
  40. data/lib/piggy-gui/options_dialog.rb +170 -48
  41. data/lib/piggy-gui/piggy_image_browser.rb +382 -340
  42. data/lib/piggy-gui/pipe_log.rb +17 -17
  43. data/lib/piggy-gui/progress_with_dialog.rb +8 -8
  44. data/lib/piggy-gui/require-fox.rb +23 -8
  45. data/lib/piggy.rb +7 -5
  46. data/lib/templates/styles/basic/style.css +16 -14
  47. data/lib/templates/styles/black/style.css +28 -29
  48. data/lib/templates/styles/roundedbox/style.css +28 -31
  49. data/lib/templates/styles/shadow/style.css +26 -26
  50. data/lib/templates/styles/shadow_D9F5F3/style.css +1 -1
  51. data/lib/templates/styles/shadow_black/lo.jpg +0 -0
  52. data/lib/templates/styles/shadow_black/lu.jpg +0 -0
  53. data/lib/templates/styles/shadow_black/ro.jpg +0 -0
  54. data/lib/templates/styles/shadow_black/ru.jpg +0 -0
  55. data/lib/templates/styles/shadow_black/style.css +78 -0
  56. data/lib/templates/styles/shadow_bowers/style.css +48 -51
  57. data/lib/templates/styles/sylvester/sh.png +0 -0
  58. data/lib/templates/styles/sylvester/style.css +74 -0
  59. data/lib/templates/styles/sylvester/wunderkerze.jpg +0 -0
  60. data/test/file_info_test.rb +29 -29
  61. metadata +52 -38
@@ -14,9 +14,9 @@ class MultiImageCanvas < Fox::FXScrollWindow
14
14
 
15
15
  def initialize(p1, p2)
16
16
  super(p1, p2)
17
- drawArea = FXCanvas.new(self, nil, 0,
18
- FRAME_NORMAL|LAYOUT_FILL_X|LAYOUT_FILL_Y)
19
- drawArea.connect(SEL_PAINT, method(:onPaint))
17
+ draw_area = FXCanvas.new(self, nil, 0,
18
+ FRAME_NORMAL|LAYOUT_FILL_X|LAYOUT_FILL_Y)
19
+ draw_area.connect(SEL_PAINT, method(:on_paint))
20
20
  @contentWidth = width
21
21
  @contentHeight = height
22
22
  @images = Array.new
@@ -26,19 +26,19 @@ class MultiImageCanvas < Fox::FXScrollWindow
26
26
  @imgProcessor = ImageProcessor.new getApp
27
27
  end
28
28
 
29
- def destroyAll(imageCache)
30
- @imgProcessor.destroyAll(imageCache)
29
+ def destroy_all(imageCache)
30
+ @imgProcessor.destroy_all(imageCache)
31
31
  end
32
32
 
33
- def imageProcessor
33
+ def image_processor
34
34
  return @imgProcessor
35
35
  end
36
36
 
37
- def getContentWidth
37
+ def get_content_width
38
38
  return @contentWidth
39
39
  end
40
40
 
41
- def getContentHeight
41
+ def get_content_height
42
42
  return @contentHeight
43
43
  end
44
44
 
@@ -50,59 +50,59 @@ class MultiImageCanvas < Fox::FXScrollWindow
50
50
  return @images.empty? ? nil : @images[0]
51
51
  end
52
52
 
53
- def setImages(imageArray)
53
+ def set_images(imageArray)
54
54
  @images = imageArray
55
55
  end
56
56
 
57
- def loadAndShowImage(file)
58
- loadImage(file)
57
+ def load_and_show_image(file)
58
+ load_image(file)
59
59
  end
60
60
 
61
- def loadImage(file, additive=false, degree=0)
61
+ def load_image(file, additive=false, degree=0)
62
62
  if additive && @thumbs.has_key?(file)
63
63
  images.push(@thumbs[file])
64
64
  return
65
65
  end
66
- if !@imgProcessor.isSupportedImageFile? file
66
+ unless @imgProcessor.is_supported_image_file? file
67
67
  FXMessageBox.error(self, MBOX_OK, "Warning image type",
68
- "Unsupported image type: #{file}")
68
+ "Unsupported image type: #{file}")
69
69
  return
70
70
  end
71
71
  getApp.beginWaitCursor do
72
- img = @imgProcessor.loadImage(file, false)
72
+ img = @imgProcessor.load_image(file, false)
73
73
  unless degree == 0
74
- @imgProcessor.rotateImage(img, degree)
74
+ @imgProcessor.rotate_image(img, degree)
75
75
  end
76
- destroyAll(@images) if !additive
76
+ destroy_all(@images) if !additive
77
77
  images.push(img)
78
78
  if additive
79
- cacheThumbFor(file, img)
79
+ cache_thumb_for(file, img)
80
80
  else
81
- w = img.getWidth
82
- h = img.getHeight
83
- if(w > 1600 && h > 1000)
84
- # reduce footprint
85
- @imgProcessor.fitImage(img, 1600, 1000, 1)
86
- end
87
- FXMemoryStream.open(FXStreamSave, nil) do |stream|
88
- img.savePixels(stream)
89
- @buffer = stream.takeBuffer
90
- end
91
- @imgProcessor.fitImage(img, getWidth, getHeight, 1)
81
+ w = img.getWidth
82
+ h = img.getHeight
83
+ if(w > 1600 && h > 1000)
84
+ # reduce footprint
85
+ @imgProcessor.fit_image(img, 1600, 1000, 1)
86
+ end
87
+ FXMemoryStream.open(FXStreamSave, nil) do |stream|
88
+ img.savePixels(stream)
89
+ @buffer = stream.takeBuffer
90
+ end
91
+ @imgProcessor.fit_image(img, getWidth, getHeight, 1)
92
92
  end
93
93
  img.create
94
- forceRefresh if !additive
94
+ force_refresh if !additive
95
95
  end
96
96
  end
97
97
 
98
- def cacheThumbFor(file, img)
99
- @imgProcessor.fitImage(img, 100, 100, 0)
98
+ def cache_thumb_for(file, img)
99
+ @imgProcessor.fit_image(img, 100, 100, 0)
100
100
  @thumbs[file] = img
101
101
  @fifoThumbsKeys.push(file)
102
102
  if @fifoThumbsKeys.size > CacheSize
103
- thumbToDestroy = @fifoThumbsKeys.shift
104
- @thumbs[thumbToDestroy].destroy
105
- @thumbs.delete(thumbToDestroy)
103
+ thumb_to_destroy = @fifoThumbsKeys.shift
104
+ @thumbs[thumb_to_destroy].destroy
105
+ @thumbs.delete(thumb_to_destroy)
106
106
  end
107
107
  end
108
108
 
@@ -114,49 +114,49 @@ class MultiImageCanvas < Fox::FXScrollWindow
114
114
  FXMemoryStream.open(FXStreamLoad, @buffer) do |stream|
115
115
  img.loadPixels(stream)
116
116
  end
117
- @imgProcessor.fitImage(img, w, h)
118
- forceRefresh
117
+ @imgProcessor.fit_image(img, w, h)
118
+ force_refresh
119
119
  end
120
120
 
121
- def loadImages(files)
121
+ def load_images(files)
122
122
  images.clear
123
- files.each { |f| loadImage(f, true) }
124
- forceRefresh
123
+ files.each { |f| load_image(f, true) }
124
+ force_refresh
125
125
  end
126
126
 
127
- def forceRefresh
127
+ def force_refresh
128
128
  contentWindow.update
129
129
  contentWindow.repaint
130
130
  contentWindow.recalc
131
131
  repaint
132
132
  end
133
133
 
134
- def onPaint(sender, sel, unused)
134
+ def on_paint(sender, sel, unused)
135
135
  sdc = FXDCWindow.new(contentWindow)
136
136
  sdc.fillRectangle(0, 0, width, height)
137
137
  unless images.empty? || width < 5 || height < 5
138
138
  # Draw image table
139
139
  x = 0;
140
140
  y = 0;
141
- lineHeight = 0
142
- subWidth = images.size == 1 ? 0 : 16 # width for vScrollbar
143
- maxW = [images[0].width + subWidth, width].max
141
+ line_height = 0
142
+ sub_width = images.size == 1 ? 0 : 16 # width for vScrollbar
143
+ max_w = [images[0].width + sub_width, width].max
144
144
  images.each { |img|
145
- imgHeight = img.height
146
- imgWidth = img.width
147
- maxW = imgWidth if imgWidth + subWidth > maxW
148
- if x + img.width > maxW - subWidth
149
- x = 0
150
- y += lineHeight + 4
151
- lineHeight = 0
152
- end
153
- lineHeight = imgHeight if imgHeight > lineHeight
154
- sdc.drawImage(img, x, y)
155
- sdc.fillRectangle(x, y + imgHeight, x + imgWidth, y + lineHeight)
156
- x += imgWidth + 4
145
+ imgHeight = img.height
146
+ imgWidth = img.width
147
+ max_w = imgWidth if imgWidth + sub_width > max_w
148
+ if x + img.width > max_w - sub_width
149
+ x = 0
150
+ y += line_height + 4
151
+ line_height = 0
152
+ end
153
+ line_height = imgHeight if imgHeight > line_height
154
+ sdc.drawImage(img, x, y)
155
+ sdc.fillRectangle(x, y + imgHeight, x + imgWidth, y + line_height)
156
+ x += imgWidth + 4
157
157
  }
158
- @contentWidth = maxW
159
- @contentHeight = y + lineHeight
158
+ @contentWidth = max_w
159
+ @contentHeight = y + line_height
160
160
  end
161
161
  sdc.end
162
162
  end
@@ -7,98 +7,220 @@ require 'piggy-core/environment'
7
7
  require 'piggy-core/options'
8
8
  require 'piggy-gui/require-fox'
9
9
  require 'piggy-gui/modal_dialog'
10
+ require 'piggy-gui/html_options_widget'
10
11
 
11
12
  # Dialog to change some of Piggy's options.
12
13
  class OptionsDialog < ModalDialog
13
14
  attr_reader(:options)
14
15
 
15
16
  def initialize(owner, piggyOptions)
16
- title = "Piggy general options"
17
+ title = "Piggy options"
17
18
  super(owner, title, DECOR_TITLE|DECOR_BORDER|DECOR_CLOSE|PIGGY_WINDOW_PLACEMENT)
18
19
  @options = piggyOptions.clone
19
20
  @fillMode = LAYOUT_LEFT|LAYOUT_FILL_X|LAYOUT_FILL_Y
20
21
  @frameStyle = FRAME_NONE
21
22
  @shell = WinShell.instance
22
- initializeLayout
23
+ initialize_layout
23
24
  end
24
25
 
25
- def initFrame(aFrame)
26
+ def init_frame(aFrame)
26
27
  aFrame.setFrameStyle(@frameStyle)
27
28
  aFrame.setLayoutHints(@fillMode)
28
29
  return aFrame
29
30
  end
30
31
 
31
- def initializeLayout
32
- basicFrame = FXVerticalFrame.new(self)
33
- cbFlags = ICON_BEFORE_TEXT|LAYOUT_SIDE_TOP
34
-
35
- FXLabel.new(basicFrame, "Image processing:")
36
- radioButtonsFrame = initFrame(FXVerticalFrame.new(basicFrame))
37
- @rbFxruby = FXRadioButton.new(radioButtonsFrame, "Internal (FXRuby)")
38
- @rbNconvert = FXRadioButton.new(radioButtonsFrame, "NConvert (XNView)")
39
- @rbRmagick = FXRadioButton.new(radioButtonsFrame, "RMagick")
40
- updateProcessor
32
+ def initialize_layout
33
+ basic_frame = FXVerticalFrame.new(self)
34
+ tabs = FXTabBook.new(basic_frame, :opts => LAYOUT_FILL)
35
+ add_tab_general_to(tabs)
36
+ add_tab_html_to(tabs)
37
+ add_tab_ftp_to(tabs)
38
+ add_tab_experimental_to(tabs)
39
+ add_ok_cancel_buttons_to(basic_frame)
40
+ end
41
+
42
+ def add_tab(book, name)
43
+ FXTabItem.new(book, " #{name} ");
44
+ return FXVerticalFrame.new(book, :opts => FRAME_RAISED|LAYOUT_FILL)
45
+ end
46
+
47
+ def cb_flags
48
+ ICON_BEFORE_TEXT|LAYOUT_SIDE_TOP
49
+ end
50
+
51
+ def add_label_to(frame, msg)
52
+ FXLabel.new(frame, msg, :opts => JUSTIFY_LEFT|LAYOUT_CENTER_Y)
53
+ end
54
+
55
+ def add_txt_to(frame, msg)
56
+ FXLabel.new(frame, msg, :opts => JUSTIFY_LEFT)
57
+ end
58
+
59
+ def add_tab_general_to(tabs)
60
+ tab = add_tab(tabs, "General")
61
+
62
+ add_label_to(tab, "Image processing:")
63
+ radio_buttons_frame = init_frame(FXVerticalFrame.new(tab))
64
+ @rbFxruby = FXRadioButton.new(radio_buttons_frame, "Internal (FXRuby)")
65
+ @rbNconvert = FXRadioButton.new(radio_buttons_frame, "NConvert (XNView)")
66
+ @rbRmagick = FXRadioButton.new(radio_buttons_frame, "RMagick")
67
+ update_processor
41
68
  @rbFxruby.connect(SEL_COMMAND) { |sender, sel, ptr|
42
- @options.useFxruby!
43
- updateProcessor
69
+ @options.use_fxruby!
70
+ update_processor
44
71
  }
45
72
  @rbNconvert.connect(SEL_COMMAND) { |sender, sel, ptr|
46
- @options.useNconvert!
47
- updateProcessor
73
+ @options.use_nconvert!
74
+ update_processor
48
75
  }
49
76
  if RMAGICK_AVAILIABLE
50
77
  @rbRmagick.connect(SEL_COMMAND) { |sender, sel, ptr|
51
- @options.useRmagick!
52
- updateProcessor
78
+ @options.use_rmagick!
79
+ update_processor
53
80
  }
54
81
  else
55
82
  @rbRmagick.disable
56
83
  end
57
-
58
- FXLabel.new(basicFrame, "Main window:")
59
-
60
- cb = FXCheckButton.new(basicFrame,
61
- 'Show log pane',
62
- nil, 0, cbFlags)
84
+
85
+ add_label_to(tab, "Main window:")
86
+
87
+ cb = FXCheckButton.new(tab,
88
+ 'Show log pane',
89
+ nil, 0, cb_flags)
63
90
  cb.setCheck(@options.useLog)
64
91
  cb.connect(SEL_COMMAND) { |sender, sel, ptr|
65
92
  @options.useLog = ptr
66
93
  }
67
- cb = FXCheckButton.new(basicFrame,
68
- 'Show preview pane (experimental)',
69
- nil, 0, cbFlags)
70
- cb.setCheck(@options.usePreview)
71
- cb.connect(SEL_COMMAND) { |sender, sel, ptr|
72
- @options.usePreview = ptr
73
- }
74
- FXLabel.new(basicFrame, "Web browser:")
75
- combo = FXHorizontalFrame.new(basicFrame)
76
- @browserField = FXTextField.new(combo, 32)
77
- @browserField.setText(ruby2Fox(@shell.osPath(@options.browser)))
94
+
95
+ add_label_to(tab, "Web browser:")
96
+ combo = FXHorizontalFrame.new(tab)
97
+ @browserField = FXTextField.new(combo, 32)
98
+ @browserField.setText(ruby_2_fox(@shell.os_path(@options.browser)))
78
99
  @browserField.connect(SEL_COMMAND) {
79
- browserChanged
100
+ browser_changed
80
101
  }
81
- chooserButton = FXButton.new(combo, '...')
82
- chooserButton.connect(SEL_COMMAND) {
102
+ chooser_button = FXButton.new(combo, '...')
103
+ chooser_button.connect(SEL_COMMAND) {
83
104
  dialog = FXFileDialog.new(self, "Choose browser")
84
105
  dialog.filename = @browserField.getText
85
106
  dialog.selectMode = SELECTFILE_EXISTING
86
107
  unless dialog.execute == 0
87
- @browserField.setText(dialog.filename)
88
- browserChanged
108
+ @browserField.setText(dialog.filename)
109
+ browser_changed
110
+ end
111
+ }
112
+ end
113
+
114
+ def add_tab_html_to(tabs)
115
+ tab = add_tab(tabs, "Html")
116
+ HtmlOptionsWidget.new(tab, @options)
117
+ end
118
+
119
+ def add_tab_ftp_to(tabs)
120
+ tab = add_tab(tabs, "Upload")
121
+ frame = FXMatrix.new(tab, 2, MATRIX_BY_COLUMNS)
122
+ add_label_to(frame, "FTP server:")
123
+ server_field = FXTextField.new(frame, 32)
124
+ server_field.setLayoutHints(LAYOUT_FILL_X|LAYOUT_FILL_COLUMN)
125
+ server_field.setText(ruby_2_fox(@options.ftpHost))
126
+ server_field.connect(SEL_COMMAND) {
127
+ @options.ftpHost = fox_2_ruby(server_field.getText)
128
+ }
129
+ add_label_to(frame, "User:")
130
+ user_field = FXTextField.new(frame, 32)
131
+ user_field.setLayoutHints(LAYOUT_FILL_X|LAYOUT_FILL_COLUMN)
132
+ user_field.setText(@options.ftpUser)
133
+ user_field.connect(SEL_COMMAND) {
134
+ @options.ftpUser = fox_2_ruby(user_field.getText)
135
+ }
136
+ add_label_to(frame, "Remote path:")
137
+ remote_path_field = FXTextField.new(frame, 32)
138
+ remote_path_field.setLayoutHints(LAYOUT_FILL_X|LAYOUT_FILL_COLUMN)
139
+ remote_path_field.setText(@options.remoteDestinationPath)
140
+ remote_path_field.connect(SEL_COMMAND) {
141
+ @options.remoteDestinationPath = fox_2_ruby(remote_path_field.getText)
142
+ }
143
+
144
+ frame = FXMatrix.new(tab, 2, MATRIX_BY_COLUMNS)
145
+ add_txt_to(frame, "Expert settings")
146
+ add_txt_to(frame, "")
147
+ add_label_to(frame, "Exclude filters:")
148
+ filters_field = FXTextField.new(frame, 32)
149
+ filters_field.setLayoutHints(LAYOUT_FILL_X|LAYOUT_FILL_COLUMN)
150
+ filters_field.setText(@options.excludeFilters.join(','))
151
+ filters_field.connect(SEL_COMMAND) {
152
+ filters_txt = fox_2_ruby(filters_field.getText)
153
+ @options.excludeFilters = filters_txt.split(',').
154
+ collect { |s| s.strip }.
155
+ reject { |s| s.length == 0 }
156
+ }
157
+ end
158
+
159
+ def add_tab_experimental_to(tabs)
160
+ tab = add_tab(tabs, "Experimental")
161
+ msg = "These options are old or experimental." +
162
+ "\nDon't change them unless you really need to."
163
+ add_txt_to(tab, msg)
164
+ cb = FXCheckButton.new(tab,
165
+ 'Preselect directories',
166
+ nil, 0, cb_flags)
167
+ cb.setCheck(@options.preselectDirectories)
168
+ cb.connect(SEL_COMMAND) { |sender, sel, ptr|
169
+ @options.preselectDirectories = ptr
170
+ }
171
+ cb = FXCheckButton.new(tab,
172
+ 'Show preview pane',
173
+ nil, 0, cb_flags)
174
+ cb.setCheck(@options.usePreview)
175
+ cb.connect(SEL_COMMAND) { |sender, sel, ptr|
176
+ @options.usePreview = ptr
177
+ }
178
+ cb = FXCheckButton.new(tab,
179
+ 'Use HTML tables',
180
+ nil, 0, cb_flags)
181
+ cb.setCheck(@options.useTable)
182
+ cb.connect(SEL_COMMAND) { |sender, sel, ptr|
183
+ @options.useTable = ptr
184
+ }
185
+ cb = FXCheckButton.new(tab,
186
+ 'Styles sample',
187
+ nil, 0, cb_flags)
188
+ cb.setCheck(@options.stylesSample)
189
+ cb.connect(SEL_COMMAND) { |sender, sel, ptr|
190
+ @options.stylesSample = ptr
191
+ }
192
+
193
+ size_frame = FXHorizontalFrame.new(tab, FRAME_NONE, 0, 0, 0 , 0, 0, 0, 0, 0)
194
+ add_txt_to(size_frame, "Thumbnail size:")
195
+ thumb_width_field = FXTextField.new(size_frame, 4)
196
+ add_label_to(size_frame, " x ")
197
+ thumb_height_field = FXTextField.new(size_frame, 4)
198
+ thumb_width_field.setText(ruby_2_fox(@options.thumbWidth.to_s))
199
+ thumb_height_field.setText(ruby_2_fox(@options.thumbHeight.to_s))
200
+ thumb_width_field.connect(SEL_COMMAND) { |sender, sel, ptr|
201
+ begin
202
+ @options.thumbWidth = fox_2_ruby(thumb_width_field.getText).to_i
203
+ rescue StandardError => ex
204
+ thumb_width_field.setText(ruby_2_fox(@options.thumbWidth.to_s))
205
+ end
206
+ }
207
+ thumb_height_field.connect(SEL_COMMAND) { |sender, sel, ptr|
208
+ begin
209
+ @options.thumbHeight = fox_2_ruby(thumb_height_field.getText).to_i
210
+ rescue StandardError => ex
211
+ thumb_height_field.setText(ruby_2_fox(@options.thumbHeight.to_s))
89
212
  end
90
213
  }
91
- addOkCancelButtonsTo(basicFrame)
92
214
  end
93
215
 
94
- def browserChanged
95
- @options.browser = @shell.rubyPath(fox2Ruby(@browserField.getText))
216
+ def browser_changed
217
+ @options.browser = @shell.ruby_path(fox_2_ruby(@browserField.getText))
96
218
  end
97
219
 
98
- def updateProcessor
99
- @rbFxruby.setCheck(@options.useFxruby?)
100
- @rbNconvert.setCheck(@options.useNconvert?)
101
- @rbRmagick.setCheck(@options.useRmagick?)
220
+ def update_processor
221
+ @rbFxruby.setCheck(@options.use_fxruby?)
222
+ @rbNconvert.setCheck(@options.use_nconvert?)
223
+ @rbRmagick.setCheck(@options.use_rmagick?)
102
224
  end
103
225
 
104
226
  def validate