rabbit 3.0.5 → 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/data/locale/ja/LC_MESSAGES/rabbit.mo +0 -0
- data/doc/_config.yml +2 -2
- data/doc/en/news.rd +54 -0
- data/doc/ja/news.rd +54 -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 +6 -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 +1 -1
- data/lib/rabbit/xmlrpc/client.rb +17 -1
- data/lib/rabbit/xmlrpc/server.rb +17 -1
- data/po/en/rabbit.edit.po +324 -316
- data/po/en/rabbit.po +61 -55
- data/po/fr/rabbit.edit.po +324 -316
- data/po/fr/rabbit.po +61 -55
- data/po/ja/rabbit.edit.po +345 -370
- 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
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 4ac6e6479d10579f2f17e6ff0809ba4ff01197a59c619b4b0171be6bea72c17c
|
4
|
+
data.tar.gz: e881f8f9de691e4abbe120cde321be1825be1007d5e6785ef399f2449448872e
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 2cc3b854b072ac58a3bd6a98cb83329aa634aab6a287a6039339e21133949a5a78d42de41a7afdc751cfb213e1fe9105d4651863bcc572907ee44398a278d1eb
|
7
|
+
data.tar.gz: 8b99a01fb205d11ae6cd692e171576857837153d879b0aafc25b76cf0eae1337c06552327292d17c171e0cd6c3e3551281a99e9a881f06bf5b6d421db6a96f17
|
Binary file
|
data/doc/_config.yml
CHANGED
data/doc/en/news.rd
CHANGED
@@ -4,6 +4,60 @@ title: News
|
|
4
4
|
---
|
5
5
|
{% raw %}
|
6
6
|
|
7
|
+
== 4.0.0: 2025-08-18
|
8
|
+
|
9
|
+
GTK 4 support release!
|
10
|
+
|
11
|
+
GTK 4 support is still experimental. It still misses some
|
12
|
+
features. You can use it by (({RABBIT_GTK=4})) environment variable.
|
13
|
+
|
14
|
+
=== Improvements
|
15
|
+
|
16
|
+
==== rabbit
|
17
|
+
|
18
|
+
* GIMP: Add support for GIMP 3.0
|
19
|
+
|
20
|
+
* Rouge: Add support for attaching user properties.
|
21
|
+
|
22
|
+
* Preformatted: Add support for enabling/disabling auto size
|
23
|
+
computation per element.
|
24
|
+
|
25
|
+
Here is a RD example:
|
26
|
+
|
27
|
+
Disable:
|
28
|
+
|
29
|
+
# rouge ruby
|
30
|
+
# keep-in-size = false
|
31
|
+
|
32
|
+
variable = expression
|
33
|
+
|
34
|
+
Enable:
|
35
|
+
|
36
|
+
# rouge ruby
|
37
|
+
# keep-in-size = true
|
38
|
+
|
39
|
+
variable = expression
|
40
|
+
|
41
|
+
* Added support for GTK 4.
|
42
|
+
|
43
|
+
It's still experimental. It still misses some features. You can
|
44
|
+
use it by (({RABBIT_GTK=4})) environment variable.
|
45
|
+
|
46
|
+
You can embed video with GTK 4 support.
|
47
|
+
|
48
|
+
* Dropped support for window icon. It's not portable.
|
49
|
+
|
50
|
+
* Removed GtkGLExt based GL support.
|
51
|
+
|
52
|
+
==== rabbit-slide
|
53
|
+
|
54
|
+
* Use 1920x1080 by default.
|
55
|
+
|
56
|
+
* Use presentation date as the (({date})) gem metadata.
|
57
|
+
|
58
|
+
* Set markup language as the (({markup_language})) gem metadata to render
|
59
|
+
slide description in Rabbit Slide Show.
|
60
|
+
|
7
61
|
== 3.0.5: 2025-03-30
|
8
62
|
|
9
63
|
=== Improvements
|
data/doc/ja/news.rd
CHANGED
@@ -5,6 +5,60 @@ apply_data: false
|
|
5
5
|
---
|
6
6
|
{% raw %}
|
7
7
|
|
8
|
+
== 4.0.0: 2025-08-18
|
9
|
+
|
10
|
+
GTK 4をサポートしたリリース。
|
11
|
+
|
12
|
+
GTK 4サポートはまだ実験的な機能です。いくつかの機能はまだ実装されてい
|
13
|
+
ません。(({RABBIT_GTK=4}))環境変数を設定することで有効にできます。
|
14
|
+
|
15
|
+
=== 改良
|
16
|
+
|
17
|
+
==== rabbit
|
18
|
+
|
19
|
+
* GIMP: GIMP 3.0をサポート。
|
20
|
+
|
21
|
+
* Rouge: ユーザー指定のプロパティをサポート。
|
22
|
+
|
23
|
+
* フォーマット済みテキスト: 要素ごとに自動でサイズを計算するかどうか
|
24
|
+
の有効・無効を切り替えられるようになった。
|
25
|
+
|
26
|
+
RDでの例:
|
27
|
+
|
28
|
+
無効:
|
29
|
+
|
30
|
+
# rouge ruby
|
31
|
+
# keep-in-size = false
|
32
|
+
|
33
|
+
variable = expression
|
34
|
+
|
35
|
+
有効:
|
36
|
+
|
37
|
+
# rouge ruby
|
38
|
+
# keep-in-size = true
|
39
|
+
|
40
|
+
variable = expression
|
41
|
+
|
42
|
+
* GTK 4をサポート。
|
43
|
+
|
44
|
+
まだ実験的な機能です。いくつかの機能はまだ実装されてい
|
45
|
+
ません。(({RABBIT_GTK=4}))環境変数を設定することで有効にできます。
|
46
|
+
|
47
|
+
GTK 4サポートを有効にすると動画を埋め込むことができます。
|
48
|
+
|
49
|
+
* ウィンドウアイコンのサポートを削除。ポータブルではないため。
|
50
|
+
|
51
|
+
* GtkGLExtベースのGLサポートを削除。
|
52
|
+
|
53
|
+
==== rabbit-slide
|
54
|
+
|
55
|
+
* デフォルトで1920x1080を使うように変更。
|
56
|
+
|
57
|
+
* プレゼンテーションの日を(({date}))というgemのメタデータに設定。
|
58
|
+
|
59
|
+
* マークアップの言語を(({markup_language}))というgemのメタデータに設
|
60
|
+
定。これはRabbit Slide Showでスライドの説明を整形するため。
|
61
|
+
|
8
62
|
== 3.0.5: 2025-03-30
|
9
63
|
|
10
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
|