# $Id: ViewAttachment.pm,v 1.2 2001/02/03 16:22:54 muhri Exp $
# -*- perl -*-
package Pronto::ViewAttachment;
use strict;
use SelfLoader;
1;
__DATA__
sub view_attachment {
  	my ($widget, $source, $type, $use_db) = @_;
  	my($window,$vbox,$type_entry,$command_entry,$icon_entry,$button,$button2,$hbox,$label,$sql,$query,@row,@command);
  	if($use_db eq 'y') {
  		$sql = "select id,mime,command,icon from mimetypes where mime=?";
  		$query = $main::conn->prepare($sql);
  		$query->execute($type);
  		if(@row=$query->fetchrow_array) {
    			@command = split(/ /,$row[2]); 
			if(-f $command[0]) {
				my $child;
				$row[2] =~ s/\%f/\"$source\"/g;
        			unless ($child = fork) {
  					die "cannot fork: $~" unless defined $child;
       					exec($row[2]);
        			}
			}
		else {
			&main::err_dialog(_("You must specify an executalbe that exists for "). $row[1]);
		}
		return 1;
  	}
  }
  	$window = new Gtk::Window("toplevel");
  	$window->set_position("mouse");
  	$window->set_title(_("View Attachment"));
  	$window->set_default_size('130','80');
  	$window->signal_connect("destroy" => sub{$window->destroy;});
  	$window->signal_connect("delete_event" => \&Gtk::false);
  	$vbox = new Gtk::VBox(1,1);
  	$window->add($vbox);
  	$vbox->show;
  	$hbox = new Gtk::HBox(0,0);
  	$vbox->pack_start($hbox,0,0,0);
  	$hbox->show;
  	$label = new Gtk::Label(_("Mime-Type:"));
  	$hbox->pack_start($label,0,0,0);
  	$label->show;
  	$type_entry = new Gtk::Entry();
       	$type_entry->set_text($type);
  	$hbox->pack_start($type_entry,0,0,0);
  	$type_entry->show;
       	$hbox = new Gtk::HBox(0,0);
  	$vbox->pack_start($hbox,0,0,0);
  	$hbox->show;
  	$label = new Gtk::Label(_("Command:"));
  	$hbox->pack_start($label,0,0,0);
  	$label->show;
  	$command_entry = new Gtk::Entry();
  	$hbox->pack_start($command_entry,0,0,0);
  	$command_entry->show;
  	$button=new Gtk::Button(_("Browse"));
  	$button->signal_connect("clicked" => \&init_browse_dlg, $command_entry, "attachment_command");
  	$button->set_usize(55,25);
  	$hbox->pack_start($button,0,0,0);
  	$button->show;
  	if($use_db eq 'y') {
  		$hbox = new Gtk::HBox(0,0);
  		$vbox->pack_start($hbox,0,0,0);
		$hbox->show;
        	$label = new Gtk::Label(_("Icon:"));
        	$hbox->pack_start($label,0,0,0);
        	$label->show;
       	 	$icon_entry = new Gtk::Entry();
        	$hbox->pack_start($icon_entry,0,0,0);
        	$icon_entry->show;
        	$button=new Gtk::Button(_("Browse"));
        	$button->signal_connect("clicked" => \&init_browse_dlg, $icon_entry, "attachment_icon");
        	$button->set_usize(55,25);
               	$hbox->pack_start($button,0,0,0);
  		$button->show;
  	}
  	$button = new Gtk::Button(_("Execute"));
  	$button->signal_connect('clicked' =>
        				sub {
	      				my $command = $command_entry->get_text();
	      				@command = split(/ /,$command);
              				if(-f $command[0]) {
						if($use_db eq 'y') {
						my $id = &main::newid("mimetypes",$main::conn);
						$sql = "insert into mimetypes (id,mime,command,icon)
							values (?,?,?,?)";
						$query = $main::conn->prepare($sql);
						$query->execute($id,$type,$command_entry->get_text(),$icon_entry->get_text());
						}
	               			$command =~ s/\%f/$source/g;
					my $child;
	               			unless ($child = fork) {
	                       			die "cannot fork: $~" unless defined $child;
	                       			exec("$command");
	               			}
	               			$window->destroy;
					}
        				});
  	$vbox->pack_start($button,0,0,0);
  	$button->show;
  	$window->show;
  	return 1;
}


sub init_browse_dlg {
	my ($widget, $entry, $dlg_type) = @_;
	my ($fs_window);
	$fs_window = new Gtk::FileSelection _("Choose Directory...");
	$fs_window->position(-mouse);
	$fs_window->signal_connect("destroy", sub {$fs_window->destroy;});
	$fs_window->signal_connect("delete_event" => \&Gtk::false);
	if($dlg_type eq "attachment_command") {
		$fs_window->set_title(_("Select Viewer ..."));
		$fs_window->ok_button->signal_connect("clicked", \&check_view_attachment, $fs_window, $entry);
	}elsif($dlg_type eq "attachment_icon") {
                $fs_window->set_title(_("Select Icon ..."));
                $fs_window->ok_button->signal_connect("clicked", \&check_icon_attachment, $fs_window, $entry);
      	}
	$fs_window->cancel_button->signal_connect("clicked", sub {$fs_window->destroy;});
	$fs_window->show;
	return 1;
}

sub check_view_attachment {
        my ($widget, $fs_window, $entry) = @_;
        if (-f $fs_window->get_filename) {
                $entry->set_text($fs_window->get_filename . " \%f");
                $fs_window->destroy;
                return 1;
        } else {
                &main::err_dialog(_("You must select a Viewer"));
                return 1;
        }
}

sub check_icon_attachment {
        my ($widget, $fs_window, $entry) = @_;
        if ((-f $fs_window->get_filename) && ($fs_window->get_filename =~ /(bmp|gif|jpg|jpeg|png)$/i)) {
                $entry->set_text($fs_window->get_filename());
                $fs_window->destroy;
                return 1;
        } else {
                &main::err_dialog(_("You must select a Icon"));
                return 1;
        }
}


syntax highlighted by Code2HTML, v. 0.9.1