BioPerl

 view release on metacpan or  search on metacpan

examples/tk/gsequence.pl  view on Meta::CPAN


    $import_entry = new Gtk::Entry();
    my $frame = new Gtk::Frame("Enter here:");
    $frame->add($import_entry);
    $import_dialog->vbox->pack_start( $frame, $true, $true, 5);
    
    my $bbox = new Gtk::HButtonBox();
    $bbox->set_layout("end");
    
    $button = new Gtk::Button( "OK" );
    $bbox->add( $button );
    $button->signal_connect("clicked",
           # OK button handler
           sub{ $import_dialog->hide();
		&seq_fetch();
	      });

    $button = new Gtk::Button( "Cancel" );
    $bbox->add( $button );
    $button->signal_connect("clicked",
           # close button handler
           sub{ $import_dialog->hide();
	      });

    $import_dialog->action_area->pack_start( $bbox, $true, $true, 0 );

    $import_dialog->signal_connect_after( "delete_event",
           # window delete handler
           sub{ $import_dialog->hide();
                return &Gtk::true;
	      });
}

sub open_dialog
{
    # Create a new file selection widget
    my $open_dialog = new Gtk::FileSelection( "Open File..." );
    # Connect the ok_button to open_ok_sel function
    $open_dialog->ok_button->signal_connect( "clicked",
					     \&ok_open_dialog,
					     $open_dialog );
    # Connect the cancel_button to destroy the widget
    $open_dialog->cancel_button->signal_connect( "clicked",
						 sub { $open_dialog->destroy(); } );
    $open_dialog->show();
}

# Get the selected filename
sub ok_open_dialog
  {
    my ( $widget, $file_selection ) = @_;
    push @filename, $file_selection->get_filename();

    $widget->parent->parent->parent->destroy();

    my $in = Bio::SeqIO->new(-file => $filename[-1] , '-format' => 'swiss');

    &new_seq_page($in->next_seq());
}

sub update_seq_data
{    
    $main_label[$current]->set_text($seq[$current]->id) if (defined($seq[$current]));
    $main_label[$current]->set_text("<New>") if (!defined($seq[$current]));

    $seq_edit[$current]->freeze();
    $seq_edit[$current]->delete_text(0,-1);
    $seq_edit[$current]->insert(undef,undef,undef,$seq[$current]->seq()) if (defined($seq[$current]));
    $seq_edit[$current]->thaw();

    &update_comment_window();
    &update_description_window();
    &update_seqstats_window();
    &update_dblink_window();
    &update_reference_window();
    &update_feature_window();
}

sub new
{
    &new_seq_page(undef);
}

sub close
{
}

sub save
{
    if (!defined($filename[$current])||!$filename[$current])
    {
	&saveas_dialog;
	return;
    }
    my $out = Bio::SeqIO->new(-file => ">$filename[$current]" , '-format' => 'swiss');
    $out->write_seq($seq[$current]);
}

sub saveas_dialog
{
    # Create a new file selection widget
    my $saveas_dialog = new Gtk::FileSelection( "Save As..." );
    # Connect the ok_button to saveas_ok_sel function
    $saveas_dialog->ok_button->signal_connect( "clicked",
					       \&ok_saveas_dialog,
					       $saveas_dialog );
    # Connect the cancel_button to destroy the widget
    $saveas_dialog->cancel_button->signal_connect( "clicked",
						   sub { $saveas_dialog->destroy(); } );
    $saveas_dialog->show();
}

