PhantomAnimationEditor 0.1.0
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.
- checksums.yaml +7 -0
- data/PhantomAnimationEditor.gemspec +20 -0
- data/bin/PhantomAnimationEditor +17 -0
- data/lib/phantom_animation_editor.rb +2 -0
- data/lib/phantom_animation_editor/adapter.rb +100 -0
- data/lib/phantom_animation_editor/editor_window.rb +363 -0
- data/lib/phantom_animation_editor/frame.rb +80 -0
- data/lib/phantom_animation_editor/frame_list.rb +110 -0
- data/lib/phantom_animation_editor/layout.glade +567 -0
- metadata +94 -0
@@ -0,0 +1,80 @@
|
|
1
|
+
require_relative '../phantom_animation_editor.rb'
|
2
|
+
|
3
|
+
# Animation frame.
|
4
|
+
class PhantomAnimationEditor::Frame < Gtk::Frame
|
5
|
+
THUMBNAIL_SIZE = 100
|
6
|
+
attr_accessor :filename, :pixbuf
|
7
|
+
|
8
|
+
def initialize(filename, parent)
|
9
|
+
super()
|
10
|
+
@filename = filename
|
11
|
+
@parent = parent
|
12
|
+
|
13
|
+
image = create_thumbnail
|
14
|
+
@pixbuf = image.pixbuf
|
15
|
+
|
16
|
+
create_image_button(image)
|
17
|
+
create_spinner
|
18
|
+
create_delete_button
|
19
|
+
|
20
|
+
add(create_box)
|
21
|
+
end
|
22
|
+
|
23
|
+
def create_thumbnail
|
24
|
+
image = Gtk::Image.new(file: @filename)
|
25
|
+
unless image.pixbuf.nil?
|
26
|
+
if image.pixbuf.width > THUMBNAIL_SIZE || image.pixbuf.height > THUMBNAIL_SIZE
|
27
|
+
image.pixbuf = resize(image.pixbuf, THUMBNAIL_SIZE)
|
28
|
+
end
|
29
|
+
end
|
30
|
+
image
|
31
|
+
end
|
32
|
+
|
33
|
+
def resize(pixbuf, size)
|
34
|
+
if pixbuf.width >= pixbuf.height
|
35
|
+
scale = pixbuf.height.to_f / pixbuf.width.to_f
|
36
|
+
pixbuf = pixbuf.scale(size, size * scale, GdkPixbuf::InterpType::BILINEAR)
|
37
|
+
else
|
38
|
+
scale = pixbuf.width.to_f / pixbuf.height.to_f
|
39
|
+
pixbuf = pixbuf.scale(size * scale, size, GdkPixbuf::InterpType::BILINEAR)
|
40
|
+
end
|
41
|
+
pixbuf
|
42
|
+
end
|
43
|
+
|
44
|
+
def create_image_button(image)
|
45
|
+
@image_button = Gtk::Button.new
|
46
|
+
@image_button.set_relief(Gtk::ReliefStyle::NONE)
|
47
|
+
@image_button.add(image)
|
48
|
+
@image_button.signal_connect('clicked') do
|
49
|
+
@parent.focus(self)
|
50
|
+
end
|
51
|
+
end
|
52
|
+
|
53
|
+
def create_spinner
|
54
|
+
adjustment = Gtk::Adjustment.new(100, 1, 999, 1, 1, 0)
|
55
|
+
@delay_spinner = Gtk::SpinButton.new(adjustment, 1, 0)
|
56
|
+
end
|
57
|
+
|
58
|
+
def create_delete_button
|
59
|
+
@delete_button = Gtk::Button.new(label: 'Delete')
|
60
|
+
@delete_button.signal_connect('clicked') do
|
61
|
+
@parent.delete(self)
|
62
|
+
end
|
63
|
+
end
|
64
|
+
|
65
|
+
def create_box
|
66
|
+
box = Gtk::Box.new(:vertical)
|
67
|
+
box.pack_start(@image_button, expand: true, fill: false, padding: 10)
|
68
|
+
box.pack_start(@delay_spinner, expand: false, fill: false)
|
69
|
+
box.pack_start(@delete_button, expand: false, fill: false)
|
70
|
+
box
|
71
|
+
end
|
72
|
+
|
73
|
+
def delay
|
74
|
+
@delay_spinner.value
|
75
|
+
end
|
76
|
+
|
77
|
+
def set_delay(value)
|
78
|
+
@delay_spinner.set_value(value)
|
79
|
+
end
|
80
|
+
end
|
@@ -0,0 +1,110 @@
|
|
1
|
+
require_relative '../phantom_animation_editor.rb'
|
2
|
+
|
3
|
+
require 'phantom_svg'
|
4
|
+
|
5
|
+
class PhantomAnimationEditor::FrameList
|
6
|
+
attr_accessor :frame_hbox, :cur, :list, :phantom_svg
|
7
|
+
|
8
|
+
def initialize(frame_hbox)
|
9
|
+
@frame_hbox = frame_hbox
|
10
|
+
@list = []
|
11
|
+
@phantom_svg = Phantom::SVG::Base.new
|
12
|
+
end
|
13
|
+
|
14
|
+
def <<(data)
|
15
|
+
@list << data
|
16
|
+
@cur = @list.size - 1
|
17
|
+
@phantom_svg.add_frame_from_file(data.filename) if File.exist?(data.filename)
|
18
|
+
end
|
19
|
+
|
20
|
+
def size
|
21
|
+
@list.size
|
22
|
+
end
|
23
|
+
|
24
|
+
def filename(position = nil)
|
25
|
+
return @list[@cur].filename if position.nil?
|
26
|
+
return nil if position > @list.size
|
27
|
+
return @list[position].filename
|
28
|
+
end
|
29
|
+
|
30
|
+
def pixbuf(position = nil)
|
31
|
+
return @list[@cur].pixbuf if position.nil?
|
32
|
+
return nil if position > @list.size
|
33
|
+
return @list[position].pixbuf
|
34
|
+
end
|
35
|
+
|
36
|
+
def delay(position = nil)
|
37
|
+
return @list[@cur].delay if position.nil?
|
38
|
+
return nil if position > @list.size
|
39
|
+
return @list[position].delay
|
40
|
+
end
|
41
|
+
|
42
|
+
def swap(old_position, new_position)
|
43
|
+
case new_position
|
44
|
+
when 0 then
|
45
|
+
insert_first(@list, old_position)
|
46
|
+
insert_first(@phantom_svg.frames, old_position)
|
47
|
+
when @list.size - 1 then
|
48
|
+
insert_last(@list, old_position)
|
49
|
+
insert_last(@phantom_svg.frames, old_position)
|
50
|
+
else
|
51
|
+
swap_pos(@list, old_position, new_position)
|
52
|
+
swap_pos(@phantom_svg.frames, old_position, new_position)
|
53
|
+
end
|
54
|
+
end
|
55
|
+
|
56
|
+
def insert_first(list, old_position)
|
57
|
+
list.insert(0, list[old_position])
|
58
|
+
list.delete_at(old_position + 1)
|
59
|
+
end
|
60
|
+
|
61
|
+
def insert_last(list, old_position)
|
62
|
+
list << list[old_position]
|
63
|
+
list.delete_at(old_position)
|
64
|
+
end
|
65
|
+
|
66
|
+
def swap_pos(list, old_position, new_position)
|
67
|
+
list[old_position], list[new_position] = list[new_position], list[old_position]
|
68
|
+
end
|
69
|
+
|
70
|
+
def delete(child)
|
71
|
+
@phantom_svg.frames.delete_at(@list.find_index(child))
|
72
|
+
@list.delete(child)
|
73
|
+
@frame_hbox.remove(child)
|
74
|
+
|
75
|
+
@cur -= 1 unless @cur == 0
|
76
|
+
if @list.size == 0
|
77
|
+
$preview.set_stock(Gtk::Stock::MISSING_IMAGE)
|
78
|
+
else
|
79
|
+
$preview.set_pixbuf(@list[@cur].pixbuf)
|
80
|
+
end
|
81
|
+
end
|
82
|
+
|
83
|
+
def delete_at(index)
|
84
|
+
child = @list[index]
|
85
|
+
delete(child)
|
86
|
+
end
|
87
|
+
|
88
|
+
def delete_all
|
89
|
+
@list.size.times do
|
90
|
+
child = @list[0]
|
91
|
+
@list.delete(child)
|
92
|
+
@frame_hbox.remove(child)
|
93
|
+
end
|
94
|
+
@phantom_svg.reset
|
95
|
+
@cur = 0
|
96
|
+
$preview.set_stock(Gtk::Stock::MISSING_IMAGE)
|
97
|
+
end
|
98
|
+
|
99
|
+
def focus(child)
|
100
|
+
@cur = @list.find_index(child)
|
101
|
+
$preview.set_pixbuf(@list[@cur].pixbuf)
|
102
|
+
end
|
103
|
+
|
104
|
+
def view_reload
|
105
|
+
@list.each { |frame| @frame_hbox.remove(frame) }
|
106
|
+
@list.each do |frame|
|
107
|
+
@frame_hbox.pack_start(frame, expand: false, fill: false, padding: 10)
|
108
|
+
end
|
109
|
+
end
|
110
|
+
end
|
@@ -0,0 +1,567 @@
|
|
1
|
+
<?xml version="1.0" encoding="UTF-8"?>
|
2
|
+
<!-- Generated with glade 3.18.3 -->
|
3
|
+
<interface>
|
4
|
+
<requires lib="gtk+" version="3.6"/>
|
5
|
+
<object class="GtkImage" id="export_button_image">
|
6
|
+
<property name="visible">True</property>
|
7
|
+
<property name="can_focus">False</property>
|
8
|
+
<property name="stock">gtk-save-as</property>
|
9
|
+
</object>
|
10
|
+
<object class="GtkWindow" id="editor_window">
|
11
|
+
<property name="can_focus">False</property>
|
12
|
+
<child>
|
13
|
+
<object class="GtkVBox" id="vbox_base">
|
14
|
+
<property name="visible">True</property>
|
15
|
+
<property name="can_focus">False</property>
|
16
|
+
<child>
|
17
|
+
<object class="GtkMenuBar" id="menubar">
|
18
|
+
<property name="visible">True</property>
|
19
|
+
<property name="can_focus">False</property>
|
20
|
+
<child>
|
21
|
+
<object class="GtkMenuItem" id="menuitem_file">
|
22
|
+
<property name="visible">True</property>
|
23
|
+
<property name="can_focus">False</property>
|
24
|
+
<property name="label" translatable="yes">_File</property>
|
25
|
+
<property name="use_underline">True</property>
|
26
|
+
<child type="submenu">
|
27
|
+
<object class="GtkMenu" id="menu_file">
|
28
|
+
<property name="visible">True</property>
|
29
|
+
<property name="can_focus">False</property>
|
30
|
+
<child>
|
31
|
+
<object class="GtkImageMenuItem" id="menu_file_new">
|
32
|
+
<property name="label">gtk-new</property>
|
33
|
+
<property name="visible">True</property>
|
34
|
+
<property name="can_focus">False</property>
|
35
|
+
<property name="use_underline">True</property>
|
36
|
+
<property name="use_stock">True</property>
|
37
|
+
</object>
|
38
|
+
</child>
|
39
|
+
<child>
|
40
|
+
<object class="GtkImageMenuItem" id="menu_file_import">
|
41
|
+
<property name="label">Import</property>
|
42
|
+
<property name="visible">True</property>
|
43
|
+
<property name="can_focus">False</property>
|
44
|
+
<property name="use_underline">True</property>
|
45
|
+
<property name="use_stock">True</property>
|
46
|
+
</object>
|
47
|
+
</child>
|
48
|
+
<child>
|
49
|
+
<object class="GtkImageMenuItem" id="menu_file_export">
|
50
|
+
<property name="label">Export</property>
|
51
|
+
<property name="visible">True</property>
|
52
|
+
<property name="can_focus">False</property>
|
53
|
+
<property name="use_underline">True</property>
|
54
|
+
<property name="use_stock">True</property>
|
55
|
+
</object>
|
56
|
+
</child>
|
57
|
+
<child>
|
58
|
+
<object class="GtkImageMenuItem" id="menu_file_export_frames">
|
59
|
+
<property name="label">Export with frames</property>
|
60
|
+
<property name="visible">True</property>
|
61
|
+
<property name="can_focus">False</property>
|
62
|
+
<property name="use_underline">True</property>
|
63
|
+
<property name="use_stock">True</property>
|
64
|
+
</object>
|
65
|
+
</child>
|
66
|
+
<child>
|
67
|
+
<object class="GtkSeparatorMenuItem" id="separatormenuitem1">
|
68
|
+
<property name="visible">True</property>
|
69
|
+
<property name="can_focus">False</property>
|
70
|
+
</object>
|
71
|
+
</child>
|
72
|
+
<child>
|
73
|
+
<object class="GtkImageMenuItem" id="menu_file_quit">
|
74
|
+
<property name="label">gtk-quit</property>
|
75
|
+
<property name="visible">True</property>
|
76
|
+
<property name="can_focus">False</property>
|
77
|
+
<property name="use_underline">True</property>
|
78
|
+
<property name="use_stock">True</property>
|
79
|
+
</object>
|
80
|
+
</child>
|
81
|
+
</object>
|
82
|
+
</child>
|
83
|
+
</object>
|
84
|
+
</child>
|
85
|
+
<child>
|
86
|
+
<object class="GtkMenuItem" id="menuitem_frame">
|
87
|
+
<property name="visible">True</property>
|
88
|
+
<property name="can_focus">False</property>
|
89
|
+
<property name="label" translatable="yes">_Frame</property>
|
90
|
+
<property name="use_underline">True</property>
|
91
|
+
<child type="submenu">
|
92
|
+
<object class="GtkMenu" id="menu_frame">
|
93
|
+
<property name="visible">True</property>
|
94
|
+
<property name="can_focus">False</property>
|
95
|
+
<child>
|
96
|
+
<object class="GtkImageMenuItem" id="menu_frame_add">
|
97
|
+
<property name="label">Add frame</property>
|
98
|
+
<property name="visible">True</property>
|
99
|
+
<property name="can_focus">False</property>
|
100
|
+
<property name="use_underline">True</property>
|
101
|
+
<property name="use_stock">True</property>
|
102
|
+
</object>
|
103
|
+
</child>
|
104
|
+
<child>
|
105
|
+
<object class="GtkImageMenuItem" id="menu_frame_next">
|
106
|
+
<property name="label">Move to next</property>
|
107
|
+
<property name="visible">True</property>
|
108
|
+
<property name="can_focus">False</property>
|
109
|
+
<property name="use_underline">True</property>
|
110
|
+
<property name="use_stock">True</property>
|
111
|
+
</object>
|
112
|
+
</child>
|
113
|
+
<child>
|
114
|
+
<object class="GtkImageMenuItem" id="menu_frame_prev">
|
115
|
+
<property name="label">Move to prev</property>
|
116
|
+
<property name="visible">True</property>
|
117
|
+
<property name="can_focus">False</property>
|
118
|
+
<property name="use_underline">True</property>
|
119
|
+
<property name="use_stock">True</property>
|
120
|
+
</object>
|
121
|
+
</child>
|
122
|
+
<child>
|
123
|
+
<object class="GtkImageMenuItem" id="menu_frame_last">
|
124
|
+
<property name="label">Move to last</property>
|
125
|
+
<property name="visible">True</property>
|
126
|
+
<property name="can_focus">False</property>
|
127
|
+
<property name="use_underline">True</property>
|
128
|
+
<property name="use_stock">True</property>
|
129
|
+
</object>
|
130
|
+
</child>
|
131
|
+
<child>
|
132
|
+
<object class="GtkImageMenuItem" id="menu_frame_first">
|
133
|
+
<property name="label">Move to first</property>
|
134
|
+
<property name="visible">True</property>
|
135
|
+
<property name="can_focus">False</property>
|
136
|
+
<property name="use_underline">True</property>
|
137
|
+
<property name="use_stock">True</property>
|
138
|
+
</object>
|
139
|
+
</child>
|
140
|
+
<child>
|
141
|
+
<object class="GtkImageMenuItem" id="menu_frame_delete">
|
142
|
+
<property name="label">Delete frame</property>
|
143
|
+
<property name="visible">True</property>
|
144
|
+
<property name="can_focus">False</property>
|
145
|
+
<property name="use_underline">True</property>
|
146
|
+
<property name="use_stock">True</property>
|
147
|
+
</object>
|
148
|
+
</child>
|
149
|
+
</object>
|
150
|
+
</child>
|
151
|
+
</object>
|
152
|
+
</child>
|
153
|
+
<child>
|
154
|
+
<object class="GtkMenuItem" id="menuitem_play">
|
155
|
+
<property name="visible">True</property>
|
156
|
+
<property name="can_focus">False</property>
|
157
|
+
<property name="label" translatable="yes">_Play</property>
|
158
|
+
<property name="use_underline">True</property>
|
159
|
+
<child type="submenu">
|
160
|
+
<object class="GtkMenu" id="menu_play">
|
161
|
+
<property name="visible">True</property>
|
162
|
+
<property name="can_focus">False</property>
|
163
|
+
<child>
|
164
|
+
<object class="GtkImageMenuItem" id="menu_play_play">
|
165
|
+
<property name="label">Play</property>
|
166
|
+
<property name="visible">True</property>
|
167
|
+
<property name="can_focus">False</property>
|
168
|
+
<property name="use_underline">True</property>
|
169
|
+
<property name="use_stock">True</property>
|
170
|
+
</object>
|
171
|
+
</child>
|
172
|
+
<child>
|
173
|
+
<object class="GtkImageMenuItem" id="menu_play_stop">
|
174
|
+
<property name="label">Stop</property>
|
175
|
+
<property name="visible">True</property>
|
176
|
+
<property name="can_focus">False</property>
|
177
|
+
<property name="use_underline">True</property>
|
178
|
+
<property name="use_stock">True</property>
|
179
|
+
</object>
|
180
|
+
</child>
|
181
|
+
<child>
|
182
|
+
<object class="GtkCheckMenuItem" id="menu_play_loop">
|
183
|
+
<property name="visible">True</property>
|
184
|
+
<property name="can_focus">True</property>
|
185
|
+
<property name="label">Loop</property>
|
186
|
+
<property name="use_underline">True</property>
|
187
|
+
</object>
|
188
|
+
</child>
|
189
|
+
</object>
|
190
|
+
</child>
|
191
|
+
</object>
|
192
|
+
</child>
|
193
|
+
<child>
|
194
|
+
<object class="GtkMenuItem" id="menuitem_help">
|
195
|
+
<property name="visible">True</property>
|
196
|
+
<property name="can_focus">False</property>
|
197
|
+
<property name="label" translatable="yes">_Help</property>
|
198
|
+
<property name="use_underline">True</property>
|
199
|
+
<child type="submenu">
|
200
|
+
<object class="GtkMenu" id="menu_help">
|
201
|
+
<property name="visible">True</property>
|
202
|
+
<property name="can_focus">False</property>
|
203
|
+
<child>
|
204
|
+
<object class="GtkImageMenuItem" id="menu_help_about">
|
205
|
+
<property name="label">gtk-about</property>
|
206
|
+
<property name="visible">True</property>
|
207
|
+
<property name="can_focus">False</property>
|
208
|
+
<property name="use_underline">True</property>
|
209
|
+
<property name="use_stock">True</property>
|
210
|
+
</object>
|
211
|
+
</child>
|
212
|
+
</object>
|
213
|
+
</child>
|
214
|
+
</object>
|
215
|
+
</child>
|
216
|
+
</object>
|
217
|
+
<packing>
|
218
|
+
<property name="expand">False</property>
|
219
|
+
<property name="fill">True</property>
|
220
|
+
<property name="position">0</property>
|
221
|
+
</packing>
|
222
|
+
</child>
|
223
|
+
<child>
|
224
|
+
<object class="GtkHBox" id="hbox_top">
|
225
|
+
<property name="visible">True</property>
|
226
|
+
<property name="can_focus">False</property>
|
227
|
+
<property name="spacing">10</property>
|
228
|
+
<child>
|
229
|
+
<object class="GtkVBox" id="view_vbox">
|
230
|
+
<property name="visible">True</property>
|
231
|
+
<property name="can_focus">False</property>
|
232
|
+
<property name="spacing">10</property>
|
233
|
+
<child>
|
234
|
+
<object class="GtkScrolledWindow" id="viewport_scrolledwindow">
|
235
|
+
<property name="visible">True</property>
|
236
|
+
<property name="can_focus">False</property>
|
237
|
+
<child>
|
238
|
+
<object class="GtkViewport" id="viewport_preview">
|
239
|
+
<property name="visible">True</property>
|
240
|
+
<property name="can_focus">False</property>
|
241
|
+
<property name="resize_mode">queue</property>
|
242
|
+
<child>
|
243
|
+
<object class="GtkImage" id="preview_image">
|
244
|
+
<property name="visible">True</property>
|
245
|
+
<property name="can_focus">False</property>
|
246
|
+
<property name="xpad">10</property>
|
247
|
+
<property name="ypad">10</property>
|
248
|
+
<property name="stock">gtk-missing-image</property>
|
249
|
+
</object>
|
250
|
+
</child>
|
251
|
+
</object>
|
252
|
+
</child>
|
253
|
+
</object>
|
254
|
+
<packing>
|
255
|
+
<property name="expand">True</property>
|
256
|
+
<property name="fill">True</property>
|
257
|
+
<property name="position">0</property>
|
258
|
+
</packing>
|
259
|
+
</child>
|
260
|
+
<child>
|
261
|
+
<object class="GtkHBox" id="play_hbox">
|
262
|
+
<property name="visible">True</property>
|
263
|
+
<property name="can_focus">False</property>
|
264
|
+
<child>
|
265
|
+
<object class="GtkButton" id="first_button">
|
266
|
+
<property name="label">gtk-goto-first</property>
|
267
|
+
<property name="visible">True</property>
|
268
|
+
<property name="can_focus">True</property>
|
269
|
+
<property name="receives_default">True</property>
|
270
|
+
<property name="relief">half</property>
|
271
|
+
<property name="use_stock">True</property>
|
272
|
+
<property name="always_show_image">True</property>
|
273
|
+
</object>
|
274
|
+
<packing>
|
275
|
+
<property name="expand">True</property>
|
276
|
+
<property name="fill">True</property>
|
277
|
+
<property name="position">0</property>
|
278
|
+
</packing>
|
279
|
+
</child>
|
280
|
+
<child>
|
281
|
+
<object class="GtkButton" id="back_button">
|
282
|
+
<property name="label">gtk-go-back</property>
|
283
|
+
<property name="visible">True</property>
|
284
|
+
<property name="can_focus">True</property>
|
285
|
+
<property name="receives_default">True</property>
|
286
|
+
<property name="use_stock">True</property>
|
287
|
+
<property name="always_show_image">True</property>
|
288
|
+
</object>
|
289
|
+
<packing>
|
290
|
+
<property name="expand">True</property>
|
291
|
+
<property name="fill">True</property>
|
292
|
+
<property name="position">1</property>
|
293
|
+
</packing>
|
294
|
+
</child>
|
295
|
+
<child>
|
296
|
+
<object class="GtkButton" id="play_button">
|
297
|
+
<property name="label">gtk-media-play</property>
|
298
|
+
<property name="visible">True</property>
|
299
|
+
<property name="can_focus">True</property>
|
300
|
+
<property name="receives_default">True</property>
|
301
|
+
<property name="use_stock">True</property>
|
302
|
+
<property name="always_show_image">True</property>
|
303
|
+
</object>
|
304
|
+
<packing>
|
305
|
+
<property name="expand">True</property>
|
306
|
+
<property name="fill">True</property>
|
307
|
+
<property name="position">2</property>
|
308
|
+
</packing>
|
309
|
+
</child>
|
310
|
+
<child>
|
311
|
+
<object class="GtkButton" id="forward_button">
|
312
|
+
<property name="label">gtk-go-forward</property>
|
313
|
+
<property name="visible">True</property>
|
314
|
+
<property name="can_focus">True</property>
|
315
|
+
<property name="receives_default">True</property>
|
316
|
+
<property name="use_stock">True</property>
|
317
|
+
<property name="always_show_image">True</property>
|
318
|
+
</object>
|
319
|
+
<packing>
|
320
|
+
<property name="expand">True</property>
|
321
|
+
<property name="fill">True</property>
|
322
|
+
<property name="position">3</property>
|
323
|
+
</packing>
|
324
|
+
</child>
|
325
|
+
<child>
|
326
|
+
<object class="GtkButton" id="last_button">
|
327
|
+
<property name="label">gtk-goto-last</property>
|
328
|
+
<property name="visible">True</property>
|
329
|
+
<property name="can_focus">True</property>
|
330
|
+
<property name="receives_default">True</property>
|
331
|
+
<property name="use_stock">True</property>
|
332
|
+
<property name="always_show_image">True</property>
|
333
|
+
</object>
|
334
|
+
<packing>
|
335
|
+
<property name="expand">True</property>
|
336
|
+
<property name="fill">True</property>
|
337
|
+
<property name="position">4</property>
|
338
|
+
</packing>
|
339
|
+
</child>
|
340
|
+
<child>
|
341
|
+
<object class="GtkButton" id="add_frame_button">
|
342
|
+
<property name="label">gtk-add</property>
|
343
|
+
<property name="visible">True</property>
|
344
|
+
<property name="can_focus">False</property>
|
345
|
+
<property name="receives_default">True</property>
|
346
|
+
<property name="use_stock">True</property>
|
347
|
+
<property name="always_show_image">True</property>
|
348
|
+
</object>
|
349
|
+
<packing>
|
350
|
+
<property name="expand">True</property>
|
351
|
+
<property name="fill">True</property>
|
352
|
+
<property name="position">5</property>
|
353
|
+
</packing>
|
354
|
+
</child>
|
355
|
+
</object>
|
356
|
+
<packing>
|
357
|
+
<property name="expand">False</property>
|
358
|
+
<property name="fill">False</property>
|
359
|
+
<property name="position">1</property>
|
360
|
+
</packing>
|
361
|
+
</child>
|
362
|
+
</object>
|
363
|
+
<packing>
|
364
|
+
<property name="expand">True</property>
|
365
|
+
<property name="fill">True</property>
|
366
|
+
<property name="padding">10</property>
|
367
|
+
<property name="position">0</property>
|
368
|
+
</packing>
|
369
|
+
</child>
|
370
|
+
</object>
|
371
|
+
<packing>
|
372
|
+
<property name="expand">True</property>
|
373
|
+
<property name="fill">True</property>
|
374
|
+
<property name="padding">10</property>
|
375
|
+
<property name="position">1</property>
|
376
|
+
</packing>
|
377
|
+
</child>
|
378
|
+
<child>
|
379
|
+
<object class="GtkScrolledWindow" id="frame_list_scrolled_window">
|
380
|
+
<property name="visible">True</property>
|
381
|
+
<property name="can_focus">False</property>
|
382
|
+
<property name="min_content_height">200</property>
|
383
|
+
<child>
|
384
|
+
<placeholder/>
|
385
|
+
</child>
|
386
|
+
</object>
|
387
|
+
<packing>
|
388
|
+
<property name="expand">False</property>
|
389
|
+
<property name="fill">True</property>
|
390
|
+
<property name="position">2</property>
|
391
|
+
</packing>
|
392
|
+
</child>
|
393
|
+
<child>
|
394
|
+
<object class="GtkHBox" id="export_box">
|
395
|
+
<property name="can_focus">False</property>
|
396
|
+
<child>
|
397
|
+
<object class="GtkFileChooserButton" id="file_chooser">
|
398
|
+
<property name="can_focus">False</property>
|
399
|
+
</object>
|
400
|
+
<packing>
|
401
|
+
<property name="expand">True</property>
|
402
|
+
<property name="fill">True</property>
|
403
|
+
<property name="position">1</property>
|
404
|
+
</packing>
|
405
|
+
</child>
|
406
|
+
<child>
|
407
|
+
<object class="GtkButton" id="export_button">
|
408
|
+
<property name="can_focus">False</property>
|
409
|
+
<property name="receives_default">True</property>
|
410
|
+
<property name="image">export_button_image</property>
|
411
|
+
</object>
|
412
|
+
<packing>
|
413
|
+
<property name="expand">False</property>
|
414
|
+
<property name="fill">True</property>
|
415
|
+
<property name="position">3</property>
|
416
|
+
</packing>
|
417
|
+
</child>
|
418
|
+
<child>
|
419
|
+
<object class="GtkCheckButton" id="loop_checkbutton">
|
420
|
+
<property name="label" translatable="yes">Loop</property>
|
421
|
+
<property name="visible">True</property>
|
422
|
+
<property name="can_focus">True</property>
|
423
|
+
<property name="receives_default">False</property>
|
424
|
+
<property name="xalign">0</property>
|
425
|
+
<property name="draw_indicator">True</property>
|
426
|
+
</object>
|
427
|
+
<packing>
|
428
|
+
<property name="expand">False</property>
|
429
|
+
<property name="fill">False</property>
|
430
|
+
<property name="padding">10</property>
|
431
|
+
<property name="position">4</property>
|
432
|
+
</packing>
|
433
|
+
</child>
|
434
|
+
<child>
|
435
|
+
<object class="GtkCheckButton" id="frames_checkbutton">
|
436
|
+
<property name="label" translatable="yes">Frames</property>
|
437
|
+
<property name="visible">True</property>
|
438
|
+
<property name="can_focus">False</property>
|
439
|
+
<property name="receives_default">False</property>
|
440
|
+
<property name="xalign">0</property>
|
441
|
+
<property name="draw_indicator">True</property>
|
442
|
+
</object>
|
443
|
+
<packing>
|
444
|
+
<property name="expand">False</property>
|
445
|
+
<property name="fill">True</property>
|
446
|
+
<property name="position">5</property>
|
447
|
+
</packing>
|
448
|
+
</child>
|
449
|
+
</object>
|
450
|
+
<packing>
|
451
|
+
<property name="expand">False</property>
|
452
|
+
<property name="fill">True</property>
|
453
|
+
<property name="position">3</property>
|
454
|
+
</packing>
|
455
|
+
</child>
|
456
|
+
</object>
|
457
|
+
</child>
|
458
|
+
</object>
|
459
|
+
<object class="GtkImage" id="first_img">
|
460
|
+
<property name="visible">True</property>
|
461
|
+
<property name="can_focus">False</property>
|
462
|
+
<property name="stock">gtk-goto-first</property>
|
463
|
+
</object>
|
464
|
+
<object class="GtkWindow" id="frame_window">
|
465
|
+
<property name="can_focus">False</property>
|
466
|
+
<child>
|
467
|
+
<object class="GtkBox" id="box1">
|
468
|
+
<property name="visible">True</property>
|
469
|
+
<property name="can_focus">False</property>
|
470
|
+
<property name="orientation">vertical</property>
|
471
|
+
<child>
|
472
|
+
<object class="GtkImage" id="frame_image">
|
473
|
+
<property name="visible">True</property>
|
474
|
+
<property name="can_focus">False</property>
|
475
|
+
<property name="stock">gtk-missing-image</property>
|
476
|
+
</object>
|
477
|
+
<packing>
|
478
|
+
<property name="expand">True</property>
|
479
|
+
<property name="fill">True</property>
|
480
|
+
<property name="position">0</property>
|
481
|
+
</packing>
|
482
|
+
</child>
|
483
|
+
<child>
|
484
|
+
<object class="GtkBox" id="box2">
|
485
|
+
<property name="visible">True</property>
|
486
|
+
<property name="can_focus">False</property>
|
487
|
+
<child>
|
488
|
+
<object class="GtkLabel" id="label1">
|
489
|
+
<property name="visible">True</property>
|
490
|
+
<property name="can_focus">False</property>
|
491
|
+
<property name="label" translatable="yes">Delay</property>
|
492
|
+
</object>
|
493
|
+
<packing>
|
494
|
+
<property name="expand">False</property>
|
495
|
+
<property name="fill">True</property>
|
496
|
+
<property name="position">0</property>
|
497
|
+
</packing>
|
498
|
+
</child>
|
499
|
+
<child>
|
500
|
+
<object class="GtkSpinButton" id="spinbutton1">
|
501
|
+
<property name="visible">True</property>
|
502
|
+
<property name="can_focus">False</property>
|
503
|
+
<property name="invisible_char">•</property>
|
504
|
+
</object>
|
505
|
+
<packing>
|
506
|
+
<property name="expand">True</property>
|
507
|
+
<property name="fill">True</property>
|
508
|
+
<property name="position">1</property>
|
509
|
+
</packing>
|
510
|
+
</child>
|
511
|
+
<child>
|
512
|
+
<object class="GtkLabel" id="label2">
|
513
|
+
<property name="visible">True</property>
|
514
|
+
<property name="can_focus">False</property>
|
515
|
+
<property name="label" translatable="yes">ms</property>
|
516
|
+
</object>
|
517
|
+
<packing>
|
518
|
+
<property name="expand">False</property>
|
519
|
+
<property name="fill">True</property>
|
520
|
+
<property name="position">2</property>
|
521
|
+
</packing>
|
522
|
+
</child>
|
523
|
+
<child>
|
524
|
+
<object class="GtkButton" id="button1">
|
525
|
+
<property name="label">gtk-delete</property>
|
526
|
+
<property name="visible">True</property>
|
527
|
+
<property name="can_focus">False</property>
|
528
|
+
<property name="receives_default">True</property>
|
529
|
+
<property name="use_stock">True</property>
|
530
|
+
</object>
|
531
|
+
<packing>
|
532
|
+
<property name="expand">False</property>
|
533
|
+
<property name="fill">True</property>
|
534
|
+
<property name="position">3</property>
|
535
|
+
</packing>
|
536
|
+
</child>
|
537
|
+
</object>
|
538
|
+
<packing>
|
539
|
+
<property name="expand">False</property>
|
540
|
+
<property name="fill">True</property>
|
541
|
+
<property name="position">1</property>
|
542
|
+
</packing>
|
543
|
+
</child>
|
544
|
+
</object>
|
545
|
+
</child>
|
546
|
+
</object>
|
547
|
+
<object class="GtkImage" id="last_img">
|
548
|
+
<property name="visible">True</property>
|
549
|
+
<property name="can_focus">False</property>
|
550
|
+
<property name="stock">gtk-goto-last</property>
|
551
|
+
</object>
|
552
|
+
<object class="GtkImage" id="next_img">
|
553
|
+
<property name="visible">True</property>
|
554
|
+
<property name="can_focus">False</property>
|
555
|
+
<property name="stock">gtk-go-forward</property>
|
556
|
+
</object>
|
557
|
+
<object class="GtkImage" id="play_img">
|
558
|
+
<property name="visible">True</property>
|
559
|
+
<property name="can_focus">False</property>
|
560
|
+
<property name="stock">gtk-media-play</property>
|
561
|
+
</object>
|
562
|
+
<object class="GtkImage" id="previous_img">
|
563
|
+
<property name="visible">True</property>
|
564
|
+
<property name="can_focus">False</property>
|
565
|
+
<property name="stock">gtk-go-back</property>
|
566
|
+
</object>
|
567
|
+
</interface>
|