From cf1dc75e27fa1e1d5235f503466dee413e35e3ea Mon Sep 17 00:00:00 2001 From: freesource Date: Thu, 2 Aug 2001 05:12:52 +0000 Subject: [PATCH] This adds a Replacements box, so the Replacements directory can easily be reached and files edited with an editor of choice via $main::editor. --- BootRoot/YardBox.pm | 215 +++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 214 insertions(+), 1 deletion(-) diff --git a/BootRoot/YardBox.pm b/BootRoot/YardBox.pm index b1a4c8e..86b097e 100644 --- a/BootRoot/YardBox.pm +++ b/BootRoot/YardBox.pm @@ -40,6 +40,9 @@ my($check,$dep,$space,$create,$test); my($filename,$filesystem_size,$kernel,$template_dir,$template,$tmp,$mnt); my ($text, $changed_text, $changed_text_from_template); my $save_as; +my $replacements_window; +my @entry; +my $file_dialog; my $filesystem_type = "ext2"; my $inode_size = 8192; @@ -138,7 +141,8 @@ my @menu_items = ( { path => '/File', callback => \&stages_user_defined }, { path => '/Edit/File System', callback => \&file_system }, - { path => '/Edit/Replacements' }, + { path => '/Edit/Replacements', + callback => \&Replacements }, { path => '/_Create', type => '' }, @@ -1127,6 +1131,215 @@ sub save_as { } + +sub Replacements { + + if (not defined $replacements_window) { + + $replacements_window = Gtk::Window->new("toplevel"); + $replacements_window->signal_connect("destroy", \&destroy_window, + \$replacements_window); + $replacements_window->signal_connect("delete_event", \&destroy_window, + \$replacements_window); + $replacements_window->set_policy( $true, $true, $false ); + $replacements_window->set_title( "Replacements Box" ); + $replacements_window->border_width(1); + + my $main_vbox = Gtk::VBox->new( $false, 0 ); + $replacements_window->add( $main_vbox ); + $main_vbox->show(); + + my $table_replacements = Gtk::Table->new( 3, 3, $true ); + $main_vbox->pack_start( $table_replacements, $true, $true, 0 ); + $table_replacements->show(); + + #_______________________________________ + # Editor and execute options + label("Editor:",0,1,0,1,$table_replacements); + my $repl1 = entry(1,3,0,1,0,$table_replacements); + $repl1->set_text($main::editor); + +#my $tooltips = Gtk::Tooltips->new(); +# $tooltips->set_tip( $repl1, +# "Choose an editory with " . +# "its executable option switch.", +# "" ); + + #_______________________________________ + # Replacement file + label("Replacement:",0,1,1,2,$table_replacements); + my $repl2 = entry(1,2,1,2,1,$table_replacements); + button_fileselect(2,3,1,2,"Selection",$repl2,"Selection",0, + $table_replacements, + "$main::global_yard/Replacements/"); + $repl2->set_text("$main::global_yard/Replacements/") + if -e "$main::global_yard/Replacements/"; + + $table_replacements->set_row_spacing( 1, 3); + + + #_______________________________________ + # Submit button + my $submit_b = button(0,1,2,3,"Submit",$table_replacements); + $submit_b->signal_connect( "clicked", sub { + if ($entry[0] && $entry[1]) { + + # Check to see if it actually exists + my $executable = (split(/\s+/,$entry[0]))[0]; + if (!find_file_in_path(basename($executable))) { + error_window("gBootRoot Error: " . + "Enter a valid xterm, and " . + "executable option."); + return; + } + if ($executable =~ m,/,) { + if (! -e $executable) { + error_window("gBootRoot Error: " . + "Enter a valid path for the xterm."); + return; + } + } + + my $pid; + unless ($pid = fork) { + unless (fork) { + if ($pid == 0) { + sys("$entry[0] $entry[1]"); + Gtk->_exit($pid); + } + } + } + waitpid($pid,0); + } + } ); + + #_______________________________________ + # Close button + my $close_b = button(2,3,2,3,"Close",$table_replacements); + $close_b->signal_connect("clicked", + sub { + $replacements_window->destroy() + if $replacements_window; + } ); + + } + if (!visible $replacements_window) { + $replacements_window->show(); + } else { + $replacements_window->destroy; + } + +} + +# Just label_advanced +sub label { + + my($text) = @_; + + my $label = Gtk::Label->new( $text ); + $label->set_justify( "fill" ); + $_[5]->attach($label,$_[1],$_[2],$_[3],$_[4], ['expand'],['fill','shrink'],0,0); + $label->show(); + +} + +# Just entry_advanced +sub entry { + + my $numa = $_[4]; + my $entry = Gtk::Entry->new(); + $entry->set_editable( $true ); + $entry->signal_connect( "changed", sub { + $entry[$numa] = $entry->get_text(); +# if ($numa == 4) { +# $ars->{filename} = $entry[$numa]; +# ars($ars); +# } + } ); + $entry->set_usize(100,20); + $_[5]->attach($entry,$_[0],$_[1],$_[2],$_[3], + ['shrink','fill','expand'],['fill','shrink'],0,0); + show $entry; + return $entry; + +} + +sub button { + + # cretzu should like this + my ($left_attach,$right_attach,$top_attach, + $bottom_attach,$text,$widget) = @_; + my $button = Gtk::Button->new($text); + $widget->attach($button,$left_attach,$right_attach, + $top_attach,$bottom_attach, + ['shrink','fill','expand'],['fill','shrink'],2,2); + show $button; + return $button; + +} + +sub button_fileselect { + + # cretzu should like this + # $order does matter because it fills in $container[$order]. + my ($left_attach,$right_attach,$top_attach,$bottom_attach,$text,$ent, + $name,$order,$widget,$device) = @_; + + my $button = Gtk::Button->new($text); + $widget->attach($button,$left_attach,$right_attach, + $top_attach,$bottom_attach, + ['shrink','fill','expand'],['fill','shrink'],2,2); + + $button->signal_connect( "clicked",\&fileselect,$ent,$name,$order,$device); + $button->show(); + + +} # end sub button_fileselect + +sub fileselect { + + my ($widget,$ent,$name,$order,$device) = @_; + + if (not defined $file_dialog) { + # Create a new file selection widget + $file_dialog = Gtk::FileSelection->new( "$name" ); + $file_dialog->signal_connect( "destroy", + \&destroy_window, \$file_dialog); + $file_dialog->signal_connect( "delete_event", + \&destroy_window, \$file_dialog); + + # Connect the ok_button to file_ok_sel function + $file_dialog->ok_button->signal_connect( "clicked", + \&file_ok_sel, + $file_dialog,$ent,$order); + + # Connect the cancel_button to destroy the widget + $file_dialog->cancel_button->signal_connect( "clicked", + sub { destroy $file_dialog } ); + $file_dialog->set_filename( $device ) if defined $device; + $file_dialog->set_position('mouse'); + + } + if (!visible $file_dialog) { + show $file_dialog; + } + else { + destroy $file_dialog; + } + +} # end sub fileselect + + +sub file_ok_sel { + + my( $widget, $file_selection,$entry,$order) = @_; + my $file = $file_selection->get_filename(); + $entry->set_text($file); + destroy $file_dialog; + +} + + 1;