image_paradise 0.1.12
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.
Potentially problematic release.
This version of image_paradise might be problematic. Click here for more details.
- checksums.yaml +7 -0
- data/LICENSE.md +38 -0
- data/README.md +179 -0
- data/USAGE.md +10 -0
- data/bin/black_white +10 -0
- data/bin/display_text_from_this_image +7 -0
- data/bin/image_paradise +7 -0
- data/bin/image_paradise_shell +7 -0
- data/bin/image_to_ascii +54 -0
- data/bin/image_to_pdf +7 -0
- data/bin/make_this_image_transparent +7 -0
- data/bin/rotate_left +7 -0
- data/bin/rotate_right +7 -0
- data/doc/README.gen +162 -0
- data/doc/TODO_FOR_THE_GTK_GUI.md +1 -0
- data/image_paradise.gemspec +50 -0
- data/lib/image_paradise.rb +5 -0
- data/lib/image_paradise/base/base.rb +91 -0
- data/lib/image_paradise/black_white.rb +89 -0
- data/lib/image_paradise/confree_generator/class.rb +614 -0
- data/lib/image_paradise/confree_generator/constants.rb +61 -0
- data/lib/image_paradise/confree_generator/gui/gtk_confree_generator.rb +752 -0
- data/lib/image_paradise/confree_generator/gui/insert_button.rb +78 -0
- data/lib/image_paradise/confree_generator/reset.rb +61 -0
- data/lib/image_paradise/confree_generator/shared/shared.rb +100 -0
- data/lib/image_paradise/constants.rb +43 -0
- data/lib/image_paradise/constants/image_file_types.rb +21 -0
- data/lib/image_paradise/create_animated_gif.rb +47 -0
- data/lib/image_paradise/crop/crop.rb +302 -0
- data/lib/image_paradise/gm_support.rb +34 -0
- data/lib/image_paradise/graphs.rb +36 -0
- data/lib/image_paradise/graphs/accumulator_bar.rb +29 -0
- data/lib/image_paradise/graphs/area.rb +64 -0
- data/lib/image_paradise/graphs/bar.rb +117 -0
- data/lib/image_paradise/graphs/bar_conversion.rb +53 -0
- data/lib/image_paradise/graphs/base.rb +1392 -0
- data/lib/image_paradise/graphs/bezier.rb +45 -0
- data/lib/image_paradise/graphs/bullet.rb +115 -0
- data/lib/image_paradise/graphs/deprecated.rb +42 -0
- data/lib/image_paradise/graphs/dot.rb +129 -0
- data/lib/image_paradise/graphs/line.rb +328 -0
- data/lib/image_paradise/graphs/mini/bar.rb +42 -0
- data/lib/image_paradise/graphs/mini/legend.rb +109 -0
- data/lib/image_paradise/graphs/mini/pie.rb +42 -0
- data/lib/image_paradise/graphs/mini/side_bar.rb +41 -0
- data/lib/image_paradise/graphs/net.rb +133 -0
- data/lib/image_paradise/graphs/photo_bar.rb +106 -0
- data/lib/image_paradise/graphs/pie.rb +139 -0
- data/lib/image_paradise/graphs/scatter.rb +264 -0
- data/lib/image_paradise/graphs/scene.rb +216 -0
- data/lib/image_paradise/graphs/side_bar.rb +144 -0
- data/lib/image_paradise/graphs/side_stacked_bar.rb +116 -0
- data/lib/image_paradise/graphs/spider.rb +163 -0
- data/lib/image_paradise/graphs/stacked_area.rb +73 -0
- data/lib/image_paradise/graphs/stacked_bar.rb +68 -0
- data/lib/image_paradise/graphs/stacked_mixin.rb +30 -0
- data/lib/image_paradise/graphs/themes.rb +117 -0
- data/lib/image_paradise/graphviz/README.md +2 -0
- data/lib/image_paradise/graphviz/generate_graphviz_image.rb +274 -0
- data/lib/image_paradise/gui/gtk/control_panel.rb +126 -0
- data/lib/image_paradise/identify.rb +145 -0
- data/lib/image_paradise/image_border.rb +231 -0
- data/lib/image_paradise/image_manipulations.rb +320 -0
- data/lib/image_paradise/image_paradise.rb +150 -0
- data/lib/image_paradise/image_to_ascii/image_to_ascii.rb +187 -0
- data/lib/image_paradise/image_to_pdf/image_to_pdf.rb +99 -0
- data/lib/image_paradise/label/README.md +2 -0
- data/lib/image_paradise/label/simple_label.rb +206 -0
- data/lib/image_paradise/optimizer.rb +483 -0
- data/lib/image_paradise/project/project.rb +29 -0
- data/lib/image_paradise/random_text_to_image.rb +363 -0
- data/lib/image_paradise/requires/common_base_requires.rb +17 -0
- data/lib/image_paradise/requires/require_colours.rb +9 -0
- data/lib/image_paradise/requires/require_gtk_components.rb +8 -0
- data/lib/image_paradise/requires/require_image_to_ascii.rb +7 -0
- data/lib/image_paradise/requires/require_the_image_paradise_project.rb +24 -0
- data/lib/image_paradise/requires/require_toplevel_methods.rb +21 -0
- data/lib/image_paradise/rotate/README.md +2 -0
- data/lib/image_paradise/rotate/rotate.rb +98 -0
- data/lib/image_paradise/shell/interactive.rb +156 -0
- data/lib/image_paradise/svg/README.md +5 -0
- data/lib/image_paradise/svg/circle.rb +106 -0
- data/lib/image_paradise/svg/feature.rb +48 -0
- data/lib/image_paradise/svg/rectangle.rb +154 -0
- data/lib/image_paradise/svg/svg.rb +102 -0
- data/lib/image_paradise/to_gif.rb +91 -0
- data/lib/image_paradise/to_jpg.rb +90 -0
- data/lib/image_paradise/toplevel_methods/add_black_border_to_this_image.rb +56 -0
- data/lib/image_paradise/toplevel_methods/crop.rb +28 -0
- data/lib/image_paradise/toplevel_methods/e.rb +16 -0
- data/lib/image_paradise/toplevel_methods/esystem.rb +19 -0
- data/lib/image_paradise/toplevel_methods/extract_text_from_this_image.rb +56 -0
- data/lib/image_paradise/toplevel_methods/file_related_code.rb +25 -0
- data/lib/image_paradise/toplevel_methods/flip_image_left_right.rb +32 -0
- data/lib/image_paradise/toplevel_methods/greyscale_this_image.rb +59 -0
- data/lib/image_paradise/toplevel_methods/help.rb +30 -0
- data/lib/image_paradise/toplevel_methods/make_this_image_transparent.rb +30 -0
- data/lib/image_paradise/toplevel_methods/menu.rb +92 -0
- data/lib/image_paradise/toplevel_methods/merge_these_images.rb +49 -0
- data/lib/image_paradise/toplevel_methods/mirror_image.rb +28 -0
- data/lib/image_paradise/toplevel_methods/misc.rb +31 -0
- data/lib/image_paradise/toplevel_methods/png_to_svg.rb +34 -0
- data/lib/image_paradise/toplevel_methods/roebe.rb +17 -0
- data/lib/image_paradise/toplevel_methods/to_png.rb +105 -0
- data/lib/image_paradise/toplevel_methods/wallpaper.rb +37 -0
- data/lib/image_paradise/toplevel_methods/write_this_text.rb +76 -0
- data/lib/image_paradise/version/version.rb +19 -0
- data/test/16x16_red_square_image_for_testing.png +0 -0
- data/test/testing_confree_generator.rb +8 -0
- data/test/testing_crop.rb +19 -0
- data/test/testing_image_magick_commands.rb +39 -0
- data/test/testing_image_paradise.rb +49 -0
- data/test/testing_the_svg_component.html +261 -0
- data/test/testing_the_svg_component.rb +106 -0
- metadata +217 -0
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
#!/usr/bin/ruby -w
|
|
2
|
+
# Encoding: UTF-8
|
|
3
|
+
# frozen_string_literal: true
|
|
4
|
+
# =========================================================================== #
|
|
5
|
+
# require 'image_paradise/confree_generator/constants.rb'
|
|
6
|
+
# =========================================================================== #
|
|
7
|
+
require 'image_paradise/base/base.rb'
|
|
8
|
+
|
|
9
|
+
module ImageParadise
|
|
10
|
+
|
|
11
|
+
class ConfreeGenerator < ::ImageParadise::Base # === ImageParadise::ConfreeGenerator
|
|
12
|
+
|
|
13
|
+
# ========================================================================= #
|
|
14
|
+
# === NAMESPACE
|
|
15
|
+
# ========================================================================= #
|
|
16
|
+
NAMESPACE = inspect
|
|
17
|
+
|
|
18
|
+
# ========================================================================= #
|
|
19
|
+
# === ALPHABET
|
|
20
|
+
# ========================================================================= #
|
|
21
|
+
ALPHABET = ('a'..'z').to_a
|
|
22
|
+
|
|
23
|
+
# ========================================================================= #
|
|
24
|
+
# === TRY_TO_OPEN_THE_GENERATED_IMAGE_IN_THE_BROWSER
|
|
25
|
+
# ========================================================================= #
|
|
26
|
+
TRY_TO_OPEN_THE_GENERATED_IMAGE_IN_THE_BROWSER = true
|
|
27
|
+
|
|
28
|
+
# ========================================================================= #
|
|
29
|
+
# === NAME_OF_OUTPUT_FILE
|
|
30
|
+
# ========================================================================= #
|
|
31
|
+
NAME_OF_OUTPUT_FILE = 'output.png'
|
|
32
|
+
|
|
33
|
+
# ========================================================================= #
|
|
34
|
+
# === CREATE_HTML_GALLERY
|
|
35
|
+
# ========================================================================= #
|
|
36
|
+
CREATE_HTML_GALLERY = false
|
|
37
|
+
|
|
38
|
+
# ========================================================================= #
|
|
39
|
+
# === GENERATE_THE_IMAGE
|
|
40
|
+
#
|
|
41
|
+
# If this constant is false, then we will NOT generate any images.
|
|
42
|
+
#
|
|
43
|
+
# But we will auto-generate the html parts still.
|
|
44
|
+
# ========================================================================= #
|
|
45
|
+
GENERATE_THE_IMAGE = true
|
|
46
|
+
|
|
47
|
+
# ========================================================================= #
|
|
48
|
+
# === OPTIMIZE_PNG_FILES
|
|
49
|
+
#
|
|
50
|
+
# If this constant is set to true, then we will try to run
|
|
51
|
+
# "pngquant" on the generated .png file.
|
|
52
|
+
# ========================================================================= #
|
|
53
|
+
OPTIMIZE_PNG_FILES = true
|
|
54
|
+
|
|
55
|
+
# ========================================================================= #
|
|
56
|
+
# === HARDCODED_PATH_TO_THE_CFDG_IMAGES_DIRECTORY
|
|
57
|
+
# ========================================================================= #
|
|
58
|
+
HARDCODED_PATH_TO_THE_CFDG_IMAGES_DIRECTORY =
|
|
59
|
+
'/home/x/DATA/images/cfdg/'
|
|
60
|
+
|
|
61
|
+
end; end
|
|
@@ -0,0 +1,752 @@
|
|
|
1
|
+
#!/usr/bin/ruby -w
|
|
2
|
+
# Encoding: UTF-8
|
|
3
|
+
# frozen_string_literal: true
|
|
4
|
+
# =========================================================================== #
|
|
5
|
+
# === GtkConfreeGenerator
|
|
6
|
+
#
|
|
7
|
+
# This is my gtk2 Wrapper for Confree-Generator (cfdg).
|
|
8
|
+
# =========================================================================== #
|
|
9
|
+
# rconfree
|
|
10
|
+
# bl $RSRC/confree_generator/lib/confree_generator/gui/gtk_confree_generator.rb
|
|
11
|
+
# =========================================================================== #
|
|
12
|
+
require 'image_paradise/requires/require_colours.rb'
|
|
13
|
+
begin
|
|
14
|
+
require 'gtk_module'
|
|
15
|
+
rescue LoadError; end
|
|
16
|
+
begin
|
|
17
|
+
require 'open_in_browser'
|
|
18
|
+
rescue LoadError; end
|
|
19
|
+
require 'image_paradise/confree_generator/shared/shared.rb'
|
|
20
|
+
require 'image_paradise/confree_generator/gui/insert_button.rb'
|
|
21
|
+
require 'image_paradise/confree_generator/class.rb'
|
|
22
|
+
begin
|
|
23
|
+
require 'x/tools/imageshack.rb' # bl $RUBY_TOOLS/imageshack.rb
|
|
24
|
+
rescue LoadError; end
|
|
25
|
+
begin
|
|
26
|
+
require 'gtksourceview2'
|
|
27
|
+
rescue Exception => error
|
|
28
|
+
p error
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
module ImageParadise
|
|
32
|
+
|
|
33
|
+
class ConfreeGenerator < ::ImageParadise::Base
|
|
34
|
+
|
|
35
|
+
class GtkConfreeGenerator < ::Gtk::VBox # === ImageParadise::ConfreeGenerator::GtkConfreeGenerator.new
|
|
36
|
+
|
|
37
|
+
include Colours
|
|
38
|
+
include ::ImageParadise::ConfreeGenerator::Shared
|
|
39
|
+
include ::Gtk
|
|
40
|
+
include ::Gtk::Colours
|
|
41
|
+
include Esystem
|
|
42
|
+
|
|
43
|
+
attr_accessor :source_buffer
|
|
44
|
+
|
|
45
|
+
# ========================================================================= #
|
|
46
|
+
# === MAIN_WINDOW_WIDTH
|
|
47
|
+
# ========================================================================= #
|
|
48
|
+
MAIN_WINDOW_WIDTH = 950
|
|
49
|
+
|
|
50
|
+
# ========================================================================= #
|
|
51
|
+
# === MAIN_WINDOW_HEIGHT
|
|
52
|
+
# ========================================================================= #
|
|
53
|
+
MAIN_WINDOW_HEIGHT = 900
|
|
54
|
+
|
|
55
|
+
# ========================================================================= #
|
|
56
|
+
# === TOOLTIP_EDITOR
|
|
57
|
+
# ========================================================================= #
|
|
58
|
+
TOOLTIP_EDITOR = 'Open the file in '+YOUR_FAVOURITE_EDITOR+'.'
|
|
59
|
+
# === TOOLTIP_IMAGESHACK
|
|
60
|
+
TOOLTIP_IMAGESHACK = 'Upload the image to Imageshack.'
|
|
61
|
+
DEFAULT_TEXT_FOR_ENTRY_FILE_NAME = MY_CONFREE_DIR+'output.png'
|
|
62
|
+
IMG = ENV['IMG'].to_s
|
|
63
|
+
|
|
64
|
+
# ========================================================================= #
|
|
65
|
+
# === POSSIBLE_RESOLUTIONS
|
|
66
|
+
# ========================================================================= #
|
|
67
|
+
POSSIBLE_RESOLUTIONS = [
|
|
68
|
+
"#{DEFAULT_WIDTH}x#{DEFAULT_HEIGHT}",
|
|
69
|
+
'600x300', '600x400', '640x480',
|
|
70
|
+
'640x640', '800x300', '800x800',
|
|
71
|
+
'900x400', '1000x1000', '1024x800',
|
|
72
|
+
'1200x860', '1280x1024', '1600x1600',
|
|
73
|
+
'2400x2400'
|
|
74
|
+
]
|
|
75
|
+
|
|
76
|
+
# ========================================================================= #
|
|
77
|
+
# === initialize
|
|
78
|
+
# ========================================================================= #
|
|
79
|
+
def initialize(
|
|
80
|
+
i = nil,
|
|
81
|
+
run_already = true
|
|
82
|
+
)
|
|
83
|
+
super()
|
|
84
|
+
reset
|
|
85
|
+
set_file_location(i)
|
|
86
|
+
run if run_already
|
|
87
|
+
end
|
|
88
|
+
|
|
89
|
+
# ========================================================================= #
|
|
90
|
+
# === reset (reset tag)
|
|
91
|
+
# ========================================================================= #
|
|
92
|
+
def reset
|
|
93
|
+
@confree_generator = ConfreeGenerator.new(:batch, false)
|
|
94
|
+
@last_selected_file = '' # this will contain the last selected file.
|
|
95
|
+
@source_buffer = nil
|
|
96
|
+
end
|
|
97
|
+
|
|
98
|
+
# ========================================================================= #
|
|
99
|
+
# === set_file_location
|
|
100
|
+
#
|
|
101
|
+
# We will load this cfdg file.
|
|
102
|
+
# ========================================================================= #
|
|
103
|
+
def set_file_location(i = nil)
|
|
104
|
+
# Now, set a default, either if you passed no arg, or 'default':
|
|
105
|
+
if i.nil? or i == 'default' # default is also allowed
|
|
106
|
+
i = get_random_cfdg
|
|
107
|
+
end
|
|
108
|
+
i = i.to_s.dup
|
|
109
|
+
@file_location = i
|
|
110
|
+
opn; e 'The cfdg file was found at: '+sfile(i)+'.'
|
|
111
|
+
@cfdg_file_content = File.readlines(i) # Bundled.
|
|
112
|
+
end; alias set_input set_file_location # === set_input
|
|
113
|
+
|
|
114
|
+
# ========================================================================= #
|
|
115
|
+
# === open_random_file
|
|
116
|
+
#
|
|
117
|
+
# Open a random cfdg file here. This method will then invoke the
|
|
118
|
+
# method open_this_file().
|
|
119
|
+
# ========================================================================= #
|
|
120
|
+
def open_random_file
|
|
121
|
+
random_file = get_random_cfdg_file
|
|
122
|
+
e 'Loading this `'+sfile(random_file)+'` random file now.'
|
|
123
|
+
open_this_file(random_file)
|
|
124
|
+
end
|
|
125
|
+
|
|
126
|
+
# ========================================================================= #
|
|
127
|
+
# === open_this_file (open tag)
|
|
128
|
+
#
|
|
129
|
+
# Use this method if you want to open a .cfdg file. It will set all
|
|
130
|
+
# necessary stuff.
|
|
131
|
+
# ========================================================================= #
|
|
132
|
+
def open_this_file(i)
|
|
133
|
+
@last_selected_file = i
|
|
134
|
+
string = File.read(@last_selected_file)
|
|
135
|
+
_ = File.basename(@file_location)
|
|
136
|
+
set_source_buffer(string) # we set source buffer
|
|
137
|
+
@entry_filename.set_text(@last_selected_file)
|
|
138
|
+
@file_location = @last_selected_file
|
|
139
|
+
@label_file_name_top.set_text(_)
|
|
140
|
+
@label_top.set_text(_)
|
|
141
|
+
@entry_cfdg_file.set_text(@file_location)
|
|
142
|
+
update_image # as of 16.01.2008 this is also coupled with updating the image.
|
|
143
|
+
end
|
|
144
|
+
|
|
145
|
+
# ========================================================================= #
|
|
146
|
+
# === startup_application
|
|
147
|
+
#
|
|
148
|
+
# Runs all stuff
|
|
149
|
+
# ========================================================================= #
|
|
150
|
+
def startup_application
|
|
151
|
+
create_callbacks
|
|
152
|
+
create_confree_textedit
|
|
153
|
+
create_buttons
|
|
154
|
+
create_gtk_menubar
|
|
155
|
+
create_vboxes
|
|
156
|
+
set_main_image
|
|
157
|
+
create_gtk_entries_and_checkbox_and_combobox
|
|
158
|
+
create_table
|
|
159
|
+
open_this_file(@file_location)
|
|
160
|
+
connect_skeleton
|
|
161
|
+
run_main
|
|
162
|
+
end; alias run startup_application # === run
|
|
163
|
+
|
|
164
|
+
# ========================================================================= #
|
|
165
|
+
# === open_firefox_tab
|
|
166
|
+
#
|
|
167
|
+
# Simply opens a firefox tab.
|
|
168
|
+
# ========================================================================= #
|
|
169
|
+
def open_firefox_tab(
|
|
170
|
+
i = DEFAULT_TEXT_FOR_ENTRY_FILE_NAME
|
|
171
|
+
)
|
|
172
|
+
e "Opening picture #{sfile(i)}"
|
|
173
|
+
open_in_browser(i)
|
|
174
|
+
end
|
|
175
|
+
|
|
176
|
+
# ========================================================================= #
|
|
177
|
+
# === ui_manager?
|
|
178
|
+
# ========================================================================= #
|
|
179
|
+
def ui_manager?
|
|
180
|
+
@ui_manager
|
|
181
|
+
end; alias ui_manager ui_manager? # === ui_manager
|
|
182
|
+
|
|
183
|
+
# ========================================================================= #
|
|
184
|
+
# === update_image
|
|
185
|
+
#
|
|
186
|
+
# The image will be created via this method invocation.
|
|
187
|
+
# ========================================================================= #
|
|
188
|
+
def update_image
|
|
189
|
+
if program_exists? 'cfdg'
|
|
190
|
+
e "Updating @main_image now: #{sfancy(@main_image)}."
|
|
191
|
+
e "Saving file: #{@confree_generator.save_file}"
|
|
192
|
+
save_file(@source_buffer.text, @confree_generator.save_file)
|
|
193
|
+
@confree_generator.run_sys_cmd(@entry_width.text, @entry_height.text)
|
|
194
|
+
@main_image.clear
|
|
195
|
+
@main_image.set(DEFAULT_TEXT_FOR_ENTRY_FILE_NAME)
|
|
196
|
+
else
|
|
197
|
+
ewarn 'Sorry, the program `cfdg` could not be found. Did you install it?'
|
|
198
|
+
end
|
|
199
|
+
end
|
|
200
|
+
|
|
201
|
+
# ========================================================================= #
|
|
202
|
+
# === set_main_image
|
|
203
|
+
#
|
|
204
|
+
# zeigt unser image an, unser @main_image. Das ist rechter Hand zu finden.
|
|
205
|
+
# ========================================================================= #
|
|
206
|
+
def set_main_image
|
|
207
|
+
@main_image = Gtk::Image.new(
|
|
208
|
+
DEFAULT_TEXT_FOR_ENTRY_FILE_NAME
|
|
209
|
+
)
|
|
210
|
+
@image_event_box = Gtk::EventBox.new
|
|
211
|
+
@scrolled_window = Gtk::ScrolledWindow.new
|
|
212
|
+
@scrolled_window.add_with_viewport(@main_image)
|
|
213
|
+
@scrolled_window.set_size_request(280,280)
|
|
214
|
+
@image_event_box.add(@scrolled_window)
|
|
215
|
+
@image_event_box.signal_connect(:button_press_event) { |widget, event|
|
|
216
|
+
case event.button
|
|
217
|
+
when 1
|
|
218
|
+
@callback_open_file.call
|
|
219
|
+
when 2
|
|
220
|
+
open_random_file # just assign a random file on middle-click
|
|
221
|
+
else
|
|
222
|
+
@callback_open_file.call
|
|
223
|
+
end
|
|
224
|
+
}
|
|
225
|
+
end
|
|
226
|
+
|
|
227
|
+
# ========================================================================= #
|
|
228
|
+
# === create_gtk_entries_and_checkbox_and_combobox
|
|
229
|
+
#
|
|
230
|
+
# Hier legt man width und height des images fest
|
|
231
|
+
# entries. Zudem wird der Gtk::CheckButton definiert.
|
|
232
|
+
# ========================================================================= #
|
|
233
|
+
def create_gtk_entries_and_checkbox_and_combobox
|
|
234
|
+
# Der check button
|
|
235
|
+
@button_check_coupled = Gtk::CheckButton.new('Coupled')
|
|
236
|
+
@button_check_coupled.set_active(false)
|
|
237
|
+
@combo_box_entry = Gtk::ComboBoxEntry.new(true)
|
|
238
|
+
ARRAY_POSSIBLE_RESOLUTIONS.each { |val| @combo_box_entry.append_text(val) }
|
|
239
|
+
@combo_box_entry.active = 0
|
|
240
|
+
# Popup on button release
|
|
241
|
+
@combo_box_entry.signal_connect(:event) { |widget, event|
|
|
242
|
+
case event.event_type # event.event_type.name
|
|
243
|
+
when Gdk::Event::BUTTON_RELEASE
|
|
244
|
+
Thread.new { @combo_box_entry.popup }
|
|
245
|
+
end
|
|
246
|
+
}
|
|
247
|
+
# If combo box was changed, do sth
|
|
248
|
+
@combo_box_entry.signal_connect(:changed) {
|
|
249
|
+
if @combo_box_entry.active_iter
|
|
250
|
+
combined = @combo_box_entry.active_iter[0]
|
|
251
|
+
wid,hei = combined.split('x')
|
|
252
|
+
@entry_width.text = wid
|
|
253
|
+
@entry_height.text = hei
|
|
254
|
+
# also, force a decoupling again
|
|
255
|
+
@button_check_coupled.active = false
|
|
256
|
+
end
|
|
257
|
+
}
|
|
258
|
+
# Is on the top
|
|
259
|
+
@entry_width = Gtk::Entry.new
|
|
260
|
+
@entry_width.set_max_length( 7 )
|
|
261
|
+
@entry_width.signal_connect(:activate) { |w| enter_callback( w ) }
|
|
262
|
+
@entry_width.set_text( DEFAULT_WIDTH ) # DEFAULT_WIDTH is in togtk;bl CFDG/confree_shared_data.rb
|
|
263
|
+
@entry_width.signal_connect(:changed) { |w, event|
|
|
264
|
+
@entry_height.text = @entry_width.text if @button_check_coupled.active?
|
|
265
|
+
}
|
|
266
|
+
# The middle entry.
|
|
267
|
+
@entry_height = Gtk::Entry.new
|
|
268
|
+
@entry_height.set_max_length( 7 )
|
|
269
|
+
@entry_height.signal_connect(:activate) { |w| enter_callback( w ) }
|
|
270
|
+
@entry_height.set_text( DEFAULT_HEIGHT )
|
|
271
|
+
@entry_height.signal_connect(:changed) { |w,event|
|
|
272
|
+
if @button_check_coupled.active?
|
|
273
|
+
@entry_width.text = @entry_height.text
|
|
274
|
+
end
|
|
275
|
+
}
|
|
276
|
+
# entry file name contains the name of our programs
|
|
277
|
+
@entry_filename = Gtk::Entry.new
|
|
278
|
+
@entry_filename.set_max_length( 20 )
|
|
279
|
+
@entry_filename.signal_connect(:activate) { |w| enter_callback( w ) }
|
|
280
|
+
@entry_filename.set_text( @last_selected_file )
|
|
281
|
+
# This entry contains the output.png file name.
|
|
282
|
+
@entry_file_name = Gtk::Entry.new
|
|
283
|
+
|
|
284
|
+
@entry_file_name.set_text(DEFAULT_TEXT_FOR_ENTRY_FILE_NAME)
|
|
285
|
+
@entry_file_name.signal_connect(:button_press_event) do |widget, event|
|
|
286
|
+
@entry_file_name.set_focus( true )
|
|
287
|
+
@entry_file_name.select_region(0, -1)
|
|
288
|
+
end
|
|
289
|
+
|
|
290
|
+
@entry_cfdg_file = Gtk::Entry.new
|
|
291
|
+
@entry_cfdg_file.set_text('')
|
|
292
|
+
@vbox_entries_and_checkbox = Gtk::VBox.new
|
|
293
|
+
vbox = Gtk::VBox.new
|
|
294
|
+
vbox.pack_start(@entry_width,true,true,0)
|
|
295
|
+
vbox.pack_start(@entry_height,true,true,0)
|
|
296
|
+
|
|
297
|
+
image = Gtk::Image.new
|
|
298
|
+
image.set(:'gtk-preferences', Gtk::IconSize::MENU)
|
|
299
|
+
|
|
300
|
+
@event_box_for_small_icon = Gtk::EventBox.new.add(image)
|
|
301
|
+
@event_box_for_small_icon.signal_connect(:event) { |widget, event|
|
|
302
|
+
case event.event_type
|
|
303
|
+
when Gdk::Event::BUTTON_PRESS
|
|
304
|
+
@button_check_coupled.set_active(true)
|
|
305
|
+
end
|
|
306
|
+
}
|
|
307
|
+
|
|
308
|
+
hbox_with_checkbox_and_combo_box = Gtk::HBox.new
|
|
309
|
+
hbox_with_checkbox_and_combo_box.pack_start(vbox,true,true,0)
|
|
310
|
+
hbox_with_checkbox_and_combo_box.pack_start(@combo_box_entry,false,true,0)
|
|
311
|
+
hbox_with_checkbox_and_combo_box.pack_start(
|
|
312
|
+
create_paned_hbox( @button_check_coupled, @event_box_for_small_icon),true,true,0
|
|
313
|
+
)
|
|
314
|
+
@vbox_entries_and_checkbox.pack_start(hbox_with_checkbox_and_combo_box)
|
|
315
|
+
@vbox_entries_and_checkbox.pack_start(@entry_filename,true,true)
|
|
316
|
+
end
|
|
317
|
+
|
|
318
|
+
# ========================================================================= #
|
|
319
|
+
# === create_buttons (button tag butt tag but tag)
|
|
320
|
+
#
|
|
321
|
+
# will make our buttons. All buttons. If the update button
|
|
322
|
+
# is pressed, it will store a temporary file.
|
|
323
|
+
# ========================================================================= #
|
|
324
|
+
def create_buttons
|
|
325
|
+
@button_clear = Gtk::Button.new('_Clear')
|
|
326
|
+
@button_clear.signal_connect(:clicked) { clear_buffer }
|
|
327
|
+
@button_clear.set_image(Gtk::Image.new(Gtk::Stock::OK,
|
|
328
|
+
Gtk::IconSize::SMALL_TOOLBAR))
|
|
329
|
+
|
|
330
|
+
# exit tag, quit tag
|
|
331
|
+
@button_quit = Gtk::Button.new(Gtk::Stock::QUIT)
|
|
332
|
+
@button_quit.signal_connect(:clicked) { @callback_quit_application.call }
|
|
333
|
+
|
|
334
|
+
@button_debug = Gtk::Button.new('_Debug')
|
|
335
|
+
@button_debug.set_image Gtk::Image.new(Gtk::Stock::INFO,
|
|
336
|
+
Gtk::IconSize::SMALL_TOOLBAR)
|
|
337
|
+
@button_debug.signal_connect(:clicked) { e @source_buffer.text }
|
|
338
|
+
|
|
339
|
+
@button_open_random_file = Gtk::Button.new('_OpenRandomFile')
|
|
340
|
+
@button_open_random_file.set_image Gtk::Image.new(Gtk::Stock::INFO,
|
|
341
|
+
Gtk::IconSize::SMALL_TOOLBAR)
|
|
342
|
+
@button_open_random_file.signal_connect(:clicked) { open_random_file }
|
|
343
|
+
|
|
344
|
+
@button_update = Gtk::Button.new('_Update (Create Image)')
|
|
345
|
+
@button_update.relief = Gtk::RELIEF_HALF
|
|
346
|
+
@button_update.set_image(Gtk::Image.new(Gtk::Stock::REFRESH,
|
|
347
|
+
Gtk::IconSize::SMALL_TOOLBAR))
|
|
348
|
+
@button_update.signal_connect(:clicked) { update_image }
|
|
349
|
+
[
|
|
350
|
+
@button_clear,
|
|
351
|
+
@button_quit,
|
|
352
|
+
@button_debug,
|
|
353
|
+
@button_open_random_file,
|
|
354
|
+
@button_update
|
|
355
|
+
].each { |button| button_modify_bg(button) }
|
|
356
|
+
end
|
|
357
|
+
|
|
358
|
+
# ========================================================================= #
|
|
359
|
+
# === create_batch_gallery
|
|
360
|
+
# ========================================================================= #
|
|
361
|
+
def create_batch_gallery
|
|
362
|
+
@confree_generator.run
|
|
363
|
+
end
|
|
364
|
+
|
|
365
|
+
# ========================================================================= #
|
|
366
|
+
# === width
|
|
367
|
+
# ========================================================================= #
|
|
368
|
+
def width
|
|
369
|
+
MAIN_WINDOW_WIDTH
|
|
370
|
+
end
|
|
371
|
+
|
|
372
|
+
# ========================================================================= #
|
|
373
|
+
# === height
|
|
374
|
+
# ========================================================================= #
|
|
375
|
+
def height
|
|
376
|
+
MAIN_WINDOW_HEIGHT
|
|
377
|
+
end
|
|
378
|
+
|
|
379
|
+
# ========================================================================= #
|
|
380
|
+
# === run_main
|
|
381
|
+
#
|
|
382
|
+
# also shows main window
|
|
383
|
+
# ========================================================================= #
|
|
384
|
+
def run_main
|
|
385
|
+
self.show_all
|
|
386
|
+
end
|
|
387
|
+
|
|
388
|
+
# ========================================================================= #
|
|
389
|
+
# === program_exists?
|
|
390
|
+
#
|
|
391
|
+
# Find out whether a program exists or not.
|
|
392
|
+
# ========================================================================= #
|
|
393
|
+
def program_exists?(this_program)
|
|
394
|
+
does_program_exist = false # default is false
|
|
395
|
+
array_available_paths = [ ENV['SYSBIN'].to_s, '/usr/bin/']
|
|
396
|
+
array_available_paths.each { |path|
|
|
397
|
+
_ = path+'/'+this_program
|
|
398
|
+
does_program_exist = true if File.exist? _
|
|
399
|
+
}
|
|
400
|
+
return does_program_exist
|
|
401
|
+
end
|
|
402
|
+
|
|
403
|
+
# ========================================================================= #
|
|
404
|
+
# === create_confree_textedit
|
|
405
|
+
#
|
|
406
|
+
# Entry so that the context free design can be added here.
|
|
407
|
+
# ========================================================================= #
|
|
408
|
+
def create_confree_textedit
|
|
409
|
+
@source_buffer = Gtk::SourceBuffer.new
|
|
410
|
+
@text_field = Gtk::SourceView.new(@source_buffer)
|
|
411
|
+
@text_field.show_line_numbers = true
|
|
412
|
+
# @text_field.show_line_markers = true
|
|
413
|
+
# @text_field.smart_home_end = true
|
|
414
|
+
# @text_field.tabs_width = 2
|
|
415
|
+
@scw = Gtk::ScrolledWindow.new
|
|
416
|
+
@scw.add_with_viewport(@text_field)
|
|
417
|
+
end
|
|
418
|
+
|
|
419
|
+
# ========================================================================= #
|
|
420
|
+
# === upload_image_to_imageshack
|
|
421
|
+
#
|
|
422
|
+
# Upload image to imageshack
|
|
423
|
+
# ========================================================================= #
|
|
424
|
+
def upload_image_to_imageshack
|
|
425
|
+
RImageshack.new(@file_location)
|
|
426
|
+
end
|
|
427
|
+
|
|
428
|
+
# ========================================================================= #
|
|
429
|
+
# === create_table (table tag, tab tag. main table.)
|
|
430
|
+
#
|
|
431
|
+
# Creates the tables.
|
|
432
|
+
# ========================================================================= #
|
|
433
|
+
def create_table
|
|
434
|
+
@top_table = Gtk::Table.new(1, 2, true)
|
|
435
|
+
@top_table.row_spacings = 1
|
|
436
|
+
@top_table.attach_defaults( @scw, 0,1, 0, 1)
|
|
437
|
+
|
|
438
|
+
@label_file_name_top = Gtk::Label.new
|
|
439
|
+
@label_file_name_top.set_text(File.basename(@file_location))
|
|
440
|
+
|
|
441
|
+
@label_top = Gtk::Label.new
|
|
442
|
+
@label_top.set_justify(Gtk::JUSTIFY_LEFT)
|
|
443
|
+
@label_top.set_text(File.basename(@file_location))
|
|
444
|
+
|
|
445
|
+
vbox_top = VBox.new
|
|
446
|
+
vbox_top.pack_start(@vbox_for_actions,true,true)
|
|
447
|
+
vbox_top.pack_start(@label_file_name_top,false,true)
|
|
448
|
+
hbox = create_paned_hbox(vbox_top, @image_event_box)
|
|
449
|
+
@top_table.attach_defaults(hbox, 1,2,0,1)
|
|
450
|
+
|
|
451
|
+
@main_table = Gtk::Table.new(4, 2, true)
|
|
452
|
+
@main_table.row_spacings = 0
|
|
453
|
+
@main_table.attach_defaults( @button_clear, 0,1, 0, 1)
|
|
454
|
+
|
|
455
|
+
hbox = HBox.new
|
|
456
|
+
hbox.add @button_debug
|
|
457
|
+
hbox.add @button_open_random_file
|
|
458
|
+
@main_table.attach_defaults( hbox, 0,1, 1, 2)
|
|
459
|
+
@main_table.attach_defaults( @button_quit, 0,1, 2, 3)
|
|
460
|
+
@main_table.attach_defaults( @button_update, 1,2, 0, 1)
|
|
461
|
+
@main_table.attach_defaults( @vbox_entries_and_checkbox,1,2, 1,2)
|
|
462
|
+
|
|
463
|
+
@event_box_for_firefox = Gtk::EventBox.new
|
|
464
|
+
firefox_image = Gtk::Image.new(IMG+'/FF/FIREFOX_FAVICON.png')
|
|
465
|
+
@event_box_for_firefox.add(firefox_image)
|
|
466
|
+
@event_box_for_firefox.signal_connect(:button_press_event) { open_firefox_tab }
|
|
467
|
+
hover_message = 'Opens a firefox tab.'
|
|
468
|
+
Gtk::Tooltips.new.set_tip(firefox_image, hover_message, nil)
|
|
469
|
+
|
|
470
|
+
label = modify_bold_label('ImagePath ' ,'darkblue',:left)
|
|
471
|
+
event_box_image_path = Gtk::EventBox.new.add(label)
|
|
472
|
+
event_box_image_path.signal_connect(:button_press_event) {
|
|
473
|
+
@entry_file_name.select_region(0, -1)
|
|
474
|
+
@entry_file_name.set_focus(true)
|
|
475
|
+
e 'Restoring to default '+DEFAULT_TEXT_FOR_ENTRY_FILE_NAME
|
|
476
|
+
@entry_file_name.set_text(DEFAULT_TEXT_FOR_ENTRY_FILE_NAME) # restore to default again.
|
|
477
|
+
}
|
|
478
|
+
|
|
479
|
+
hbox_tiny = create_paned_hbox(
|
|
480
|
+
event_box_image_path,
|
|
481
|
+
@event_box_for_firefox
|
|
482
|
+
)
|
|
483
|
+
|
|
484
|
+
image_bluefish = Gtk::Image.new
|
|
485
|
+
image_bluefish.set( Gdk::Pixbuf.new(
|
|
486
|
+
IMG+'/PC/EDITORS/BLUEFISH/BLUEFISH.png', 25,25 )
|
|
487
|
+
)
|
|
488
|
+
event_box = Gtk::EventBox.new
|
|
489
|
+
event_box.add(image_bluefish)
|
|
490
|
+
|
|
491
|
+
Gtk::Tooltips.new.set_tip(event_box, TOOLTIP_EDITOR, nil)
|
|
492
|
+
event_box.signal_connect(:event) { |widget, event|
|
|
493
|
+
case event.event_type # event.event_type.name
|
|
494
|
+
when Gdk::Event::BUTTON_PRESS
|
|
495
|
+
open_file_in_editor
|
|
496
|
+
end
|
|
497
|
+
}
|
|
498
|
+
_ = IMG+'/PC/IMAGESHACK/IMAGESHACK_FAVICON.png' # cd $IMG/PC/IMAGESHACK/IMAGESHACK_FAVICON.png
|
|
499
|
+
if File.exist? _
|
|
500
|
+
image_rshack = Gtk::Image.new
|
|
501
|
+
pixbuf = Gdk::Pixbuf.new(_, 25, 25)
|
|
502
|
+
image_rshack.set(pixbuf)
|
|
503
|
+
event_box_with_imageshack = Gtk::EventBox.new
|
|
504
|
+
event_box_with_imageshack.add(image_rshack)
|
|
505
|
+
Gtk::Tooltips.new.set_tip(event_box_with_imageshack, TOOLTIP_IMAGESHACK, nil)
|
|
506
|
+
event_box_with_imageshack.signal_connect(:event) { |widget, event|
|
|
507
|
+
case event.event_type
|
|
508
|
+
when Gdk::Event::BUTTON_PRESS then upload_image_to_imageshack
|
|
509
|
+
end
|
|
510
|
+
}
|
|
511
|
+
vbox = create_paned_vbox(
|
|
512
|
+
hbox_tiny, @entry_file_name,
|
|
513
|
+
create_paned_hbox(@entry_cfdg_file, event_box, event_box_with_imageshack)
|
|
514
|
+
)
|
|
515
|
+
# Hier der label zum Pfad
|
|
516
|
+
@main_table.attach_defaults(vbox,1,2,2,3)
|
|
517
|
+
end
|
|
518
|
+
end
|
|
519
|
+
|
|
520
|
+
# ========================================================================= #
|
|
521
|
+
# === create_gtk_menubar (menu tag)
|
|
522
|
+
#
|
|
523
|
+
# Makes the menu bar.
|
|
524
|
+
# ========================================================================= #
|
|
525
|
+
def create_gtk_menubar
|
|
526
|
+
|
|
527
|
+
@menu_ui_design = %Q[
|
|
528
|
+
<ui>
|
|
529
|
+
<menubar name='MenuBar'>
|
|
530
|
+
<menu action='FileMenu'>
|
|
531
|
+
<separator/>
|
|
532
|
+
<menuitem action='Open'/>
|
|
533
|
+
<menuitem action='OpenRandomFile'/>
|
|
534
|
+
<menuitem action='Save'/>
|
|
535
|
+
<menuitem action='New'/>
|
|
536
|
+
<separator/>
|
|
537
|
+
<menuitem action='Quit'/>
|
|
538
|
+
<separator/>
|
|
539
|
+
</menu>
|
|
540
|
+
<menu action='FileMenu2'>
|
|
541
|
+
<separator/>
|
|
542
|
+
<menuitem action='Scramble'/>
|
|
543
|
+
<separator/>
|
|
544
|
+
</menu>
|
|
545
|
+
<menu action='FileMenu3'>
|
|
546
|
+
<separator/>
|
|
547
|
+
<menuitem action='BatchMode'/>
|
|
548
|
+
<separator/>
|
|
549
|
+
</menu>
|
|
550
|
+
</menubar>
|
|
551
|
+
</ui>
|
|
552
|
+
]
|
|
553
|
+
|
|
554
|
+
@menu_actions = [
|
|
555
|
+
[ 'FileMenu', nil, '_File'],
|
|
556
|
+
# der 4. parameter is leider nil, ansonsten nämlich kann
|
|
557
|
+
# man nit mehr ordentlich schreiben
|
|
558
|
+
[ 'Open', Gtk::Stock::OPEN, '_Open File', nil, 'Open', @callback_open_file ],
|
|
559
|
+
[ 'OpenRandomFile', Gtk::Stock::OPEN, 'Open _Random File', '<Control>r', 'OpenRandomFile', @callback_open_random_file ],
|
|
560
|
+
[ 'Save', Gtk::Stock::SAVE, '_Save', nil, 'Save', @callback_save_file ],
|
|
561
|
+
[ 'Quit', Gtk::Stock::QUIT, '_Quit', nil, 'Quit', @callback_quit_application ],
|
|
562
|
+
[ 'New', Gtk::Stock::NEW, '_New', nil, 'Create a new file', @callback_create_new_file ]
|
|
563
|
+
]
|
|
564
|
+
|
|
565
|
+
@action_group = Gtk::ActionGroup.new('Actions')
|
|
566
|
+
@action_group.add_actions( @menu_actions )
|
|
567
|
+
|
|
568
|
+
@menu_actions2 = [
|
|
569
|
+
[ 'FileMenu2', nil, '_Scramble' ],
|
|
570
|
+
# der 4. parameter is leider nil, ansonsten nämlich kann
|
|
571
|
+
# man nit mehr ordentlich schreiben
|
|
572
|
+
[ 'Scramble', Gtk::Stock::NO,
|
|
573
|
+
'_Scramble Large', nil, 'Scramble', @callback_scramble_image ]
|
|
574
|
+
]
|
|
575
|
+
@action_group.add_actions(@menu_actions2)
|
|
576
|
+
@menu_actions3 = [
|
|
577
|
+
[ 'FileMenu3', nil, '_OtherActions' ],
|
|
578
|
+
[ 'BatchMode', Gtk::Stock::REFRESH,'_BatchMode', nil, 'BatchMode allows you to create a gallery
|
|
579
|
+
without questions answered etc...', @callback_create_batch_gallery ]
|
|
580
|
+
]
|
|
581
|
+
@action_group.add_actions(@menu_actions3)
|
|
582
|
+
|
|
583
|
+
@ui_manager = Gtk::UIManager.new
|
|
584
|
+
@ui_manager.insert_action_group(@action_group, 0)
|
|
585
|
+
@ui_manager.add_ui(@menu_ui_design)
|
|
586
|
+
@ui_manager.add_tearoffs = true
|
|
587
|
+
end
|
|
588
|
+
|
|
589
|
+
# ========================================================================= #
|
|
590
|
+
# === open_file_in_editor
|
|
591
|
+
# This method opens the cfdg file in your designated editor.
|
|
592
|
+
# ========================================================================= #
|
|
593
|
+
def open_file_in_editor
|
|
594
|
+
_ = YOUR_FAVOURITE_EDITOR+ ' '+@file_location
|
|
595
|
+
esystem _
|
|
596
|
+
end
|
|
597
|
+
|
|
598
|
+
# ========================================================================= #
|
|
599
|
+
# === create_callbacks
|
|
600
|
+
#
|
|
601
|
+
# Creates the callback objects.
|
|
602
|
+
# ========================================================================= #
|
|
603
|
+
def create_callbacks
|
|
604
|
+
@callback_create_new_file = Proc.new { |actiongroup, action|
|
|
605
|
+
e "`#{action.name}' new file created. "
|
|
606
|
+
}
|
|
607
|
+
@callback_quit_application = Proc.new { Gtk.main_quit }
|
|
608
|
+
@callback_scramble_image = Proc.new { scramble_image }
|
|
609
|
+
@callback_create_batch_gallery = Proc.new { create_batch_gallery }
|
|
610
|
+
@callback_open_random_file = Proc.new { open_random_file }
|
|
611
|
+
@callback_save_file = Proc.new { save_file }
|
|
612
|
+
# ======================================================================= #
|
|
613
|
+
# Here we decide what will happen when we open a new file. (File Dialog)
|
|
614
|
+
# ======================================================================= #
|
|
615
|
+
@callback_open_file = Proc.new { |actiongroup, action|
|
|
616
|
+
@file_chooser_dialog = Gtk::FileChooserDialog.new('Open File',
|
|
617
|
+
nil, Gtk::FileChooser::ACTION_OPEN, nil,
|
|
618
|
+
[ Gtk::Stock::CANCEL, Gtk::Dialog::RESPONSE_CANCEL],
|
|
619
|
+
[ Gtk::Stock::OPEN, Gtk::Dialog::RESPONSE_ACCEPT] )
|
|
620
|
+
# @file_chooser_dialog.show_hidden=true
|
|
621
|
+
@file_chooser_dialog.add_shortcut_folder( ENV['CFDG'] )
|
|
622
|
+
@file_chooser_dialog.add_shortcut_folder( IMG )
|
|
623
|
+
@file_filter = Gtk::FileFilter.new
|
|
624
|
+
@file_filter.name = 'CFDG Filter'
|
|
625
|
+
@file_filter.add_pattern '*.cfdg'
|
|
626
|
+
@file_chooser_dialog.add_filter(@file_filter)
|
|
627
|
+
@file_chooser_dialog.current_folder = CFDG_DIRECTORY
|
|
628
|
+
if @file_chooser_dialog.run == Gtk::Dialog::RESPONSE_ACCEPT
|
|
629
|
+
_ = @file_chooser_dialog.filename
|
|
630
|
+
e " filename = #{_}"
|
|
631
|
+
open_this_file(_)
|
|
632
|
+
end
|
|
633
|
+
@file_chooser_dialog.destroy
|
|
634
|
+
}
|
|
635
|
+
end
|
|
636
|
+
|
|
637
|
+
# ========================================================================= #
|
|
638
|
+
# === scramble_image
|
|
639
|
+
#
|
|
640
|
+
# Scrambles your image
|
|
641
|
+
# ========================================================================= #
|
|
642
|
+
def scramble_image
|
|
643
|
+
_ = @source_buffer.text.dup
|
|
644
|
+
_.gsub!(/260/,'268')
|
|
645
|
+
_.gsub!(/100/,'105')
|
|
646
|
+
_.gsub!(/110/,'115')
|
|
647
|
+
_.gsub!(/#{rand(300)}/,"#{rand(300)}")
|
|
648
|
+
_.gsub!(/#{rand(300)}/,"#{rand(300)}")
|
|
649
|
+
_.gsub!(/#{rand(300)}/,"#{rand(300)}")
|
|
650
|
+
_.gsub!(/#{rand(300)}/,"#{rand(300)}")
|
|
651
|
+
_.gsub!(/#{rand(300)}/,"#{rand(300)}")
|
|
652
|
+
_.gsub!(/#{rand(300)}/,"#{rand(300)}")
|
|
653
|
+
_.gsub!(/#{rand(300)}/,"#{rand(300)}")
|
|
654
|
+
_.gsub!(/#{rand(300)}/,"#{rand(300)}")
|
|
655
|
+
_.gsub!(/90/,(95+rand(60)).to_s)
|
|
656
|
+
_.gsub!(/80/,(85+rand(50)).to_s)
|
|
657
|
+
_.gsub!(/70/,(70+rand(40)).to_s)
|
|
658
|
+
set_source_buffer(_)
|
|
659
|
+
end
|
|
660
|
+
|
|
661
|
+
# ========================================================================= #
|
|
662
|
+
# === create_vboxes
|
|
663
|
+
#
|
|
664
|
+
# This method creates the vbox and the box for our action buttons (filled
|
|
665
|
+
# with InsertButtons.)
|
|
666
|
+
#
|
|
667
|
+
# The InsertButton class can be found in the file insert_button.rb
|
|
668
|
+
# ========================================================================= #
|
|
669
|
+
def create_vboxes
|
|
670
|
+
@v_box = Gtk::VBox.new
|
|
671
|
+
@v_box.show
|
|
672
|
+
@vbox_for_actions = Gtk::VBox.new
|
|
673
|
+
@vbox_for_actions.pack_start InsertButton.new(:comment, self),false,false,0
|
|
674
|
+
@vbox_for_actions.pack_start InsertButton.new(:background, self),false,false,0
|
|
675
|
+
@vbox_for_actions.pack_start InsertButton.new(:square, self),false,false,0
|
|
676
|
+
@vbox_for_actions.pack_start InsertButton.new(:triangle, self),false,false,0
|
|
677
|
+
@vbox_for_actions.pack_start InsertButton.new(:line, self),false,true,0
|
|
678
|
+
@vbox_for_actions.pack_start InsertButton.new(:rect, self),false,true,0
|
|
679
|
+
@vbox_for_actions.pack_start InsertButton.new(:circle, self),false,true,0
|
|
680
|
+
@vbox_for_actions.pack_start InsertButton.new(:hue, self),false,true,0
|
|
681
|
+
@vbox_for_actions.pack_start InsertButton.new(:sat, self),false,true,0
|
|
682
|
+
@vbox_for_actions.pack_start InsertButton.new(:b, self),false,true,0
|
|
683
|
+
@vbox_for_actions.pack_start InsertButton.new(:n, self),false,true,0
|
|
684
|
+
@vbox_for_actions.show
|
|
685
|
+
end
|
|
686
|
+
|
|
687
|
+
# ========================================================================= #
|
|
688
|
+
# === set_source_buffer
|
|
689
|
+
#
|
|
690
|
+
# This simply sets the source buffer.
|
|
691
|
+
# ========================================================================= #
|
|
692
|
+
def set_source_buffer(i = '')
|
|
693
|
+
@source_buffer.text = i
|
|
694
|
+
end
|
|
695
|
+
|
|
696
|
+
# ========================================================================= #
|
|
697
|
+
# === button_modify_bg
|
|
698
|
+
#
|
|
699
|
+
# Modifies a button, i.e. background stuff, mouseover event.
|
|
700
|
+
# ========================================================================= #
|
|
701
|
+
def button_modify_bg(i)
|
|
702
|
+
i.modify_bg( Gtk::StateType::NORMAL, CADETBLUE )
|
|
703
|
+
i.modify_bg( Gtk::StateType::ACTIVE, BROWN )
|
|
704
|
+
i.modify_bg( Gtk::StateType::PRELIGHT, BISQUE )
|
|
705
|
+
end
|
|
706
|
+
|
|
707
|
+
# ========================================================================= #
|
|
708
|
+
# === clear_buffer
|
|
709
|
+
#
|
|
710
|
+
# This method clears the buffer.
|
|
711
|
+
# ========================================================================= #
|
|
712
|
+
def clear_buffer
|
|
713
|
+
@source_buffer.text = ''
|
|
714
|
+
end
|
|
715
|
+
|
|
716
|
+
# ========================================================================= #
|
|
717
|
+
# === connect_skeleton
|
|
718
|
+
#
|
|
719
|
+
# glues the parts together. glue tag.
|
|
720
|
+
# ========================================================================= #
|
|
721
|
+
def connect_skeleton
|
|
722
|
+
@v_box.pack_start( @ui_manager['/MenuBar'], false, false ) # das Menü
|
|
723
|
+
@v_box.pack_start( @label_top, false, false, 0 )
|
|
724
|
+
@v_box.pack_start( @top_table,false )
|
|
725
|
+
@v_box.pack_start( Gtk::HSeparator.new, false, false, 0)
|
|
726
|
+
@v_box.pack_start( @main_table,false ) # mit den buttons, unten.
|
|
727
|
+
add(@v_box)
|
|
728
|
+
end
|
|
729
|
+
|
|
730
|
+
end; end; end
|
|
731
|
+
|
|
732
|
+
if __FILE__ == $PROGRAM_NAME
|
|
733
|
+
confree_generator = ImageParadise::ConfreeGenerator::GtkConfreeGenerator.new(
|
|
734
|
+
ARGV.first
|
|
735
|
+
)
|
|
736
|
+
r = Gtk.run(
|
|
737
|
+
confree_generator.width,
|
|
738
|
+
confree_generator.height,
|
|
739
|
+
'/Users/x/DATA/IMG/ART/NEURONAL_HAND.png',
|
|
740
|
+
'Confree Design',4
|
|
741
|
+
)
|
|
742
|
+
# r.add_accel_group( gtk_confree_generator.ui_manager.accel_group )
|
|
743
|
+
# ^^^ the above does not work.
|
|
744
|
+
r << confree_generator
|
|
745
|
+
r.top_left
|
|
746
|
+
r.run
|
|
747
|
+
end # gtkconfree
|
|
748
|
+
# =========================================================================== #
|
|
749
|
+
# The first is batch mode, the second is GUI mode.
|
|
750
|
+
# rconfree b
|
|
751
|
+
# rconfree
|
|
752
|
+
# =========================================================================== #
|