# Get the selected filename and print it to the console
sub ok_saveas_dialog
  {
    my ( $widget, $file_selection ) = @_;
    my $filename = $file_selection->get_filename();
    $widget->parent->parent->parent->destroy();
    $filename[$current] = $filename;
    my $out = Bio::SeqIO->new(-file => ">$filename[$current]" , '-format' => 'swiss');
    $out->write_seq($seq[$current]);

examples/tk/gsequence.pl  view on Meta::CPAN

	   sub { return if !defined($seq[$current]);
		 &store_current_comment;
		 $current_comment-- 
		     if ($current_comment > 0);
		 &update_comment_window;
	       } );

    $button = new Gtk::Button("Add");
    $bbox->pack_start( $button, $false, $false, 0);
    $button->signal_connect( "clicked",
           # add comment button handler 
           sub { return if !defined($seq[$current]);
		 &store_current_comment;
		 my $comment = new Bio::Annotation::Comment;
		 $comment->text("");
		 $seq[$current]->annotation->add_Comment( $comment );
		 $current_comment = $seq[$current]->annotation->each_Comment - 1;
		 &update_comment_window;
	       } );

     $button = new Gtk::Button("Delete");
     $bbox->pack_start( $button, $false, $false, 0);
     $button->signal_connect( "clicked", 
           # delete comment button handler
           sub { return if !defined($seq[$current]); 
		 $seq[$current]->annotation->remove_Comment( $current_comment );
		 $current_comment = $current_comment - 1 
		     if ($current_comment > 0);
		 &update_comment_window;		 
	       } );

     $comment_window->vbox->pack_end( $bbox, $false, $false, 0);

     $bbox = new Gtk::HButtonBox();
     $bbox->set_layout("end");
	
     $button = new Gtk::Button( "Close" );
     $bbox->add( $button );
     $button->signal_connect("clicked",
           # close button handler
           sub{ $comment_window->hide();
		&store_current_comment;
	      });

     $comment_window->action_area->pack_start( $bbox, $true, $true, 0 );
     $comment_window->signal_connect_after( "delete_event",
           # window delete handler
           sub{ $comment_window->hide();
		&store_current_comment;
                return &Gtk::true;
	      });
}

sub store_current_comment
{
    (($seq[$current]->annotation->each_Comment)[$current_comment])->
	text($comment_edit->get_chars(0,-1) )
	    if ((defined($seq[$current])) && ($seq[$current]->annotation->each_Comment));
}

sub update_comment_window
{
    my ($show_me) = @_;
    $comment_frame->set_label("Comment[".$current_comment."]");
    # insert comment text
    $comment_edit->freeze();
    $comment_edit->delete_text(0,-1);
    if (defined($seq[$current]))
    {
	my @comment = $seq[$current]->annotation->each_Comment;
	$comment_edit->insert(undef,undef,undef, $comment[$current_comment]->text)
	    if (@comment);
    }
    $comment_edit->thaw();
    
    $comment_window->show_all() if (defined($show_me));
}

sub init_description_window
{
    $description_window = new Gtk::Dialog();
    $description_window->set_default_size(620,250);
    $description_window->border_width(5);
    $description_window->set_title("Description");
    
    # frame
    my $description_frame = new Gtk::Frame( "Description" );
    
    # text widget
    $description_edit = new Gtk::Text( undef, undef );
    $description_edit->set_editable( $true );
    $description_edit->set_word_wrap( $true );	
    
    # vertical scrollbar for text widget
    my $scrollbar;
    $scrollbar = new Gtk::VScrollbar( $description_edit->vadj );
    
    # horizontal box containing text widget and scrollbar
    my $hbox;
    $hbox = new Gtk::HBox( $false, 1 );
    $hbox->border_width( 1 );
    $hbox->pack_start( $description_edit, $true, $true, 0);
    $hbox->pack_end( $scrollbar, $false, $true, 0);
    $description_frame->add($hbox);
    $description_window->vbox->pack_start( $description_frame, $true, $true, 5);
    
    my $bbox = new Gtk::HButtonBox();
    $bbox->set_layout("end");
    
    my $button = new Gtk::Button( "Close" );
    $bbox->add( $button );
    $button->signal_connect("clicked",
           # close button handler
           sub{ $description_window->hide();
		$seq[$current]->desc($description_edit->get_chars(0,-1))
		    if $description_edit->get_chars(0,-1);
	      });

    $description_window->action_area->pack_start( $bbox, $true, $true, 0 );
    $description_window->signal_connect_after( "delete_event",
           # window delete handler
           sub{ $description_window->hide();
		$seq[$current]->desc($description_edit->get_chars(0,-1))
		    if $description_edit->get_chars(0,-1);
                return &Gtk::true;
	      });
}

sub update_description_window
{
    my ($show_me) = @_;
    $description_edit->freeze();
    $description_edit->delete_text(0,-1);
    $description_edit->insert(undef,undef,undef,$seq[$current]->desc)
	if defined($seq[$current]) && defined($seq[$current]->desc);
    $description_edit->thaw();
    
    $description_window->show_all() if (defined($show_me));
}

