fidgit 0.2.4 → 0.2.5
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/.gitignore +7 -7
- data/.rspec +2 -2
- data/CHANGELOG.md +30 -30
- data/Gemfile +3 -3
- data/LICENSE.txt +19 -19
- data/README.textile +139 -139
- data/Rakefile +37 -37
- data/config/default_schema.yml +216 -216
- data/examples/_all_examples.rb +9 -9
- data/examples/align_example.rb +55 -55
- data/examples/button_and_toggle_button_example.rb +37 -37
- data/examples/color_picker_example.rb +16 -16
- data/examples/color_well_example.rb +24 -24
- data/examples/combo_box_example.rb +23 -23
- data/examples/file_dialog_example.rb +41 -41
- data/examples/grid_packer_example.rb +28 -28
- data/examples/helpers/example_window.rb +16 -16
- data/examples/label_example.rb +22 -22
- data/examples/list_example.rb +22 -22
- data/examples/menu_pane_example.rb +26 -26
- data/examples/message_dialog_example.rb +64 -64
- data/examples/radio_button_example.rb +36 -36
- data/examples/readme_example.rb +31 -31
- data/examples/scroll_window_example.rb +48 -48
- data/examples/slider_example.rb +33 -33
- data/examples/splash_example.rb +41 -41
- data/examples/text_area_example.rb +32 -32
- data/fidgit.gemspec +35 -35
- data/lib/fidgit.rb +50 -50
- data/lib/fidgit/chingu_ext/window.rb +5 -5
- data/lib/fidgit/cursor.rb +37 -37
- data/lib/fidgit/elements/button.rb +112 -112
- data/lib/fidgit/elements/color_picker.rb +62 -62
- data/lib/fidgit/elements/color_well.rb +38 -38
- data/lib/fidgit/elements/combo_box.rb +113 -113
- data/lib/fidgit/elements/composite.rb +16 -16
- data/lib/fidgit/elements/container.rb +208 -208
- data/lib/fidgit/elements/element.rb +297 -297
- data/lib/fidgit/elements/file_browser.rb +151 -151
- data/lib/fidgit/elements/grid.rb +226 -226
- data/lib/fidgit/elements/group.rb +64 -64
- data/lib/fidgit/elements/horizontal.rb +11 -11
- data/lib/fidgit/elements/image_frame.rb +64 -64
- data/lib/fidgit/elements/label.rb +84 -84
- data/lib/fidgit/elements/list.rb +46 -46
- data/lib/fidgit/elements/main_packer.rb +24 -24
- data/lib/fidgit/elements/menu_pane.rb +160 -160
- data/lib/fidgit/elements/packer.rb +41 -41
- data/lib/fidgit/elements/radio_button.rb +85 -85
- data/lib/fidgit/elements/scroll_area.rb +67 -67
- data/lib/fidgit/elements/scroll_bar.rb +127 -127
- data/lib/fidgit/elements/scroll_window.rb +82 -82
- data/lib/fidgit/elements/slider.rb +124 -124
- data/lib/fidgit/elements/text_area.rb +493 -493
- data/lib/fidgit/elements/text_line.rb +91 -91
- data/lib/fidgit/elements/toggle_button.rb +66 -66
- data/lib/fidgit/elements/tool_tip.rb +34 -34
- data/lib/fidgit/elements/vertical.rb +11 -11
- data/lib/fidgit/event.rb +158 -158
- data/lib/fidgit/gosu_ext/color.rb +135 -135
- data/lib/fidgit/gosu_ext/gosu_module.rb +24 -24
- data/lib/fidgit/history.rb +90 -90
- data/lib/fidgit/redirector.rb +82 -82
- data/lib/fidgit/schema.rb +123 -123
- data/lib/fidgit/selection.rb +105 -105
- data/lib/fidgit/standard_ext/hash.rb +20 -20
- data/lib/fidgit/states/dialog_state.rb +51 -51
- data/lib/fidgit/states/file_dialog.rb +24 -24
- data/lib/fidgit/states/gui_state.rb +329 -329
- data/lib/fidgit/states/message_dialog.rb +60 -60
- data/lib/fidgit/version.rb +4 -4
- data/lib/fidgit/window.rb +19 -19
- data/spec/fidgit/elements/helpers/helper.rb +2 -2
- data/spec/fidgit/elements/helpers/tex_play_helper.rb +8 -8
- data/spec/fidgit/elements/image_frame_spec.rb +68 -68
- data/spec/fidgit/elements/label_spec.rb +36 -36
- data/spec/fidgit/event_spec.rb +209 -209
- data/spec/fidgit/gosu_ext/color_spec.rb +129 -129
- data/spec/fidgit/gosu_ext/helpers/helper.rb +2 -2
- data/spec/fidgit/helpers/helper.rb +3 -3
- data/spec/fidgit/history_spec.rb +153 -153
- data/spec/fidgit/redirector_spec.rb +77 -77
- data/spec/fidgit/schema_spec.rb +66 -66
- data/spec/fidgit/schema_test.yml +32 -32
- metadata +67 -22
@@ -1,64 +1,64 @@
|
|
1
|
-
module Fidgit
|
2
|
-
class Group < Packer
|
3
|
-
attr_reader :selected
|
4
|
-
|
5
|
-
event :changed
|
6
|
-
|
7
|
-
def value; @selected ? @selected.value : nil; end
|
8
|
-
|
9
|
-
# @example
|
10
|
-
# group do
|
11
|
-
# horizontal do
|
12
|
-
# radio_button 1, text: '1', checked: true
|
13
|
-
# radio_button 2, text: '2'
|
14
|
-
# subscribe :changed do |sender, value|
|
15
|
-
# puts value
|
16
|
-
# end
|
17
|
-
# end
|
18
|
-
# end
|
19
|
-
#
|
20
|
-
# @param (see Packer#initialize)
|
21
|
-
#
|
22
|
-
# @option (see Packer#initialize)
|
23
|
-
def initialize(options = {}, &block)
|
24
|
-
super(options)
|
25
|
-
|
26
|
-
@selected = nil
|
27
|
-
@buttons = []
|
28
|
-
end
|
29
|
-
|
30
|
-
def add_button(button)
|
31
|
-
@buttons.push button
|
32
|
-
self.value = button.value if button.checked?
|
33
|
-
nil
|
34
|
-
end
|
35
|
-
|
36
|
-
def remove_button(button)
|
37
|
-
self.value = nil if button == @selected
|
38
|
-
@buttons.delete button
|
39
|
-
nil
|
40
|
-
end
|
41
|
-
|
42
|
-
# @example
|
43
|
-
# @my_group = group do
|
44
|
-
# horizontal do
|
45
|
-
# radio_button(1, text: '1', checked: true)
|
46
|
-
# radio_button(2, text: '2')
|
47
|
-
# end
|
48
|
-
# end
|
49
|
-
#
|
50
|
-
# # later
|
51
|
-
# @my_group.value = 2
|
52
|
-
def value=(value)
|
53
|
-
if value != self.value
|
54
|
-
button = @buttons.find { |b| b.value == value }
|
55
|
-
@selected.uncheck if @selected and @selected.checked?
|
56
|
-
@selected = button
|
57
|
-
@selected.check if @selected and not @selected.checked?
|
58
|
-
publish :changed, self.value
|
59
|
-
end
|
60
|
-
|
61
|
-
value
|
62
|
-
end
|
63
|
-
end
|
64
|
-
end
|
1
|
+
module Fidgit
|
2
|
+
class Group < Packer
|
3
|
+
attr_reader :selected
|
4
|
+
|
5
|
+
event :changed
|
6
|
+
|
7
|
+
def value; @selected ? @selected.value : nil; end
|
8
|
+
|
9
|
+
# @example
|
10
|
+
# group do
|
11
|
+
# horizontal do
|
12
|
+
# radio_button 1, text: '1', checked: true
|
13
|
+
# radio_button 2, text: '2'
|
14
|
+
# subscribe :changed do |sender, value|
|
15
|
+
# puts value
|
16
|
+
# end
|
17
|
+
# end
|
18
|
+
# end
|
19
|
+
#
|
20
|
+
# @param (see Packer#initialize)
|
21
|
+
#
|
22
|
+
# @option (see Packer#initialize)
|
23
|
+
def initialize(options = {}, &block)
|
24
|
+
super(options)
|
25
|
+
|
26
|
+
@selected = nil
|
27
|
+
@buttons = []
|
28
|
+
end
|
29
|
+
|
30
|
+
def add_button(button)
|
31
|
+
@buttons.push button
|
32
|
+
self.value = button.value if button.checked?
|
33
|
+
nil
|
34
|
+
end
|
35
|
+
|
36
|
+
def remove_button(button)
|
37
|
+
self.value = nil if button == @selected
|
38
|
+
@buttons.delete button
|
39
|
+
nil
|
40
|
+
end
|
41
|
+
|
42
|
+
# @example
|
43
|
+
# @my_group = group do
|
44
|
+
# horizontal do
|
45
|
+
# radio_button(1, text: '1', checked: true)
|
46
|
+
# radio_button(2, text: '2')
|
47
|
+
# end
|
48
|
+
# end
|
49
|
+
#
|
50
|
+
# # later
|
51
|
+
# @my_group.value = 2
|
52
|
+
def value=(value)
|
53
|
+
if value != self.value
|
54
|
+
button = @buttons.find { |b| b.value == value }
|
55
|
+
@selected.uncheck if @selected and @selected.checked?
|
56
|
+
@selected = button
|
57
|
+
@selected.check if @selected and not @selected.checked?
|
58
|
+
publish :changed, self.value
|
59
|
+
end
|
60
|
+
|
61
|
+
value
|
62
|
+
end
|
63
|
+
end
|
64
|
+
end
|
@@ -1,12 +1,12 @@
|
|
1
|
-
# encoding: utf-8
|
2
|
-
|
3
|
-
module Fidgit
|
4
|
-
# A vertically aligned element packing container.
|
5
|
-
class Horizontal < Grid
|
6
|
-
def initialize(options = {})
|
7
|
-
options[:num_rows] = 1
|
8
|
-
|
9
|
-
super options
|
10
|
-
end
|
11
|
-
end
|
1
|
+
# encoding: utf-8
|
2
|
+
|
3
|
+
module Fidgit
|
4
|
+
# A vertically aligned element packing container.
|
5
|
+
class Horizontal < Grid
|
6
|
+
def initialize(options = {})
|
7
|
+
options[:num_rows] = 1
|
8
|
+
|
9
|
+
super options
|
10
|
+
end
|
11
|
+
end
|
12
12
|
end
|
@@ -1,65 +1,65 @@
|
|
1
|
-
module Fidgit
|
2
|
-
# A wrapper around a Gosu::Image to show it in the GUI.
|
3
|
-
class ImageFrame < Element
|
4
|
-
ENABLED_COLOR = Gosu::Color::WHITE
|
5
|
-
DISABLED_COLOR = Gosu::Color.rgb(150, 150, 150)
|
6
|
-
|
7
|
-
attr_reader :image, :factor_x, :factor_y
|
8
|
-
|
9
|
-
def thumbnail?; @thumbnail; end
|
10
|
-
|
11
|
-
# @param (see Element#initialize)
|
12
|
-
# @param [Gosu::Image] image Gosu image to display.
|
13
|
-
#
|
14
|
-
# @option (see Element#initialize)
|
15
|
-
# @option options [Boolean] :thumbnail (false) Is the image expanded to be square?
|
16
|
-
def initialize(image, options = {})
|
17
|
-
options = {
|
18
|
-
thumbnail: false,
|
19
|
-
factor: 1,
|
20
|
-
}.merge! options
|
21
|
-
|
22
|
-
@thumbnail = options[:thumbnail]
|
23
|
-
@factor_x = options[:factor_x] || options[:factor]
|
24
|
-
@factor_y = options[:factor_y] || options[:factor]
|
25
|
-
|
26
|
-
super(options)
|
27
|
-
|
28
|
-
self.image = image
|
29
|
-
end
|
30
|
-
|
31
|
-
def image=(image)
|
32
|
-
@image = image
|
33
|
-
|
34
|
-
recalc
|
35
|
-
|
36
|
-
image
|
37
|
-
end
|
38
|
-
|
39
|
-
|
40
|
-
def draw_foreground
|
41
|
-
@image.draw(x + padding_left, y + padding_top, z, factor_x, factor_y, enabled? ? ENABLED_COLOR : DISABLED_COLOR) if @image
|
42
|
-
end
|
43
|
-
|
44
|
-
protected
|
45
|
-
def layout
|
46
|
-
if @image
|
47
|
-
if @thumbnail
|
48
|
-
size = [@image.width, @image.height].max
|
49
|
-
rect.width = size * @factor_x
|
50
|
-
rect.height = size * @factor_y
|
51
|
-
else
|
52
|
-
rect.width = @image.width * @factor_x
|
53
|
-
rect.height = @image.height * @factor_y
|
54
|
-
end
|
55
|
-
else
|
56
|
-
rect.width = rect.height = 0
|
57
|
-
end
|
58
|
-
|
59
|
-
rect.width += padding_left + padding_right
|
60
|
-
rect.height += padding_top + padding_bottom
|
61
|
-
|
62
|
-
nil
|
63
|
-
end
|
64
|
-
end
|
1
|
+
module Fidgit
|
2
|
+
# A wrapper around a Gosu::Image to show it in the GUI.
|
3
|
+
class ImageFrame < Element
|
4
|
+
ENABLED_COLOR = Gosu::Color::WHITE
|
5
|
+
DISABLED_COLOR = Gosu::Color.rgb(150, 150, 150)
|
6
|
+
|
7
|
+
attr_reader :image, :factor_x, :factor_y
|
8
|
+
|
9
|
+
def thumbnail?; @thumbnail; end
|
10
|
+
|
11
|
+
# @param (see Element#initialize)
|
12
|
+
# @param [Gosu::Image] image Gosu image to display.
|
13
|
+
#
|
14
|
+
# @option (see Element#initialize)
|
15
|
+
# @option options [Boolean] :thumbnail (false) Is the image expanded to be square?
|
16
|
+
def initialize(image, options = {})
|
17
|
+
options = {
|
18
|
+
thumbnail: false,
|
19
|
+
factor: 1,
|
20
|
+
}.merge! options
|
21
|
+
|
22
|
+
@thumbnail = options[:thumbnail]
|
23
|
+
@factor_x = options[:factor_x] || options[:factor]
|
24
|
+
@factor_y = options[:factor_y] || options[:factor]
|
25
|
+
|
26
|
+
super(options)
|
27
|
+
|
28
|
+
self.image = image
|
29
|
+
end
|
30
|
+
|
31
|
+
def image=(image)
|
32
|
+
@image = image
|
33
|
+
|
34
|
+
recalc
|
35
|
+
|
36
|
+
image
|
37
|
+
end
|
38
|
+
|
39
|
+
|
40
|
+
def draw_foreground
|
41
|
+
@image.draw(x + padding_left, y + padding_top, z, factor_x, factor_y, enabled? ? ENABLED_COLOR : DISABLED_COLOR) if @image
|
42
|
+
end
|
43
|
+
|
44
|
+
protected
|
45
|
+
def layout
|
46
|
+
if @image
|
47
|
+
if @thumbnail
|
48
|
+
size = [@image.width, @image.height].max
|
49
|
+
rect.width = size * @factor_x
|
50
|
+
rect.height = size * @factor_y
|
51
|
+
else
|
52
|
+
rect.width = @image.width * @factor_x
|
53
|
+
rect.height = @image.height * @factor_y
|
54
|
+
end
|
55
|
+
else
|
56
|
+
rect.width = rect.height = 0
|
57
|
+
end
|
58
|
+
|
59
|
+
rect.width += padding_left + padding_right
|
60
|
+
rect.height += padding_top + padding_bottom
|
61
|
+
|
62
|
+
nil
|
63
|
+
end
|
64
|
+
end
|
65
65
|
end
|
@@ -1,85 +1,85 @@
|
|
1
|
-
# encoding: utf-8
|
2
|
-
|
3
|
-
module Fidgit
|
4
|
-
class Label < Composite
|
5
|
-
ICON_POSITIONS = [:top, :bottom, :left, :right]
|
6
|
-
|
7
|
-
attr_reader :icon_position
|
8
|
-
|
9
|
-
attr_accessor :background_color, :border_color
|
10
|
-
|
11
|
-
def_delegators :@text, :text, :color, :font, :color=, :text=
|
12
|
-
|
13
|
-
def icon; @icon ? @icon.image : nil; end
|
14
|
-
|
15
|
-
def hit_element(x, y)
|
16
|
-
# The sub-elements should never get events.
|
17
|
-
hit?(x, y) ? self : nil
|
18
|
-
end
|
19
|
-
|
20
|
-
def icon=(icon)
|
21
|
-
raise ArgumentError.new("Icon must be a Gosu::Image") unless icon.is_a? Gosu::Image or icon.nil?
|
22
|
-
|
23
|
-
@contents.remove(@icon) if @icon.image
|
24
|
-
@icon.image = icon
|
25
|
-
position = [:left, :top].include?(icon_position) ? 0 : 1
|
26
|
-
@contents.insert(position, @icon) if @icon.image
|
27
|
-
|
28
|
-
icon
|
29
|
-
end
|
30
|
-
|
31
|
-
# Set the position of the icon, respective to the text.
|
32
|
-
def icon_position=(position)
|
33
|
-
raise ArgumentError.new("icon_position must be one of #{ICON_POSITIONS}") unless ICON_POSITIONS.include? position
|
34
|
-
|
35
|
-
@icon_position = position
|
36
|
-
|
37
|
-
case @icon_position
|
38
|
-
when :top, :bottom
|
39
|
-
@contents.instance_variable_set :@type, :fixed_columns
|
40
|
-
@contents.instance_variable_set :@num_columns, 1
|
41
|
-
when :left, :right
|
42
|
-
@contents.instance_variable_set :@type, :fixed_rows
|
43
|
-
@contents.instance_variable_set :@num_rows, 1
|
44
|
-
end
|
45
|
-
|
46
|
-
self.icon = @icon.image if @icon.image # Force the icon into the correct position.
|
47
|
-
|
48
|
-
position
|
49
|
-
end
|
50
|
-
|
51
|
-
# @param (see Element#initialize)
|
52
|
-
# @param [String] text The string to display in the label.
|
53
|
-
#
|
54
|
-
# @option (see Element#initialize)
|
55
|
-
# @option options [Gosu::Image, nil] :icon (nil)
|
56
|
-
# @option options [:left, :right, :center] :justify (:left) Text justification.
|
57
|
-
def initialize(text, options = {})
|
58
|
-
options = {
|
59
|
-
color: default(:color),
|
60
|
-
justify: default(:justify),
|
61
|
-
background_color: default(:background_color),
|
62
|
-
border_color: default(:border_color),
|
63
|
-
icon_options: {},
|
64
|
-
font_name: default(:font_name),
|
65
|
-
font_height: default(:font_height),
|
66
|
-
icon_position: default(:icon_position),
|
67
|
-
}.merge! options
|
68
|
-
|
69
|
-
super(options)
|
70
|
-
|
71
|
-
# Bit of a fudge since font info is managed circularly here!
|
72
|
-
# By using a grid, we'll be able to turn it around easily (in theory).
|
73
|
-
@contents = grid num_rows: 1, padding: 0, spacing_h: spacing_h, spacing_v: spacing_v, width: options[:width], height: options[:height], z: z do |contents|
|
74
|
-
@text = TextLine.new(text, parent: contents, justify: options[:justify], color: options[:color], padding: 0, z: z,
|
75
|
-
font_name: options[:font_name], font_height: options[:font_height], align_h: :fill, align_v: :center)
|
76
|
-
end
|
77
|
-
|
78
|
-
# Create an image frame, but don't show it unless there is an image in it.
|
79
|
-
@icon = ImageFrame.new(nil, options[:icon_options].merge(z: z, align: :center))
|
80
|
-
@icon.image = options[:icon]
|
81
|
-
|
82
|
-
self.icon_position = options[:icon_position]
|
83
|
-
end
|
84
|
-
end
|
1
|
+
# encoding: utf-8
|
2
|
+
|
3
|
+
module Fidgit
|
4
|
+
class Label < Composite
|
5
|
+
ICON_POSITIONS = [:top, :bottom, :left, :right]
|
6
|
+
|
7
|
+
attr_reader :icon_position
|
8
|
+
|
9
|
+
attr_accessor :background_color, :border_color
|
10
|
+
|
11
|
+
def_delegators :@text, :text, :color, :font, :color=, :text=
|
12
|
+
|
13
|
+
def icon; @icon ? @icon.image : nil; end
|
14
|
+
|
15
|
+
def hit_element(x, y)
|
16
|
+
# The sub-elements should never get events.
|
17
|
+
hit?(x, y) ? self : nil
|
18
|
+
end
|
19
|
+
|
20
|
+
def icon=(icon)
|
21
|
+
raise ArgumentError.new("Icon must be a Gosu::Image") unless icon.is_a? Gosu::Image or icon.nil?
|
22
|
+
|
23
|
+
@contents.remove(@icon) if @icon.image
|
24
|
+
@icon.image = icon
|
25
|
+
position = [:left, :top].include?(icon_position) ? 0 : 1
|
26
|
+
@contents.insert(position, @icon) if @icon.image
|
27
|
+
|
28
|
+
icon
|
29
|
+
end
|
30
|
+
|
31
|
+
# Set the position of the icon, respective to the text.
|
32
|
+
def icon_position=(position)
|
33
|
+
raise ArgumentError.new("icon_position must be one of #{ICON_POSITIONS}") unless ICON_POSITIONS.include? position
|
34
|
+
|
35
|
+
@icon_position = position
|
36
|
+
|
37
|
+
case @icon_position
|
38
|
+
when :top, :bottom
|
39
|
+
@contents.instance_variable_set :@type, :fixed_columns
|
40
|
+
@contents.instance_variable_set :@num_columns, 1
|
41
|
+
when :left, :right
|
42
|
+
@contents.instance_variable_set :@type, :fixed_rows
|
43
|
+
@contents.instance_variable_set :@num_rows, 1
|
44
|
+
end
|
45
|
+
|
46
|
+
self.icon = @icon.image if @icon.image # Force the icon into the correct position.
|
47
|
+
|
48
|
+
position
|
49
|
+
end
|
50
|
+
|
51
|
+
# @param (see Element#initialize)
|
52
|
+
# @param [String] text The string to display in the label.
|
53
|
+
#
|
54
|
+
# @option (see Element#initialize)
|
55
|
+
# @option options [Gosu::Image, nil] :icon (nil)
|
56
|
+
# @option options [:left, :right, :center] :justify (:left) Text justification.
|
57
|
+
def initialize(text, options = {})
|
58
|
+
options = {
|
59
|
+
color: default(:color),
|
60
|
+
justify: default(:justify),
|
61
|
+
background_color: default(:background_color),
|
62
|
+
border_color: default(:border_color),
|
63
|
+
icon_options: {},
|
64
|
+
font_name: default(:font_name),
|
65
|
+
font_height: default(:font_height),
|
66
|
+
icon_position: default(:icon_position),
|
67
|
+
}.merge! options
|
68
|
+
|
69
|
+
super(options)
|
70
|
+
|
71
|
+
# Bit of a fudge since font info is managed circularly here!
|
72
|
+
# By using a grid, we'll be able to turn it around easily (in theory).
|
73
|
+
@contents = grid num_rows: 1, padding: 0, spacing_h: spacing_h, spacing_v: spacing_v, width: options[:width], height: options[:height], z: z do |contents|
|
74
|
+
@text = TextLine.new(text, parent: contents, justify: options[:justify], color: options[:color], padding: 0, z: z,
|
75
|
+
font_name: options[:font_name], font_height: options[:font_height], align_h: :fill, align_v: :center)
|
76
|
+
end
|
77
|
+
|
78
|
+
# Create an image frame, but don't show it unless there is an image in it.
|
79
|
+
@icon = ImageFrame.new(nil, options[:icon_options].merge(z: z, align: :center))
|
80
|
+
@icon.image = options[:icon]
|
81
|
+
|
82
|
+
self.icon_position = options[:icon_position]
|
83
|
+
end
|
84
|
+
end
|
85
85
|
end
|