rabbit 3.0.4 → 4.0.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 +4 -4
- data/Gemfile +1 -0
- data/Rakefile +53 -7
- data/data/locale/ja/LC_MESSAGES/rabbit.mo +0 -0
- data/doc/_config.yml +2 -2
- data/doc/en/news.rd +69 -1
- data/doc/ja/news.rd +68 -0
- data/lib/rabbit/actions.rb +446 -0
- data/lib/rabbit/author-configuration.rb +7 -10
- data/lib/rabbit/canvas.rb +74 -42
- data/lib/rabbit/command/rabbit-slide.rb +11 -13
- data/lib/rabbit/command/rabbit-theme.rb +10 -12
- data/lib/rabbit/command/rabbit.rb +31 -43
- data/lib/rabbit/console.rb +20 -22
- data/lib/rabbit/dependency-canvas.rb +2 -2
- data/lib/rabbit/element/base.rb +93 -6
- data/lib/rabbit/element/block-element.rb +17 -1
- data/lib/rabbit/element/block.rb +17 -1
- data/lib/rabbit/element/container-element.rb +59 -3
- data/lib/rabbit/element/description-list.rb +18 -2
- data/lib/rabbit/element/enum-list.rb +18 -2
- data/lib/rabbit/element/footnote.rb +18 -2
- data/lib/rabbit/element/image-title-slide.rb +17 -1
- data/lib/rabbit/element/image.rb +32 -2
- data/lib/rabbit/element/index-slide.rb +29 -13
- data/lib/rabbit/element/item-list.rb +18 -2
- data/lib/rabbit/element/method-list.rb +18 -2
- data/lib/rabbit/element/poppler-page.rb +17 -1
- data/lib/rabbit/element/poppler-slide.rb +18 -2
- data/lib/rabbit/element/poppler-title-slide.rb +18 -2
- data/lib/rabbit/element/preformatted.rb +18 -2
- data/lib/rabbit/element/slide-element.rb +29 -2
- data/lib/rabbit/element/slide.rb +18 -2
- data/lib/rabbit/element/syntax-highlighting.rb +17 -1
- data/lib/rabbit/element/table.rb +19 -3
- data/lib/rabbit/element/tag.rb +18 -2
- data/lib/rabbit/element/text-block-element.rb +18 -2
- data/lib/rabbit/element/text-container-element.rb +41 -2
- data/lib/rabbit/element/text-element.rb +17 -1
- data/lib/rabbit/element/text-renderer.rb +17 -1
- data/lib/rabbit/element/text.rb +4 -4
- data/lib/rabbit/element/title-slide.rb +19 -3
- data/lib/rabbit/element/video.rb +157 -56
- data/lib/rabbit/element.rb +20 -20
- data/lib/rabbit/formatter.rb +18 -1
- data/lib/rabbit/frame.rb +102 -90
- data/lib/rabbit/front.rb +11 -4
- data/lib/rabbit/gem-finder.rb +4 -8
- data/lib/rabbit/gem-pusher.rb +4 -4
- data/lib/rabbit/gesture/handler.rb +26 -21
- data/lib/rabbit/graffiti/config-dialog.rb +18 -2
- data/lib/rabbit/graffiti/processor.rb +20 -4
- data/lib/rabbit/gtk.rb +48 -14
- data/lib/rabbit/html/generator.rb +18 -18
- data/{test/helper/fixture.rb → lib/rabbit/icon.rb} +16 -6
- data/lib/rabbit/image/base.rb +7 -6
- data/lib/rabbit/image/default.rb +17 -1
- data/lib/rabbit/image/dia.rb +2 -2
- data/lib/rabbit/image/eps.rb +16 -2
- data/lib/rabbit/image/gimp.rb +28 -11
- data/lib/rabbit/image/mermaid.rb +3 -3
- data/lib/rabbit/image/pdf.rb +3 -3
- data/lib/rabbit/image/svg.rb +2 -2
- data/lib/rabbit/image.rb +8 -8
- data/lib/rabbit/info-window.rb +55 -18
- data/lib/rabbit/key-handler.rb +381 -0
- data/lib/rabbit/keys.rb +31 -2
- data/lib/rabbit/logger/base.rb +17 -1
- data/lib/rabbit/logger/gui.rb +20 -4
- data/lib/rabbit/logger/stderr.rb +16 -2
- data/lib/rabbit/logger.rb +4 -4
- data/lib/rabbit/menu.rb +200 -220
- data/lib/rabbit/parser/base.rb +17 -1
- data/lib/rabbit/parser/ext/aafigure.rb +17 -1
- data/lib/rabbit/parser/ext/blockdiag.rb +17 -1
- data/lib/rabbit/parser/ext/charty.rb +2 -2
- data/lib/rabbit/parser/ext/coderay.rb +20 -4
- data/lib/rabbit/parser/ext/enscript.rb +31 -15
- data/lib/rabbit/parser/ext/entity.rb +17 -1
- data/lib/rabbit/parser/ext/image.rb +6 -6
- data/lib/rabbit/parser/ext/inline.rb +17 -1
- data/lib/rabbit/parser/ext/rouge.rb +7 -4
- data/lib/rabbit/parser/ext/tex.rb +18 -2
- data/lib/rabbit/parser/ext/video.rb +4 -4
- data/lib/rabbit/parser/image.rb +20 -4
- data/lib/rabbit/parser/markdown/converter.rb +12 -13
- data/lib/rabbit/parser/markdown.rb +18 -2
- data/lib/rabbit/parser/pause-support.rb +1 -0
- data/lib/rabbit/parser/pdf.rb +3 -3
- data/lib/rabbit/parser/rd/ext/base.rb +20 -4
- data/lib/rabbit/parser/rd/ext/block-verbatim.rb +24 -28
- data/lib/rabbit/parser/rd/ext/character-reference.rb +18 -2
- data/lib/rabbit/parser/rd/ext/image.rb +3 -3
- data/lib/rabbit/parser/rd/ext/inline-verbatim.rb +6 -6
- data/lib/rabbit/parser/rd/ext/refer.rb +18 -2
- data/lib/rabbit/parser/rd/ext/video.rb +19 -2
- data/lib/rabbit/parser/rd/rd2rabbit-lib.rb +24 -8
- data/lib/rabbit/parser/rd/rt/rt2rabbit-lib.rb +18 -2
- data/lib/rabbit/parser/rd/visitor.rb +18 -2
- data/lib/rabbit/parser/rd.rb +18 -2
- data/lib/rabbit/parser/wiki/output.rb +25 -28
- data/lib/rabbit/parser/wiki.rb +18 -2
- data/lib/rabbit/parser.rb +8 -6
- data/lib/rabbit/path-manipulatable.rb +4 -4
- data/lib/rabbit/progress.rb +17 -1
- data/lib/rabbit/properties.rb +3 -3
- data/lib/rabbit/rabbit.rb +15 -7
- data/lib/rabbit/readme-parser.rb +4 -6
- data/lib/rabbit/renderer/base.rb +44 -36
- data/lib/rabbit/renderer/color.rb +18 -2
- data/lib/rabbit/renderer/display/base.rb +10 -12
- data/lib/rabbit/renderer/display/button-handler.rb +141 -60
- data/lib/rabbit/renderer/display/cursor.rb +4 -5
- data/lib/rabbit/renderer/display/drawing-area-base.rb +32 -48
- data/lib/rabbit/renderer/display/drawing-area-primitive.rb +10 -61
- data/lib/rabbit/renderer/display/drawing-area-view-only.rb +19 -8
- data/lib/rabbit/renderer/display/drawing-area.rb +19 -15
- data/lib/rabbit/renderer/display/gesture.rb +9 -9
- data/lib/rabbit/renderer/display/graffiti.rb +22 -13
- data/lib/rabbit/renderer/display/info.rb +22 -2
- data/lib/rabbit/renderer/display/magnifier.rb +30 -17
- data/lib/rabbit/renderer/display/mask.rb +17 -1
- data/lib/rabbit/renderer/display/menu.rb +27 -3
- data/lib/rabbit/renderer/display/motion-handler.rb +45 -0
- data/lib/rabbit/renderer/display/progress.rb +17 -2
- data/lib/rabbit/renderer/display/scroll-handler.rb +60 -13
- data/lib/rabbit/renderer/display/search.rb +19 -2
- data/lib/rabbit/renderer/display/spotlight.rb +39 -25
- data/lib/rabbit/renderer/display.rb +16 -36
- data/lib/rabbit/renderer/engine/cairo.rb +4 -11
- data/lib/rabbit/renderer/engine.rb +17 -1
- data/lib/rabbit/renderer/kernel.rb +2 -20
- data/lib/rabbit/renderer/offscreen.rb +8 -14
- data/lib/rabbit/renderer/print-layout.rb +2 -2
- data/lib/rabbit/renderer/printer.rb +9 -16
- data/lib/rabbit/renderer/scene-background-widget.rb +95 -0
- data/lib/rabbit/renderer/scene-node-widget.rb +63 -0
- data/lib/rabbit/renderer/scene.rb +508 -0
- data/lib/rabbit/renderer.rb +6 -6
- data/lib/rabbit/search-window.rb +18 -2
- data/lib/rabbit/searcher.rb +15 -1
- data/lib/rabbit/size.rb +9 -1
- data/lib/rabbit/slide-configuration.rb +11 -14
- data/lib/rabbit/soap/driver.rb +20 -4
- data/lib/rabbit/soap/server.rb +17 -1
- data/lib/rabbit/source/argf.rb +5 -5
- data/lib/rabbit/source/base.rb +5 -6
- data/lib/rabbit/source/file.rb +5 -5
- data/lib/rabbit/source/memory.rb +20 -4
- data/lib/rabbit/source/uri.rb +9 -11
- data/lib/rabbit/source-generator/hiki.rb +2 -7
- data/lib/rabbit/source-generator/markdown.rb +2 -7
- data/lib/rabbit/source-generator/rd.rb +2 -7
- data/lib/rabbit/source-generator.rb +4 -4
- data/lib/rabbit/source.rb +5 -5
- data/lib/rabbit/task/slide.rb +13 -11
- data/lib/rabbit/task/theme.rb +8 -11
- data/lib/rabbit/task.rb +3 -3
- data/lib/rabbit/theme/applier.rb +27 -11
- data/lib/rabbit/theme/clear-blue/clear-blue.rb +1 -1
- data/lib/rabbit/theme/color-circle/color-circle.rb +18 -1
- data/lib/rabbit/theme/cozmixng/cozmixng.rb +1 -1
- data/lib/rabbit/theme/default/default.rb +1 -0
- data/lib/rabbit/theme/default-icon/default-icon.rb +1 -1
- data/lib/rabbit/theme/default-item-mark-setup/default-item-mark-setup.rb +17 -1
- data/lib/rabbit/theme/default-preformatted/default-preformatted.rb +9 -1
- data/lib/rabbit/theme/enishi-green/enishi-green.rb +1 -1
- data/lib/rabbit/theme/entry.rb +10 -12
- data/lib/rabbit/theme/icon/icon.rb +3 -8
- data/lib/rabbit/theme/image-slide-number/image-slide-number.rb +5 -5
- data/lib/rabbit/theme/image-timer/image-timer.rb +3 -3
- data/lib/rabbit/theme/lightning-simple/lightning-simple.rb +1 -0
- data/lib/rabbit/theme/lightning-talk/lightning-talk.rb +1 -0
- data/lib/rabbit/theme/manager.rb +19 -9
- data/lib/rabbit/theme/rabbit-icon/rabbit-icon.rb +1 -1
- data/lib/rabbit/theme/ranguba/ranguba.rb +1 -1
- data/lib/rabbit/theme/red-frame/red-frame.rb +6 -2
- data/lib/rabbit/theme/ruby-gnome2/ruby-gnome2.rb +1 -0
- data/lib/rabbit/theme/ruby-gnome2-icon/ruby-gnome2-icon.rb +1 -1
- data/lib/rabbit/theme/searcher.rb +23 -7
- data/lib/rabbit/theme/slide-number/slide-number.rb +1 -1
- data/lib/rabbit/theme/slide-show/slide-show.rb +1 -1
- data/lib/rabbit/theme/table/table.rb +2 -2
- data/lib/rabbit/theme/video/property.rb +3 -0
- data/lib/rabbit/theme/video/video.rb +5 -0
- data/lib/rabbit/theme-configuration.rb +9 -11
- data/lib/rabbit/utils.rb +12 -94
- data/lib/rabbit/version.rb +2 -2
- data/lib/rabbit/xmlrpc/client.rb +17 -1
- data/lib/rabbit/xmlrpc/server.rb +17 -1
- data/po/en/rabbit.edit.po +325 -317
- data/po/en/rabbit.po +61 -55
- data/po/fr/rabbit.edit.po +325 -317
- data/po/fr/rabbit.po +61 -55
- data/po/ja/rabbit.edit.po +346 -371
- data/po/ja/rabbit.po +83 -80
- data/rabbit.gemspec +4 -2
- data/sample/block-quote.rab +13 -0
- data/sample/description-list.rab +17 -0
- data/sample/mermaid.rab +16 -0
- data/sample/rabbit-en.hiki +0 -1
- data/sample/rabbit-en.md +0 -1
- data/sample/rabbit-en.rd +0 -1
- data/sample/rabbit.hiki +0 -1
- data/sample/rabbit.md +0 -1
- data/sample/rabbit.rd +0 -1
- data/sample/video.rab +17 -0
- metadata +33 -65
- data/lib/rabbit/action/basic.rb +0 -304
- data/lib/rabbit/action/radio.rb +0 -78
- data/lib/rabbit/action/toggle.rb +0 -82
- data/lib/rabbit/action.rb +0 -140
- data/lib/rabbit/renderer/display/gl.rb +0 -98
- data/lib/rabbit/renderer/display/key-handler.rb +0 -321
- data/lib/rabbit/renderer/gl.rb +0 -95
- data/lib/rabbit/renderer/screen.rb +0 -286
- data/lib/rabbit/renderer/widget/drawing-area.rb +0 -93
- data/lib/rabbit/stock.rb +0 -31
- data/lib/rabbit/trackball.rb +0 -228
- data/lib/rabbit/video-window.rb +0 -123
- data/test/command/test-rabbit.rb +0 -101
- data/test/helper/parser.rb +0 -48
- data/test/helper.rb +0 -24
- data/test/image/test-dia.rb +0 -54
- data/test/image/test-eps.rb +0 -41
- data/test/parser/test-markdown.rb +0 -360
- data/test/parser/test-rd.rb +0 -43
- data/test/parser/test-wiki.rb +0 -71
- data/test/run-test.rb +0 -27
- data/test/source-generator/test-hiki.rb +0 -68
- data/test/source-generator/test-markdown.rb +0 -67
- data/test/source-generator/test-rd.rb +0 -69
- data/test/test-applier.rb +0 -73
- data/test/test-author-configuration.rb +0 -37
- data/test/test-canvas.rb +0 -70
- data/test/test-color.rb +0 -51
- data/test/test-element.rb +0 -103
- data/test/test-readme-parser.rb +0 -160
- data/test/test-size.rb +0 -155
- data/test/test-slide-configuration.rb +0 -74
- data/test/test-source.rb +0 -122
- data/test/test-theme-configuration.rb +0 -47
- data/test/test-utils.rb +0 -64
@@ -0,0 +1,446 @@
|
|
1
|
+
# Copyright (C) 2005-2025 Sutou Kouhei <kou@cozmixng.org>
|
2
|
+
#
|
3
|
+
# This program is free software; you can redistribute it and/or modify
|
4
|
+
# it under the terms of the GNU General Public License as published by
|
5
|
+
# the Free Software Foundation; either version 2 of the License, or
|
6
|
+
# (at your option) any later version.
|
7
|
+
#
|
8
|
+
# This program is distributed in the hope that it will be useful,
|
9
|
+
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
10
|
+
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
11
|
+
# GNU General Public License for more details.
|
12
|
+
#
|
13
|
+
# You should have received a copy of the GNU General Public License along
|
14
|
+
# with this program; if not, write to the Free Software Foundation, Inc.,
|
15
|
+
# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
16
|
+
|
17
|
+
require_relative "icon"
|
18
|
+
|
19
|
+
module Rabbit
|
20
|
+
Action = Struct.new(:name,
|
21
|
+
:parameter_type,
|
22
|
+
:initial_state,
|
23
|
+
:update_state,
|
24
|
+
:update_enabled,
|
25
|
+
:label,
|
26
|
+
:icon,
|
27
|
+
:icon_name,
|
28
|
+
:activate) do
|
29
|
+
def update
|
30
|
+
gaction.state = ensure_variant(update_state.call) if update_state
|
31
|
+
gaction.enabled = update_enabled.call if update_enabled
|
32
|
+
end
|
33
|
+
|
34
|
+
def gaction
|
35
|
+
@gaction ||= build_gaction
|
36
|
+
end
|
37
|
+
|
38
|
+
def icon
|
39
|
+
self[:icon] || build_icon
|
40
|
+
end
|
41
|
+
|
42
|
+
private
|
43
|
+
def build_gaction
|
44
|
+
state = nil
|
45
|
+
if initial_state.nil?
|
46
|
+
state = update_state.call if update_state
|
47
|
+
else
|
48
|
+
state = initial_state
|
49
|
+
end
|
50
|
+
if state.nil?
|
51
|
+
gaction = Gio::SimpleAction.new(name, parameter_type)
|
52
|
+
else
|
53
|
+
state = ensure_variant(state)
|
54
|
+
gaction = Gio::SimpleAction.new(name, parameter_type, state)
|
55
|
+
end
|
56
|
+
gaction.signal_connect("activate") do |_, parameter|
|
57
|
+
activate.call(self, parameter)
|
58
|
+
end
|
59
|
+
gaction
|
60
|
+
end
|
61
|
+
|
62
|
+
def ensure_variant(value)
|
63
|
+
return nil if value.nil?
|
64
|
+
return value if value.is_a?(GLib::Variant)
|
65
|
+
GLib::Variant.new(value, parameter_type)
|
66
|
+
end
|
67
|
+
|
68
|
+
def build_icon
|
69
|
+
return nil if icon_name.nil?
|
70
|
+
Gio::ThemedIcon.new(icon_name)
|
71
|
+
end
|
72
|
+
end
|
73
|
+
|
74
|
+
class Actions
|
75
|
+
include GetText
|
76
|
+
|
77
|
+
attr_reader :group
|
78
|
+
def initialize(canvas)
|
79
|
+
@canvas = canvas
|
80
|
+
@actions = {}
|
81
|
+
@group = Gio::SimpleActionGroup.new
|
82
|
+
|
83
|
+
build_move_actions
|
84
|
+
build_output_actions
|
85
|
+
build_window_actions
|
86
|
+
build_theme_actions
|
87
|
+
build_view_actions
|
88
|
+
build_graffiti_actions
|
89
|
+
build_content_actions
|
90
|
+
build_hole_actions
|
91
|
+
build_search_actions
|
92
|
+
build_log_level_actions
|
93
|
+
build_quit_actions
|
94
|
+
end
|
95
|
+
|
96
|
+
def update_status
|
97
|
+
@actions.each_value(&:update)
|
98
|
+
end
|
99
|
+
|
100
|
+
def find_action(name)
|
101
|
+
@actions[name]
|
102
|
+
end
|
103
|
+
|
104
|
+
def [](name)
|
105
|
+
@group.lookup_action(name)
|
106
|
+
end
|
107
|
+
|
108
|
+
private
|
109
|
+
def guard
|
110
|
+
begin
|
111
|
+
yield
|
112
|
+
rescue Exception
|
113
|
+
Rabbit.logger.warn($!)
|
114
|
+
end
|
115
|
+
end
|
116
|
+
|
117
|
+
def build_action(name,
|
118
|
+
parameter_type: nil,
|
119
|
+
initial_state: nil,
|
120
|
+
update_state: nil,
|
121
|
+
update_enabled: nil,
|
122
|
+
label: nil,
|
123
|
+
icon: nil,
|
124
|
+
icon_name: nil)
|
125
|
+
parameter_type = GLib::VariantType.new(parameter_type) if parameter_type
|
126
|
+
activate = lambda do |action, parameter|
|
127
|
+
guard do
|
128
|
+
yield(action, parameter)
|
129
|
+
end
|
130
|
+
end
|
131
|
+
action = Action.new(name,
|
132
|
+
parameter_type,
|
133
|
+
initial_state,
|
134
|
+
update_state,
|
135
|
+
update_enabled,
|
136
|
+
label,
|
137
|
+
icon,
|
138
|
+
icon_name,
|
139
|
+
activate)
|
140
|
+
@actions[name] = action
|
141
|
+
@group.add_action(action.gaction)
|
142
|
+
end
|
143
|
+
|
144
|
+
def build_move_actions
|
145
|
+
build_action("Next",
|
146
|
+
update_enabled: lambda {@canvas.have_next?},
|
147
|
+
label: _("Next"),
|
148
|
+
icon_name: "go-next") do
|
149
|
+
@canvas.move_to_next_if_can
|
150
|
+
end
|
151
|
+
build_action("Previous",
|
152
|
+
update_enabled: lambda {@canvas.have_previous?},
|
153
|
+
label: _("Previous"),
|
154
|
+
icon_name: "go-previous") do
|
155
|
+
@canvas.move_to_previous_if_can
|
156
|
+
end
|
157
|
+
build_action("NextSlide",
|
158
|
+
update_enabled: lambda {@canvas.have_next_slide?},
|
159
|
+
label: _("Next slide"),
|
160
|
+
icon_name: "go-next") do
|
161
|
+
@canvas.move_to_next_if_can
|
162
|
+
end
|
163
|
+
build_action("PreviousSlide",
|
164
|
+
update_enabled: lambda {@canvas.have_previous_slide?},
|
165
|
+
label: _("Previous slide"),
|
166
|
+
icon_name: "go-previous") do
|
167
|
+
@canvas.move_to_previous_if_can
|
168
|
+
end
|
169
|
+
build_action("FirstSlide",
|
170
|
+
update_enabled: lambda {not @canvas.first_slide?},
|
171
|
+
label: _("First slide"),
|
172
|
+
icon_name: "go-first") do
|
173
|
+
@canvas.move_to_first
|
174
|
+
end
|
175
|
+
build_action("LastSlide",
|
176
|
+
update_enabled: lambda {not @canvas.last_slide?},
|
177
|
+
label: _("Last slide"),
|
178
|
+
icon_name: "go-last") do
|
179
|
+
@canvas.move_to_last
|
180
|
+
end
|
181
|
+
build_action("JumpToSlide",
|
182
|
+
parameter_type: "i",
|
183
|
+
label: _("Jump to slide"),
|
184
|
+
icon_name: "go-jump") do |action, index|
|
185
|
+
@canvas.move_to_if_can(index)
|
186
|
+
end
|
187
|
+
build_action("JumpToRelativeSlide",
|
188
|
+
parameter_type: "i",
|
189
|
+
label: _("Jump to relative slide"),
|
190
|
+
icon_name: "go-jump") do |action, index|
|
191
|
+
@canvas.move_to_if_can(@canvas.current_index + index)
|
192
|
+
end
|
193
|
+
end
|
194
|
+
|
195
|
+
def build_output_actions
|
196
|
+
build_action("SaveAsImage",
|
197
|
+
update_enabled: lambda {not @canvas.processing?},
|
198
|
+
label: _("Save as image"),
|
199
|
+
icon_name: "document-save") do
|
200
|
+
@canvas.save_as_image
|
201
|
+
end
|
202
|
+
build_action("Print",
|
203
|
+
update_enabled: lambda {not @canvas.processing?},
|
204
|
+
label: _("Print"),
|
205
|
+
icon_name: "document-print") do
|
206
|
+
@canvas.print
|
207
|
+
end
|
208
|
+
end
|
209
|
+
|
210
|
+
def build_window_actions
|
211
|
+
build_action("Iconify",
|
212
|
+
update_state: lambda {false},
|
213
|
+
label: _("Iconify"),
|
214
|
+
icon: Icon.rabbit) do
|
215
|
+
@canvas.iconify
|
216
|
+
end
|
217
|
+
build_action("ToggleFullscreen",
|
218
|
+
update_enabled: lambda {not @canvas.applying?},
|
219
|
+
update_state: lambda {@canvas.fullscreen?},
|
220
|
+
label: _("Fullscreen"),
|
221
|
+
icon_name: "view-fullscreen") do
|
222
|
+
@canvas.toggle_fullscreen
|
223
|
+
end
|
224
|
+
end
|
225
|
+
|
226
|
+
def build_theme_actions
|
227
|
+
build_action("ChangeTheme",
|
228
|
+
parameter_type: "s",
|
229
|
+
update_enabled: lambda {not @canvas.applying?},
|
230
|
+
label: _("Change theme")) do |name|
|
231
|
+
@canvas.apply_theme(name)
|
232
|
+
end
|
233
|
+
build_action("MergeTheme",
|
234
|
+
parameter_type: "s",
|
235
|
+
update_enabled: lambda {not @canvas.applying?},
|
236
|
+
label: _("Merge theme")) do |name|
|
237
|
+
@canvas.merge_theme(name)
|
238
|
+
end
|
239
|
+
build_action("ReloadTheme",
|
240
|
+
update_enabled: lambda {not @canvas.applying?},
|
241
|
+
label: _("Reload theme"),
|
242
|
+
icon_name: "view-refresh") do
|
243
|
+
@canvas.reload_theme
|
244
|
+
end
|
245
|
+
end
|
246
|
+
|
247
|
+
def build_view_actions
|
248
|
+
build_action("Redraw",
|
249
|
+
label: _("Redraw"),
|
250
|
+
icon_name: "view-refresh") do
|
251
|
+
@canvas.redraw
|
252
|
+
end
|
253
|
+
build_action("CacheAllSlides",
|
254
|
+
update_enabled: lambda {not @canvas.processing?},
|
255
|
+
label: _("Cache all slides")) do
|
256
|
+
@canvas.cache_all_slides
|
257
|
+
end
|
258
|
+
build_action("ResetAdjustment",
|
259
|
+
label: _("Reset adjustment"),
|
260
|
+
icon_name: "edit-clear") do
|
261
|
+
@canvas.rest_adjustment
|
262
|
+
end
|
263
|
+
build_action("ResetTimer",
|
264
|
+
label: _("Reset timer"),
|
265
|
+
icon_name: "edit-clear") do
|
266
|
+
@canvas.reset_timer
|
267
|
+
end
|
268
|
+
build_action("ToggleSpotlight",
|
269
|
+
update_state: lambda {@canvas.spotlighting?},
|
270
|
+
label: _("Spotlight")) do |action|
|
271
|
+
@canvas.toggle_spotlight
|
272
|
+
action.update
|
273
|
+
end
|
274
|
+
build_action("ToggleMagnifier",
|
275
|
+
update_state: lambda {@canvas.magnifying?},
|
276
|
+
label: _("Magnifier")) do |action|
|
277
|
+
@canvas.toggle_magnifier
|
278
|
+
action.update
|
279
|
+
end
|
280
|
+
end
|
281
|
+
|
282
|
+
def graffiti_available?
|
283
|
+
@canvas.graffiti_mode? or @canvas.have_graffiti?
|
284
|
+
end
|
285
|
+
|
286
|
+
def build_graffiti_actions
|
287
|
+
build_action("ToggleGraffitiMode",
|
288
|
+
initial_state: false,
|
289
|
+
update_state: lambda {@canvas.graffiti_mode?},
|
290
|
+
label: _("Graffiti mode")) do |action|
|
291
|
+
@canvas.toggle_graffiti_mode
|
292
|
+
action.update
|
293
|
+
end
|
294
|
+
build_action("ClearGraffiti",
|
295
|
+
update_enabled: lambda {graffiti_available?},
|
296
|
+
label: _("Clear graffiti"),
|
297
|
+
icon_name: "edit-clear") do
|
298
|
+
@canvas.clear_graffiti
|
299
|
+
end
|
300
|
+
build_action("UndoGraffiti",
|
301
|
+
update_enabled: lambda {graffiti_available?},
|
302
|
+
label: _("Undo graffiti"),
|
303
|
+
icon_name: "edit-undo") do
|
304
|
+
@canvas.undo_graffiti
|
305
|
+
end
|
306
|
+
build_action("ChangeGraffitiColor",
|
307
|
+
update_enabled: lambda {graffiti_available?},
|
308
|
+
label: _("Change graffiti color")) do
|
309
|
+
@canvas.change_graffiti_color
|
310
|
+
end
|
311
|
+
end
|
312
|
+
|
313
|
+
def build_content_actions
|
314
|
+
build_action("ClearSlide",
|
315
|
+
label: _("Clear slide"),
|
316
|
+
icon_name: "edit-clear") do
|
317
|
+
@canvas.clear_slide
|
318
|
+
end
|
319
|
+
build_action("ToggleIndexMode",
|
320
|
+
update_enabled: lambda {not @canvas.processing?},
|
321
|
+
update_state: lambda {@canvas.index_mode?},
|
322
|
+
label: _("Index mode")) do |action|
|
323
|
+
@canvas.toggle_index_mode
|
324
|
+
action.update
|
325
|
+
end
|
326
|
+
build_action("ToggleInfoWindow",
|
327
|
+
update_state: lambda {@canvas.info_window_showing?},
|
328
|
+
label: _("Information window")) do |action|
|
329
|
+
@canvas.toggle_info_window
|
330
|
+
action.update
|
331
|
+
end
|
332
|
+
build_action("ToggleTerminal",
|
333
|
+
update_state: lambda {@canvas.in_terminal?},
|
334
|
+
label: _("Terminal")) do
|
335
|
+
@canvas.toggle_terminal
|
336
|
+
end
|
337
|
+
build_action("ChangeBlankMode",
|
338
|
+
parameter_type: "s",
|
339
|
+
initial_state: "show",
|
340
|
+
label: _("Change blank mode")) do |action, parameter|
|
341
|
+
case parameter
|
342
|
+
when "show"
|
343
|
+
if @canvas.whiteouting?
|
344
|
+
@canvas.toggle_whiteout
|
345
|
+
elsif @canvas.blackouting?
|
346
|
+
@canvas.toggle_blackout
|
347
|
+
end
|
348
|
+
when "whiteout"
|
349
|
+
@canvas.toggle_whiteout
|
350
|
+
when "blackout"
|
351
|
+
@canvas.toggle_blackout
|
352
|
+
end
|
353
|
+
action.gaction.change_state(GLib::Variant.new(parameter))
|
354
|
+
end
|
355
|
+
build_action("ToggleWhiteout",
|
356
|
+
update_state: lambda {@canvas.whiteouting?},
|
357
|
+
label: _("Whiteout")) do
|
358
|
+
if @canvas.whiteouting?
|
359
|
+
self["ChangeBlankMode"].activate("show")
|
360
|
+
else
|
361
|
+
self["ChangeBlankMode"].activate("whiteout")
|
362
|
+
end
|
363
|
+
end
|
364
|
+
build_action("ToggleBlackout",
|
365
|
+
update_state: lambda {@canvas.blackouting?},
|
366
|
+
label: _("Blackout")) do
|
367
|
+
if @canvas.blackouting?
|
368
|
+
self["ChangeBlankMode"].activate("show")
|
369
|
+
else
|
370
|
+
self["ChangeBlankMode"].activate("blackout")
|
371
|
+
end
|
372
|
+
end
|
373
|
+
end
|
374
|
+
|
375
|
+
def build_hole_actions
|
376
|
+
build_action("ExpandHole",
|
377
|
+
label: _("Expand hole")) do
|
378
|
+
@canvas.expand_hole
|
379
|
+
end
|
380
|
+
build_action("NarrowHole",
|
381
|
+
label: _("Narrow hole")) do
|
382
|
+
@canvas.narrow_hole
|
383
|
+
end
|
384
|
+
end
|
385
|
+
|
386
|
+
def build_search_actions
|
387
|
+
build_action("SearchSlideForward",
|
388
|
+
update_enabled: lambda {not @canvas.searching?},
|
389
|
+
label: _("Search slide forward"),
|
390
|
+
icon_name: "system-search") do
|
391
|
+
@canvas.search_slide(true)
|
392
|
+
update_status
|
393
|
+
end
|
394
|
+
build_action("SearchSlideBackward",
|
395
|
+
update_enabled: lambda {not @canvas.searching?},
|
396
|
+
label: _("Search slide backward"),
|
397
|
+
icon_name: "system-search") do
|
398
|
+
@canvas.search_slide(false)
|
399
|
+
update_status
|
400
|
+
end
|
401
|
+
build_action("SearchSlideForwardNext",
|
402
|
+
update_enabled: lambda {@canvas.searching?},
|
403
|
+
label: _("Search slide forward next"),
|
404
|
+
icon_name: "system-search") do
|
405
|
+
@canvas.search_slide(true)
|
406
|
+
update_status
|
407
|
+
end
|
408
|
+
build_action("SearchSlideBackwardNext",
|
409
|
+
update_enabled: lambda {@canvas.searching?},
|
410
|
+
label: _("Search slide backward next"),
|
411
|
+
icon_name: "system-search") do
|
412
|
+
@canvas.search_slide(false)
|
413
|
+
update_status
|
414
|
+
end
|
415
|
+
build_action("StopSlideSearch",
|
416
|
+
update_enabled: lambda {@canvas.searching?},
|
417
|
+
label: _("Stop search slide"),
|
418
|
+
icon_name: "system-search") do
|
419
|
+
@canvas.stop_search_slide
|
420
|
+
update_status
|
421
|
+
end
|
422
|
+
end
|
423
|
+
|
424
|
+
def build_log_level_actions
|
425
|
+
initial_state = Logger::Severity.name(Rabbit.logger.level)
|
426
|
+
build_action("ChangeLogLevel",
|
427
|
+
parameter_type: "s",
|
428
|
+
initial_state: initial_state,
|
429
|
+
label: _("Change log level")) do |action, parameter|
|
430
|
+
Rabbit.logger.level = Logger::Severity.level(parameter)
|
431
|
+
action.gaction.change_state(GLib::Variant.new(parameter))
|
432
|
+
end
|
433
|
+
end
|
434
|
+
|
435
|
+
def build_quit_actions
|
436
|
+
build_action("Quit",
|
437
|
+
label: _("Quit"),
|
438
|
+
icon_name: "application-exit") do
|
439
|
+
if !@canvas.processing? or
|
440
|
+
@canvas.confirm(_("Now processing... Do you really quit?"))
|
441
|
+
@canvas.quit
|
442
|
+
end
|
443
|
+
end
|
444
|
+
end
|
445
|
+
end
|
446
|
+
end
|
@@ -1,4 +1,4 @@
|
|
1
|
-
# Copyright (C) 2012-
|
1
|
+
# Copyright (C) 2012-2025 Sutou Kouhei <kou@cozmixng.org>
|
2
2
|
#
|
3
3
|
# This program is free software; you can redistribute it and/or modify
|
4
4
|
# it under the terms of the GNU General Public License as published by
|
@@ -14,21 +14,18 @@
|
|
14
14
|
# with this program; if not, write to the Free Software Foundation, Inc.,
|
15
15
|
# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
16
16
|
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
require "rabbit/yaml-loader"
|
17
|
+
require_relative "path-manipulatable"
|
18
|
+
require_relative "rabbit"
|
19
|
+
require_relative "yaml-loader"
|
21
20
|
|
22
21
|
module Rabbit
|
23
22
|
class AuthorConfiguration
|
24
23
|
include GetText
|
25
24
|
include PathManipulatable
|
26
25
|
|
27
|
-
attr_accessor :logger
|
28
26
|
attr_accessor :name, :email, :markup_language
|
29
27
|
attr_accessor :rubygems_user, :slideshare_user, :speaker_deck_user
|
30
|
-
def initialize
|
31
|
-
@logger = logger || Logger.default
|
28
|
+
def initialize
|
32
29
|
clear
|
33
30
|
end
|
34
31
|
|
@@ -39,7 +36,7 @@ module Rabbit
|
|
39
36
|
merge!(conf)
|
40
37
|
rescue
|
41
38
|
format = _("Failed to read author configuration: %s: %s")
|
42
|
-
|
39
|
+
Rabbit.logger.error(format % [path, $!.message])
|
43
40
|
end
|
44
41
|
|
45
42
|
def save
|
@@ -49,7 +46,7 @@ module Rabbit
|
|
49
46
|
end
|
50
47
|
rescue
|
51
48
|
format = _("Failed to write author configuration: %s: %s")
|
52
|
-
|
49
|
+
Rabbit.logger.error(format % [path, $!.message])
|
53
50
|
end
|
54
51
|
|
55
52
|
def clear
|