sub init_seqstats_window
{
    $seqstats_window = new Gtk::Dialog();
    $seqstats_window->border_width(5);
    $seqstats_window->set_default_size(100,250);
    $seqstats_window->set_title("Sequence Statistics");

    # frame
    my $seqstats_frame = new Gtk::Frame( "Sequence Statistics" );
    
    # text widget
    $seqstats_edit = new Gtk::Text( undef, undef );
    $seqstats_edit->set_editable( $false );
    $seqstats_edit->set_word_wrap( $true );
    
    # vertical scrollbar for text widget
    my $scrollbar;
    $scrollbar = new Gtk::VScrollbar( $seqstats_edit->vadj );
    
    # horizontal box containing text widget and scrollbar
    my $hbox;
    $hbox = new Gtk::HBox( $false, 1 );
    $hbox->border_width( 1 );
    $hbox->pack_start( $seqstats_edit, $true, $true, 0);
    $hbox->pack_end( $scrollbar, $false, $true, 0);
    $seqstats_frame->add($hbox);
    $seqstats_window->vbox->pack_start( $seqstats_frame, $true, $true, 5);
    
    my $bbox = new Gtk::HButtonBox();
    $bbox->set_layout("end");
    
    my $button = new Gtk::Button( "Close" );
    $bbox->add( $button );
    $button->signal_connect("clicked",
       # close button handler
       sub{ $seqstats_window->hide();
	  });
    
    $seqstats_window->action_area->pack_start( $bbox, $true, $true, 0 );
    $seqstats_window->signal_connect_after( "delete_event",
       # window delete handler
       sub{ $seqstats_window->hide();
	    return &Gtk::true;
	  });
}

sub update_seqstats_window
{
    my ($show_me) = @_;
    my ($data,$weight,$count_hash,$percent);

    $seqstats_edit->freeze();
    $seqstats_edit->delete_text(0,-1);
    if (defined($seq[$current]))
    {
	$data = $seq[$current]->id."\n\n";
	$weight = Bio::Tools::SeqStats->get_mol_wt($seq[$current]->primary_seq);
	if ($$weight[0] == $$weight[1]) {
	    $data .= "Molecular weight of sequence equals to ".$$weight[0]."\n\n";
	} else {
	    $data .= "Molecular weight of sequence is greater than ";
	    $data .= $$weight[0]." and less than ".$$weight[1]."\n\n";
	}
	$count_hash = Bio::Tools::SeqStats->count_monomers($seq[$current]->primary_seq);
	$data .= "Amino Acids:\n";
	foreach (sort keys %$count_hash)
	{
	    $percent = sprintf "%.1f",
	    (($$count_hash{$_} / $seq[$current]->length)*100);
	    $data .= "${_}: ".$$count_hash{$_}." (${percent}%) \n"
	    }
	$seqstats_edit->insert(undef,undef,undef,$data)
	}
    $seqstats_edit->thaw();
    
    $seqstats_window->show_all() if (defined($show_me));
}

