@@ -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