Skip to content

Commit d57d2b2

Browse files
committed
Support GUI for --pdf
1 parent 7434b3e commit d57d2b2

1 file changed

Lines changed: 61 additions & 0 deletions

File tree

lib/rabbit/command/rabbit-slide.rb

Lines changed: 61 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -456,6 +456,25 @@ def apply_value(value)
456456
end
457457
end
458458

459+
class SlidePDFMapper < TextMapper
460+
private
461+
def valid?(value)
462+
if @data.markup_language == :pdf
463+
not value.empty?
464+
else
465+
value.empty?
466+
end
467+
end
468+
469+
def value
470+
@data.pdf
471+
end
472+
473+
def apply_value(value)
474+
@data.pdf = value
475+
end
476+
end
477+
459478
def show_gui
460479
require_relative "../gtk"
461480

@@ -498,6 +517,9 @@ def show_window(&on_success)
498517
mappers << add_width_widget(grid, nth_row)
499518
nth_row += 1
500519

520+
mappers << add_pdf_widget(grid, nth_row)
521+
nth_row += 1
522+
501523
nth_column = 0
502524
cancel_button = Gtk::Button.new(mnemonic: _("_Cancel"))
503525
cancel_button.signal_connect(:clicked) do
@@ -609,6 +631,45 @@ def add_width_widget(grid, nth_row)
609631
SlideWidthMapper.new(@data, widget)
610632
end
611633

634+
def add_source_dialog_filter(dialog, name, pattern)
635+
filter = Gtk::FileFilter.new
636+
filter.name = "#{name} (#{pattern})"
637+
filter.add_pattern(pattern)
638+
dialog.add_filter(filter)
639+
end
640+
641+
def add_pdf_widget(grid, nth_row)
642+
nth_column = 0
643+
label_widget = Gtk::Label.new("PDF")
644+
label_widget.halign = :end
645+
grid.attach(label_widget,
646+
nth_column, nth_row,
647+
1, 1)
648+
649+
nth_column += 1
650+
hbox_widget = Gtk::Box.new(:horizontal, 0)
651+
entry_widget = Gtk::Entry.new
652+
hbox_widget.pack_start(entry_widget, expand: true, fill: true, padding: 0)
653+
button_widget = Gtk::Button.new(label: "Open")
654+
button_widget.signal_connect("clicked") do
655+
dialog = Gtk::FileChooserDialog.new(:title => "Choose a PDF file",
656+
:action => :open,
657+
:buttons => [[Gtk::Stock::CANCEL, :cancel],
658+
[Gtk::Stock::OPEN, :accept]])
659+
dialog.set_filename(@data.pdf) if @data.pdf
660+
add_source_dialog_filter(dialog, "PDF files", "*.pdf")
661+
add_source_dialog_filter(dialog, "All files", "*")
662+
if dialog.run == Gtk::ResponseType::ACCEPT
663+
entry_widget.text = dialog.filename
664+
end
665+
dialog.destroy
666+
end
667+
hbox_widget.pack_start(button_widget, expand: false, fill: false, padding: 0)
668+
grid.attach(hbox_widget, nth_column, nth_row, 1, 1)
669+
670+
SlidePDFMapper.new(@data, label_widget, entry_widget)
671+
end
672+
612673
def validate
613674
@validation_errors = []
614675
validate_command

0 commit comments

Comments
 (0)