sub init_dblink_window
{
    $current_dblink = 0;
    
    $dblink_window = new Gtk::Dialog();
    $dblink_window->set_default_size(500,400);
    $dblink_window->set_policy($true,$true,$false);
    $dblink_window->set_title("Database Links");
    $dblink_window->border_width(5);
    
    # Create a scrolled window to pack the CList widget into
    my $scrolled_window = new Gtk::ScrolledWindow( undef, undef );
    $dblink_window->vbox->pack_start( $scrolled_window, $true, $true, 0 );
    $scrolled_window->set_policy( 'automatic', 'always' );

    # Create the CList. For this example we use 2 columns
    $dblink_clist = new_with_titles Gtk::CList( "Primary Id","Database" );

    # When a selection is made, we want to know about it. The callback
    # used is selection_made, and its code can be found further down
    $dblink_handler_id = $dblink_clist->signal_connect( "select_row", 
       sub{ return if (!defined($seq[$current]));
	    my ( $clist, $row ) = @_;
	    &store_current_dblink;
	    $current_dblink = $row;
	    &update_dblink_window;
          } );

    # It isn't necessary to shadow the border, but it looks nice :)

examples/tk/gsequence.pl  view on Meta::CPAN

    $hbox->border_width( 1 );

    # text entries
    $dblink_entry[0] = new Gtk::Entry();
    my $frame = new Gtk::Frame("primary id");
    $frame->add($dblink_entry[0]);
    $hbox->pack_start( $frame, $true, $true, 0);

    $dblink_entry[1] = new Gtk::Entry();
    $frame = new Gtk::Frame("optional id");
    $frame->add($dblink_entry[1]);
    $hbox->pack_end( $frame, $true, $true, 0);

    $dblink_window->vbox->pack_start( $hbox, $false, $false, 5);

    $dblink_entry[2] = new Gtk::Entry();
    $frame = new Gtk::Frame("Database");
    $frame->add($dblink_entry[2]);
    $dblink_window->vbox->pack_start( $frame, $false, $false, 5);

    $dblink_entry[3] = new Gtk::Entry();
    $frame = new Gtk::Frame("Comment");
    $frame->add($dblink_entry[3]);
    $dblink_window->vbox->pack_end( $frame, $false, $false, 5);

     $bbox = new Gtk::HButtonBox();
     $bbox->set_layout("end");
	
     $button = new Gtk::Button( "Close" );
     $bbox->add( $button );
     $button->signal_connect("clicked",
           # close button handler
           sub{ $dblink_window->hide();
		&store_current_dblink;
	      });

     $dblink_window->action_area->pack_start( $bbox, $true, $true, 0 );
     $dblink_window->signal_connect_after( "delete_event",
           # window delete handler
           sub{ $dblink_window->hide();
		&store_current_dblink;
                return &Gtk::true;
	      });
}

sub store_current_dblink
{
    if ((defined($seq[$current])) && ($seq[$current]->annotation->each_DBLink))
    {
	(($seq[$current]->annotation->each_DBLink)[$current_dblink])->
	    primary_id($dblink_entry[0]->get_chars(0,-1) );		
	(($seq[$current]->annotation->each_DBLink)[$current_dblink])->
	    optional_id($dblink_entry[1]->get_chars(0,-1) );		
	(($seq[$current]->annotation->each_DBLink)[$current_dblink])->
	    database($dblink_entry[2]->get_chars(0,-1) );		
	(($seq[$current]->annotation->each_DBLink)[$current_dblink])->
	    comment($dblink_entry[3]->get_chars(0,-1) );		
    }
}

sub update_dblink_window
{
    my ($show_me) = @_;
    $dblink_window->show_all() if (defined($show_me));

    $dblink_clist->freeze();
    if (!defined($seq[$current]))
    {
	$dblink_clist->clear();
	$dblink_clist->thaw();
	foreach (@dblink_entry) { $_->set_text(""); }
	return;
    }
    my @dblinks = $seq[$current]->annotation->each_DBLink;
    # reset clist if rows are different to links
    if ($dblink_clist->rows != @dblinks) {
	$dblink_clist->clear();
	foreach (@dblinks) { $dblink_clist->append("",""); }
    }
    # redraw references
    for(my $i=0;$i<@dblinks;$i++)
    {
	$dblink_clist->set_text($i,0,$dblinks[$i]->primary_id);
	$dblink_clist->set_text($i,1,$dblinks[$i]->database);
    }
    # redraw text widgets
    foreach (@dblink_entry) { $_->set_text(""); }
    if (@dblinks)
    {
	$dblink_entry[0]->set_text($dblinks[$current_dblink]->primary_id);
	$dblink_entry[1]->set_text($dblinks[$current_dblink]->optional_id);
	$dblink_entry[2]->set_text($dblinks[$current_dblink]->database);
	$dblink_entry[3]->set_text($dblinks[$current_dblink]->comment);
    }

    $dblink_clist->moveto($current_dblink,0,0.3,0.0)
	if ($dblink_clist->row_is_visible($current_dblink) ne 'full');
    $dblink_clist->signal_handler_block($dblink_handler_id);
    $dblink_clist->select_row($current_dblink,0);
    $dblink_clist->signal_handler_unblock($dblink_handler_id);
    Gtk::CList::set_focus_row($dblink_clist,$current_dblink);
    $dblink_clist->thaw();
}

