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
@@ -1,95 +1,92 @@
1
1
  body {
2
- font-family: Helvetica, Arial, sans-serif;
3
- }
4
-
5
- body.thumbs {
6
- text-align: center;
2
+ font-family: Helvetica, Arial, sans-serif;
3
+ text-align: center;
7
4
  }
8
5
 
9
6
  div {
10
- margin:0;
11
- padding:0;
7
+ margin:0;
8
+ padding:0;
12
9
  }
13
10
 
14
- dl {
15
- margin-left: auto;
16
- margin-right: auto;
17
- max-width:600px;
11
+ dl, table.table {
12
+ margin-left: auto;
13
+ margin-right: auto;
14
+ max-width:600px;
18
15
  }
19
16
 
20
17
  /* no max-width in IE < 7 */
21
18
  * html dl {
22
- width: 600px;
19
+ width: 600px;
23
20
  }
24
21
 
25
22
  dd {
26
- margin:0;
27
- padding: 0;
28
- width: 120px;
29
- height: 125px;
30
- float: left;
31
- vertical-align: top;
32
- text-align: center;
23
+ margin:0;
24
+ padding: 0;
25
+ width: 120px;
26
+ height: 125px;
27
+ float: left;
28
+ vertical-align: top;
29
+ text-align: center;
33
30
  }
34
31
 
35
32
  .preview {
36
- float:left;
33
+ float:left;
37
34
  }
38
35
 
39
36
  * html .image_page div {
40
- float: left;
37
+ float: left;
41
38
  }
42
39
 
43
40
  .image_page .navigation div div {
44
- float: left;
45
- width: 100%;
46
- border-bottom: solid 1px Silver;
47
- padding-bottom: 4px;
48
- margin-bottom: 8px;
41
+ float: left;
42
+ width: 100%;
43
+ border-bottom: solid 1px Silver;
44
+ padding-bottom: 4px;
45
+ margin-bottom: 8px;
49
46
  }
50
47
 
51
48
  .image_page .navigation a {
52
- display: block;
53
- float: left;
54
- width: 60px;
55
- margin: 10px;
56
- text-decoration: none;
57
- color: Silver;
58
- font-weight: bold;
49
+ display: block;
50
+ float: left;
51
+ width: 60px;
52
+ margin: 10px;
53
+ text-decoration: none;
54
+ color: Silver;
55
+ font-weight: bold;
59
56
  }
60
57
 
61
58
  .image_page .image {
62
- clear: both;
63
- float: left;
59
+ clear: both;
60
+ float: left;
64
61
  }
65
62
 
66
63
  .image_page .comment p {
67
- padding: 8px;
64
+ padding: 8px;
68
65
  }
69
66
 
70
67
  .thumb, .image_page .image div {
71
- background-image:url("shadow.jpg");
72
- background-position:right bottom;
73
- background-repeat:no-repeat;
68
+ background-image:url("shadow.jpg");
69
+ background-position:right bottom;
70
+ background-repeat:no-repeat;
74
71
  }
75
72
 
76
73
  .thumb p, .image_page .image div div {
77
- margin:0;
78
- padding:0;
79
- background-image:url("shadow-rt.jpg");
80
- background-position:right -80px;
81
- background-repeat:no-repeat;
74
+ margin:0;
75
+ padding:0;
76
+ background-image:url("shadow-rt.jpg");
77
+ background-position:right -80px;
78
+ background-repeat:no-repeat;
82
79
  }
83
80
 
84
81
  .thumb p a, .image_page .image div div p {
85
- display: block;
86
- padding-right:20px;
87
- padding-bottom:20px;
88
- background-image:url("shadow-lb.jpg");
89
- background-position:-80px bottom;
90
- background-repeat:no-repeat;
82
+ display: block;
83
+ padding-right:20px;
84
+ padding-bottom:20px;
85
+ background-image:url("shadow-lb.jpg");
86
+ background-position:-80px bottom;
87
+ background-repeat:no-repeat;
91
88
  }
92
89
 
93
90
  .thumb p a img {
94
- border:none;
91
+ border:none;
95
92
  }
@@ -0,0 +1,74 @@
1
+ body {
2
+ text-align: center;
3
+ color: white;
4
+ background: black;
5
+ }
6
+
7
+ body.thumbs {
8
+ background: black url(wunderkerze.jpg) no-repeat bottom right;
9
+ min-height:600px; /* improves Opera 9 image positioning */
10
+ }
11
+
12
+ a {
13
+ color:yellow;
14
+ }
15
+
16
+ .image_page a {
17
+ margin: 10px;
18
+ }
19
+
20
+ .thumbs dl.table {
21
+ padding-left: 84px;
22
+ }
23
+
24
+ div {
25
+ margin:0;
26
+ padding:0;
27
+ }
28
+
29
+ dl, table.table {
30
+ margin-left: auto;
31
+ margin-right: auto;
32
+ max-width: 600px;
33
+ }
34
+
35
+ /* no max-width in IE < 7 */
36
+ * html dl {
37
+ width: 600px;
38
+ }
39
+
40
+ dd {
41
+ margin: 0px;
42
+ padding: 0;
43
+ width: 108px;
44
+ height: 108px;
45
+ background: url(sh.png) -20px -25px;
46
+ float: left;
47
+ vertical-align: middle;
48
+ text-align: center;
49
+ }
50
+
51
+ .thumb p {
52
+ margin:0;
53
+ padding:0;
54
+ }
55
+
56
+ .thumb p a {
57
+ display: block;
58
+ padding: 0px;
59
+ padding-right: 6px;
60
+ padding-bottom: 6px;
61
+ }
62
+
63
+ .thumb p a img {
64
+ border: solid gray 1px;
65
+ }
66
+
67
+ .image_page img {
68
+ max-width: 100%;
69
+ }
70
+
71
+ /* IE 6 image height */
72
+ * html .thumb p a {
73
+ padding-bottom: 2px;
74
+ }
@@ -5,14 +5,14 @@ require 'test/unit'
5
5
  require 'piggy-core/file_info'
6
6
 
7
7
  class FilePathTest < Test::Unit::TestCase
8
- def test_internPath
9
- assert_equal('C:/', FilePath.internPath('C:'))
10
- assert_equal('C:/', FilePath.internPath("C:\\"))
11
- assert_equal('C:/bla/bla', FilePath.internPath("C:\\bla\\bla"))
12
- assert_equal('C:/bla/bla/', FilePath.internPath("C:\\bla\\bla\\"))
13
-
14
- assert_equal('C:/bla/bla', FilePath.internPath("C:/bla/bla"))
15
- assert_equal('/bla/bla', FilePath.internPath("/bla/bla"))
8
+ def test_intern_path
9
+ assert_equal('C:/', FilePath.intern_path('C:'))
10
+ assert_equal('C:/', FilePath.intern_path("C:\\"))
11
+ assert_equal('C:/bla/bla', FilePath.intern_path("C:\\bla\\bla"))
12
+ assert_equal('C:/bla/bla/', FilePath.intern_path("C:\\bla\\bla\\"))
13
+
14
+ assert_equal('C:/bla/bla', FilePath.intern_path("C:/bla/bla"))
15
+ assert_equal('/bla/bla', FilePath.intern_path("/bla/bla"))
16
16
  end
17
17
 
18
18
  def test_join
@@ -37,7 +37,7 @@ class FilePathTest < Test::Unit::TestCase
37
37
  assert_equal(['C:', 'bla', 'bla'], FilePath.split('C:/bla/bla'))
38
38
  end
39
39
 
40
- def test_oneDirUp
40
+ def test_one_dir_up
41
41
  assert_equal(['C:', 'bla', 'bla'], FilePath.split('C:/bla/bla'))
42
42
  end
43
43
  end
@@ -46,8 +46,8 @@ class FileNameTest < Test::Unit::TestCase
46
46
  def test_c_bla_bla_bla
47
47
  fn = FileName.new('bla')
48
48
  fn.path = "C:\\bla\\bla"
49
- assert_equal('C:/bla/bla/bla', fn.nameWithPath)
50
- assert_equal(['C:', 'bla', 'bla'], fn.pathSections)
49
+ assert_equal('C:/bla/bla/bla', fn.name_with_path)
50
+ assert_equal(['C:', 'bla', 'bla'], fn.path_sections)
51
51
  end
52
52
  end
53
53
 
@@ -55,8 +55,8 @@ class FileInfoTest < Test::Unit::TestCase
55
55
  def test_c_bla_bla_bla
56
56
  fn = FileInfo.new('bla')
57
57
  fn.path = "C:\\bla\\bla"
58
- assert_equal('C:/bla/bla/bla', fn.nameWithPath)
59
- assert_equal(['C:', 'bla', 'bla'], fn.pathSections)
58
+ assert_equal('C:/bla/bla/bla', fn.name_with_path)
59
+ assert_equal(['C:', 'bla', 'bla'], fn.path_sections)
60
60
  end
61
61
 
62
62
  def test_directory
@@ -73,12 +73,12 @@ class DirectoryContentsTest < Test::Unit::TestCase
73
73
  assert_equal([], to.keys)
74
74
  end
75
75
 
76
- def test_directoriesAndFiles
76
+ def test_directories_and_files
77
77
  to = DirectoryContents.new('bla')
78
- fnDir = FileInfo.new('blubbDir')
79
- fnDir.directory!
78
+ fn_dir = FileInfo.new('blubbDir')
79
+ fn_dir.directory!
80
80
  fn = FileInfo.new('blubb')
81
- to.add(fnDir)
81
+ to.add(fn_dir)
82
82
  to.add(fn)
83
83
  assert_equal(['blubbDir'], to.directories)
84
84
  assert_equal(['blubb'], to.files)
@@ -88,10 +88,10 @@ class DirectoryContentsTest < Test::Unit::TestCase
88
88
  def test_duplicates
89
89
  to = DirectoryContents.new('bla')
90
90
  fn = FileInfo.new('blubb')
91
- fnDir = fn.clone
92
- fnDir.directory!
91
+ fn_dir = fn.clone
92
+ fn_dir.directory!
93
93
  to.add(fn)
94
- to.add(fnDir)
94
+ to.add(fn_dir)
95
95
  assert_equal(['blubb'], to.directories)
96
96
  assert_equal([], to.files)
97
97
  assert_equal(['blubb'], to.keys)
@@ -99,18 +99,18 @@ class DirectoryContentsTest < Test::Unit::TestCase
99
99
  end
100
100
 
101
101
  class FileRepositoryTest < Test::Unit::TestCase
102
- def test_smokeTest
102
+ def test_smoke
103
103
  to = FileRepository.new
104
- infArray = Array.new
105
- infArray.push(FileInfo.new('dir1', 'f'))
106
- infArray.push(FileInfo.new('dir2', 'f'))
107
- infArray.push(FileInfo.new('dir2', 'f'))
108
- infArray.push(FileInfo.new('dir', 'f2'))
104
+ inf_array = Array.new
105
+ inf_array.push(FileInfo.new('dir1', 'f'))
106
+ inf_array.push(FileInfo.new('dir2', 'f'))
107
+ inf_array.push(FileInfo.new('dir2', 'f'))
108
+ inf_array.push(FileInfo.new('dir', 'f2'))
109
109
  (0..3).each { |i|
110
- infArray[i].size = i + 1
111
- to.add(infArray[i])
110
+ inf_array[i].size = i + 1
111
+ to.add(inf_array[i])
112
112
  }
113
- assert_equal(infArray[2], to.get(FileName.new('dir2', 'f')))
113
+ assert_equal(inf_array[2], to.get(FileName.new('dir2', 'f')))
114
114
  assert_equal(4, to.get(FileName.new('dir', 'f2')).size)
115
115
  end
116
116
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: Piggy
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.4.2.4
4
+ version: 0.4.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - "Sascha D\xF6rdelmann"
@@ -9,7 +9,7 @@ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
11
 
12
- date: 2008-07-08 00:00:00 +02:00
12
+ date: 2009-03-04 00:00:00 +01:00
13
13
  default_executable:
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
@@ -43,9 +43,12 @@ extensions: []
43
43
  extra_rdoc_files: []
44
44
 
45
45
  files:
46
- - LICENCE.txt
47
- - test.rb
48
- - UNINSTALL.txt
46
+ - bin
47
+ - bin/directory_diff
48
+ - bin/ftp_browser
49
+ - bin/piggy
50
+ - CHANGES.txt
51
+ - INSTALL.txt
49
52
  - lib
50
53
  - lib/directory_diff.rb
51
54
  - lib/ftp_browser.rb
@@ -55,6 +58,7 @@ files:
55
58
  - lib/icons/auto-upload-right.ico
56
59
  - lib/icons/back.ico
57
60
  - lib/icons/checked.ico
61
+ - lib/icons/connect.ico
58
62
  - lib/icons/copy.png
59
63
  - lib/icons/cut.png
60
64
  - lib/icons/dir.ico
@@ -62,8 +66,10 @@ files:
62
66
  - lib/icons/file.ico
63
67
  - lib/icons/fileopen.png
64
68
  - lib/icons/filesave.ico
69
+ - lib/icons/fullscreen.ico
65
70
  - lib/icons/gallery.ico
66
71
  - lib/icons/generate.ico
72
+ - lib/icons/hide_details.ico
67
73
  - lib/icons/minus.png
68
74
  - lib/icons/move-right-dir.ico
69
75
  - lib/icons/move-right-file.ico
@@ -76,53 +82,55 @@ files:
76
82
  - lib/icons/reload.ico
77
83
  - lib/icons/remove-selected.ico
78
84
  - lib/icons/rotate.ico
85
+ - lib/icons/show_details.ico
79
86
  - lib/icons/slides.ico
80
87
  - lib/icons/stop-slides.ico
81
88
  - lib/icons/unchecked-dir.ico
82
89
  - lib/icons/unchecked.ico
83
90
  - lib/icons/upload-selected.ico
84
91
  - lib/icons/upload.ico
85
- - lib/icons/fullscreen.ico
86
92
  - lib/piggy-core
87
93
  - lib/piggy-core/alive_check.rb
88
94
  - lib/piggy-core/debug.rb
89
95
  - lib/piggy-core/encoding.rb
90
96
  - lib/piggy-core/environment.rb
97
+ - lib/piggy-core/exifr_adapter.rb
91
98
  - lib/piggy-core/file_info.rb
99
+ - lib/piggy-core/ftp_adapter.rb
92
100
  - lib/piggy-core/htmlgen.rb
101
+ - lib/piggy-core/nconvert_thumbsgen.rb
102
+ - lib/piggy-core/options.rb
93
103
  - lib/piggy-core/options_persistence.rb
94
104
  - lib/piggy-core/progress.rb
95
105
  - lib/piggy-core/rmagick_thumbnail_page_generator.rb
96
106
  - lib/piggy-core/thumbnail_generator.rb
107
+ - lib/piggy-core/thumbnail_page_generator.rb
97
108
  - lib/piggy-core/upload_info.rb
98
109
  - lib/piggy-core/version.rb
99
- - lib/piggy-core/ftp_adapter.rb
100
110
  - lib/piggy-core/winshell.rb
101
- - lib/piggy-core/nconvert_thumbsgen.rb
102
- - lib/piggy-core/exifr_adapter.rb
103
- - lib/piggy-core/options.rb
104
- - lib/piggy-core/thumbnail_page_generator.rb
105
111
  - lib/piggy-gui
106
- - lib/piggy-gui/fox_thumbsgen.rb
107
- - lib/piggy-gui/image_processor.rb
108
- - lib/piggy-gui/multiimagecanvas.rb
109
- - lib/piggy-gui/progress_with_dialog.rb
110
- - lib/piggy-gui/require-fox.rb
111
112
  - lib/piggy-gui/directory_diff_widget.rb
112
- - lib/piggy-gui/ftp_browser_widget.rb
113
- - lib/piggy-gui/options_dialog.rb
114
- - lib/piggy-gui/modal_dialog.rb
115
113
  - lib/piggy-gui/dir_chooser.rb
116
114
  - lib/piggy-gui/filtered_file_list.rb
115
+ - lib/piggy-gui/fox_thumbsgen.rb
116
+ - lib/piggy-gui/ftp_browser_widget.rb
117
117
  - lib/piggy-gui/fullscreen.rb
118
- - lib/piggy-gui/pipe_log.rb
119
- - lib/piggy-gui/piggy_image_browser.rb
120
118
  - lib/piggy-gui/html_generation_dialog.rb
119
+ - lib/piggy-gui/html_options_widget.rb
120
+ - lib/piggy-gui/image_processor.rb
121
+ - lib/piggy-gui/modal_dialog.rb
122
+ - lib/piggy-gui/multiimagecanvas.rb
123
+ - lib/piggy-gui/options_dialog.rb
124
+ - lib/piggy-gui/piggy_image_browser.rb
125
+ - lib/piggy-gui/pipe_log.rb
126
+ - lib/piggy-gui/progress_with_dialog.rb
127
+ - lib/piggy-gui/require-fox.rb
121
128
  - lib/piggy.rb
122
129
  - lib/templates
123
130
  - lib/templates/fuss.htm
124
131
  - lib/templates/kopf.htm
125
132
  - lib/templates/navigation.htm
133
+ - lib/templates/slideshow.htm
126
134
  - lib/templates/slideshow.js
127
135
  - lib/templates/styles
128
136
  - lib/templates/styles/basic
@@ -141,27 +149,33 @@ files:
141
149
  - lib/templates/styles/shadow/ro.gif
142
150
  - lib/templates/styles/shadow/ru.gif
143
151
  - lib/templates/styles/shadow/style.css
144
- - lib/templates/styles/shadow_D9F5F3
145
- - lib/templates/styles/shadow_D9F5F3/style.css
146
- - lib/templates/styles/shadow_D9F5F3/ro.jpg
147
- - lib/templates/styles/shadow_D9F5F3/lu.jpg
148
- - lib/templates/styles/shadow_D9F5F3/ru.jpg
149
- - lib/templates/styles/shadow_D9F5F3/lo.jpg
152
+ - lib/templates/styles/shadow_black
153
+ - lib/templates/styles/shadow_black/lo.jpg
154
+ - lib/templates/styles/shadow_black/lu.jpg
155
+ - lib/templates/styles/shadow_black/ro.jpg
156
+ - lib/templates/styles/shadow_black/ru.jpg
157
+ - lib/templates/styles/shadow_black/style.css
150
158
  - lib/templates/styles/shadow_bowers
151
- - lib/templates/styles/shadow_bowers/shadow.jpg
152
- - lib/templates/styles/shadow_bowers/shadow-rt.jpg
153
159
  - lib/templates/styles/shadow_bowers/shadow-lb.jpg
160
+ - lib/templates/styles/shadow_bowers/shadow-rt.jpg
161
+ - lib/templates/styles/shadow_bowers/shadow.jpg
154
162
  - lib/templates/styles/shadow_bowers/style.css
155
- - lib/templates/slideshow.htm
163
+ - lib/templates/styles/shadow_D9F5F3
164
+ - lib/templates/styles/shadow_D9F5F3/lo.jpg
165
+ - lib/templates/styles/shadow_D9F5F3/lu.jpg
166
+ - lib/templates/styles/shadow_D9F5F3/ro.jpg
167
+ - lib/templates/styles/shadow_D9F5F3/ru.jpg
168
+ - lib/templates/styles/shadow_D9F5F3/style.css
169
+ - lib/templates/styles/sylvester
170
+ - lib/templates/styles/sylvester/sh.png
171
+ - lib/templates/styles/sylvester/style.css
172
+ - lib/templates/styles/sylvester/wunderkerze.jpg
173
+ - LICENCE.txt
174
+ - README.txt
156
175
  - test
157
176
  - test/file_info_test.rb
158
- - bin
159
- - bin/directory_diff
160
- - bin/ftp_browser
161
- - bin/piggy
162
- - INSTALL.txt
163
- - CHANGES.txt
164
- - README.txt
177
+ - test.rb
178
+ - UNINSTALL.txt
165
179
  has_rdoc: true
166
180
  homepage: http://piggy.rubyforge.org
167
181
  post_install_message:
@@ -184,7 +198,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
184
198
  requirements: []
185
199
 
186
200
  rubyforge_project:
187
- rubygems_version: 1.2.0
201
+ rubygems_version: 1.3.1
188
202
  signing_key:
189
203
  specification_version: 2
190
204
  summary: (P)ick (i)mages and (g)enerate (g)alleries