sub init_reference_window
{
    $current_ref = 0;
    
    $ref_window = new Gtk::Dialog();
    $ref_window->set_default_size(620,500);
    $ref_window->set_policy($true,$true,$false);
    $ref_window->set_title("References");
    $ref_window->border_width(5);
    
    # Create a scrolled window to pack the CList widget into
    my $scrolled_window = new Gtk::ScrolledWindow( undef, undef );
    $ref_window->vbox->pack_start( $scrolled_window, $true, $true, 0 );
    $scrolled_window->set_policy( 'automatic', 'always' );

    # Create the CList. For this example we use 2 columns
    $ref_clist = new_with_titles Gtk::CList( "Medline","Title","Authors" );

examples/tk/gsequence.pl  view on Meta::CPAN

    # text entries
    $ref_entry[4] = new Gtk::Entry();
    $frame = new Gtk::Frame("Medline");
    $frame->add($ref_entry[4]);
    $hbox->pack_start( $frame, $false, $false, 0);

#    $ref_entry[5] = new Gtk::Entry();
#    $frame = new Gtk::Frame("Start");
#    $frame->add($ref_entry[5]);
#    $hbox->pack_start( $frame, $false, $false, 0);

    $ref_entry[5] = new Gtk::Entry();
    $frame = new Gtk::Frame("Reference Position");
    $frame->add($ref_entry[5]);
    $hbox->pack_end( $frame, $true, $true, 0);

    $ref_window->vbox->pack_start( $hbox, $false, $false, 5);


     $bbox = new Gtk::HButtonBox();
     $bbox->set_layout("end");
	
     $button = new Gtk::Button( "Close" );
     $bbox->add( $button );
     $button->signal_connect("clicked",
           # close button handler
           sub{ $ref_window->hide();
		&store_current_reference;
	      });

     $ref_window->action_area->pack_start( $bbox, $true, $true, 0 );
     $ref_window->signal_connect_after( "delete_event",
           # window delete handler
           sub{ $ref_window->hide();
		&store_current_reference;
                return &Gtk::true;
	      });
}

sub store_current_reference
{
    if ((defined($seq[$current])) && ($seq[$current]->annotation->each_Reference))
    {
	(($seq[$current]->annotation->each_Reference)[$current_ref])->
	    title($ref_entry[0]->get_chars(0,-1) );		
	(($seq[$current]->annotation->each_Reference)[$current_ref])->
	    authors($ref_entry[1]->get_chars(0,-1) );		
	(($seq[$current]->annotation->each_Reference)[$current_ref])->
	    comment($ref_entry[2]->get_chars(0,-1) );		
	(($seq[$current]->annotation->each_Reference)[$current_ref])->
	    location($ref_entry[3]->get_chars(0,-1) );		
	(($seq[$current]->annotation->each_Reference)[$current_ref])->
	    medline($ref_entry[4]->get_chars(0,-1) );		
#	(($seq[$current]->annotation->each_Reference)[$current_ref])->
#	    start($ref_entry[5]->get_chars(0,-1) );		
	(($seq[$current]->annotation->each_Reference)[$current_ref])->
	    rp($ref_entry[5]->get_chars(0,-1) );		
    }
}

sub update_reference_window
{
    my ($show_me) = @_;
    $ref_window->show_all() if (defined($show_me));

    $ref_clist->freeze();
    if (!defined($seq[$current]))
    {
	$ref_clist->clear();
	$ref_clist->thaw();
	foreach (@ref_entry) { $_->set_text(""); }
	return;
    }
    my @refs = $seq[$current]->annotation->each_Reference;
    # reset clist if rows are different to references
    if ($ref_clist->rows != @refs) {
	$ref_clist->clear();
	foreach (@refs) { $ref_clist->append("","",""); }
    }
    # redraw references
    for(my $i=0;$i<@refs;$i++)
    {
	$ref_clist->set_text($i,0,$refs[$i]->medline)
	  if ($refs[$i]->medline);
	$ref_clist->set_text($i,1,$refs[$i]->title)
	  if ($refs[$i]->title);
	$ref_clist->set_text($i,2,$refs[$i]->authors)
	  if ($refs[$i]->authors);
    }
    # redraw text widgets
    foreach (@ref_entry) { $_->set_text(""); }
    if (@refs) {
	$ref_entry[0]->set_text($refs[$current_ref]->title);
	$ref_entry[1]->set_text($refs[$current_ref]->authors);
	$ref_entry[2]->set_text($refs[$current_ref]->comment);
	$ref_entry[3]->set_text($refs[$current_ref]->location);
	$ref_entry[4]->set_text($refs[$current_ref]->medline);
#	$ref_entry[5]->set_text($refs[$current_ref]->start);
	$ref_entry[5]->set_text($refs[$current_ref]->rp);
    }

    $ref_clist->moveto($current_ref,0,0.3,0.0)
	if ($ref_clist->row_is_visible($current_ref) ne 'full');
    $ref_clist->signal_handler_block($ref_handler_id);
    $ref_clist->select_row($current_ref,0);
    $ref_clist->signal_handler_unblock($ref_handler_id);
    Gtk::CList::set_focus_row($ref_clist,$current_ref);
    $ref_clist->thaw();
}


sub init_about_dialog {
 	my ($window,$bg,$tbox,$vbox,$hbox,$sep,$butbox,$button,$pixmap);
 	$about_dialog = new Gtk::Window("dialog");
 	$about_dialog->set_title("About gSequence");
 	$about_dialog->signal_connect_after("destroy" => 
					    sub { $about_dialog->hide; 
					          return &Gtk::true; });
 	$about_dialog->set_default_size('350','350');
 	$about_dialog->set_policy(1,1,0);
 	$window = $about_dialog->window;

examples/tk/gsequence.pl  view on Meta::CPAN

	  $subtree->append( $item_new );
	  $item_new->show();
	  
	  if ( $subfeature->sub_SeqFeature )
	  {
	      $new_subtree = new Gtk::Tree();
	      $item_new->set_subtree( $new_subtree );
	      $item_new->signal_connect( 'expand',
					 \&expand_feature_tree,
					 $new_subtree );
	      $item_new->signal_connect( 'collapse', \&collapse_feature_tree );
	  }
	  $item_new->expand();
      }
  }


# Callback for collapsing tree
sub collapse_feature_tree
  {
    my ( $item ) = @_;

    my $subtree = new Gtk::Tree();

    $item->remove_subtree();
    $item->set_subtree( $subtree );
    $item->signal_connect( 'expand', \&expand_feature_tree, $subtree );
  }


sub store_current_feature
{
  if ((defined($seq[$current])) && ($seq[$current]->top_SeqFeatures) && ($current_feature_item))
  {
    my $current_feature = $current_feature_item->get_user_data();
    $current_feature->primary_tag( $feature_entry[0]->get_chars(0,-1) );		
    $current_feature->source_tag( $feature_entry[1]->get_chars(0,-1) );		
    if ($current_feature->has_tag("description"))
    {
      $current_feature->remove_tag("description");
      $current_feature->add_tag_value("description",
				      $feature_entry[2]->get_chars(0,-1));
    }
    $current_feature->start($feature_spinner[0]->get_value_as_int());
    $current_feature->end($feature_spinner[1]->get_value_as_int());
    # set tree item
    ($current_feature_item->children)[0]->set($current_feature->primary_tag);
  }
}

sub select_feature_item
{
    my ($widget) = @_;
    &store_current_feature;
    $current_feature_item->deselect()
      if $current_feature_item;
    $current_feature_item = $widget;
    &update_feature_paned2;
}

sub update_feature_paned2
{
  $feature_entry[0]->set_text("");
  $feature_entry[1]->set_text("");
  $feature_entry[2]->set_text("");

  return if (!defined($seq[$current])||(!$current_feature_item));
  my $current_feature = $current_feature_item->get_user_data();
  $feature_entry[0]->set_text($current_feature->primary_tag);
  $feature_entry[1]->set_text($current_feature->source_tag)
    if (defined($current_feature->source_tag));
  $feature_entry[2]->set_text(($current_feature->each_tag_value("description"))[0])
    if ($current_feature->has_tag("description"));
  my $adj = new Gtk::Adjustment($current_feature->start,
				0,
				$seq[$current]->length-1,
				1,
				1,
				0
			       );
  $feature_spinner[0]->set_adjustment($adj);
  $feature_spinner[0]->set_value($current_feature->start);
  $feature_spinner[0]->show_all();
  $adj = new Gtk::Adjustment($current_feature->end,
			     0,
			     $seq[$current]->length-1,
			     1,
			     1,
			     0
			    );
  $feature_spinner[1]->set_adjustment($adj);
  $feature_spinner[1]->set_value($current_feature->end);
  $feature_spinner[1]->show_all();
}

sub select_feature_region
{
  $seq_edit[$current]->freeze;
  $seq_edit[$current]->select_region($feature_spinner[0]->get_value_as_int(),
			   $feature_spinner[1]->get_value_as_int()+1);
  $seq_edit[$current]->thaw;
}

sub update_feature_window
{
    my ($show_me) = @_;
    $feature_window->show_all() if (defined($show_me));

    $feature_tree->clear_items(0,-1);
    if (!defined($seq[$current]))
    {
	&update_feature_paned2;
	return;
    }

    my ($item_new,$new_subtree);
    foreach ($seq[$current]->top_SeqFeatures)
      {
	  $item_new = new_with_label Gtk::TreeItem( $_->primary_tag );
	  $item_new->set_user_data( $_ );
	  $item_new->signal_connect( 'select', \&select_feature_item );
	  $feature_tree->append( $item_new );
	  if ( $_->sub_SeqFeature )
	  {
	      $new_subtree = new Gtk::Tree();
	      $item_new->set_subtree( $new_subtree );
	      $item_new->signal_connect( 'expand',
					 \&expand_feature_tree,
					 $new_subtree );
	      $item_new->signal_connect( 'collapse', \&collapse_feature_tree );
	  }
	  $item_new->expand();
      }
    $feature_tree->select_item($current_feature_item) 
      if $current_feature_item;
    $feature_tree->show_all();

    &update_feature_paned2;
}

sub store_prefs
{
}

sub update_pref_window
{
  $pref_window->show_all();
}

sub init_pref_window
{
  $pref_window = new Gtk::Dialog();
  $pref_window->set_default_size(500,400);
  $pref_window->set_policy($true,$true,$false);
  $pref_window->border_width( 5 );

  # Create a new notebook, place the position of the tabs
  my $notebook = new Gtk::Notebook();
  $pref_window->vbox->pack_start( $notebook, $true, $true, 0);
  $notebook->set_tab_pos( 'top' );

  my $main_vbox = new Gtk::VBox($false,10);

  my $label = new Gtk::Label( "Import Options" );
  my $frame = new Gtk::Frame("Flat File Indexes");
  my $vbox = new Gtk::VBox($false,10);
  $frame->add($vbox);
  $main_vbox->pack_start($frame,$false,$false,10);

  $notebook->append_page( $main_vbox, $label );

  my $hbox = new Gtk::HBox($false,0);

  $pref_entry[0] = new Gtk::Entry();
  $frame = new Gtk::Frame("Indexes Directory");
  $frame->add($pref_entry[0]);
  $hbox->pack_start( $frame, $true, $false, 0);

  $pref_entry[1] = new Gtk::Entry();
  $frame = new Gtk::Frame("Index Type");
  $frame->add($pref_entry[1]);
  $hbox->pack_start( $frame, $false, $false, 0);

  $vbox->pack_start( $hbox, $false, $false, 0);

  $pref_entry[2] = new Gtk::Entry();
  $frame = new Gtk::Frame("Fasta Index Name");
  $frame->add($pref_entry[2]);
  $vbox->pack_start( $frame, $false, $false, 0);

  $pref_entry[3] = new Gtk::Entry();
  $frame = new Gtk::Frame("SwissProt Index Name");
  $frame->add($pref_entry[3]);
  $vbox->pack_start( $frame, $false, $false, 0);

  $pref_entry[4] = new Gtk::Entry();
  $frame = new Gtk::Frame("SwissPfam Index Name");
  $frame->add($pref_entry[4]);
  $vbox->pack_start( $frame, $false, $false, 0);

  $frame = new Gtk::Frame("Remote DBs");
  $hbox = new Gtk::HBox($false,10);
  $frame->add($hbox);
  $main_vbox->pack_start($frame,$false,$false,10);



( run in 0.571 second using v1.01-cache-2.11-cpan-39bf76dae61 )