From ce709f12771f9e56150b0df434311ab5b75385f7 Mon Sep 17 00:00:00 2001 From: freesource Date: Sat, 23 Dec 2000 07:44:10 +0000 Subject: [PATCH] * Now the Save button and Ctrl-S are doing there thing, and not writing over unwritable files. --- YardBox.pm | 96 +++++++++++++++++++++++++++++++++++------------------- 1 file changed, 62 insertions(+), 34 deletions(-) diff --git a/YardBox.pm b/YardBox.pm index 4f4ba24..8d63d22 100644 --- a/YardBox.pm +++ b/YardBox.pm @@ -28,6 +28,7 @@ use Exporter; use strict; use Yard; use Error; +use lsMode; my $yard_window; my $item_factory; @@ -37,10 +38,10 @@ my $error; my ($continue_button,$close_button,$save_button); my($check,$dep,$space,$create,$test); my($filename,$filesystem_size,$kernel,$template_dir,$template,$tmp,$mnt); +my ($text, $changed_text); my $filesystem_type = "ext2"; my $inode_size = 8192; -my $TEXT_CHANGED = "no"; my $lib_bool = 1; my $bin_bool = 1; my $mod_bool = 1; @@ -56,18 +57,25 @@ $template = $ars->{template}; $tmp = $ars->{tmp}; $mnt = $ars->{mnt}; +# Freshmeat comes here so the rest of the program needs +# to be warned when the template is coming from here. +$changed_text = "$template_dir$template"; + } + my @menu_items = ( { path => '/File', type => '' }, { path => '/File/file_tearoff', type => '' }, { path => '/File/_Save', accelerator => 'S', - callback => sub { print "hello"; } }, + callback => \&saved, + action => 100 }, { path => '/File/Save _As ...', accelerator => 'S', - callback => sub { print "hello\n"; } }, + callback => \&saved, + action => 101 }, { path => '/File/file_separator', type => '' }, { path => '/File/Close', @@ -202,13 +210,13 @@ sub yard { # Yard: kernel,kernel version # Becomes $ENV{'RELEASE'} return if $error && $error eq "ERROR"; - open(CONTENTS, "<$template_dir$template") or - ($error = error("$template_dir$template: $!")); + open(CONTENTS, "<$changed_text") or + ($error = error("$changed_text: $!")); return "ERROR"if $error && $error eq "ERROR"; my @template = ; close(CONTENTS); - my $stuff = join("",@template); - yard_box($stuff); + $changed_text = join("",@template); + yard_box(); } else { @@ -334,23 +342,11 @@ sub which_stage { # 1 1 1 1 0 # 1 1 1 1 1 - # text will have to be dealt with differently # 0 everything - if ($name eq "check" || $TEXT_CHANGED eq "yes") { + if ($name eq "check") { foreach $name_cmp (%$continue) { $continue->{$name_cmp} = 0; } - if ($TEXT_CHANGED eq "yes") { - foreach $thing (@check_boxes) { - $thing->hide(); - $thing->active($false); - $thing->show(); - } - $check->hide(); - $check->active($true); - $check->show(); - $TEXT_CHANGED = "no"; - } } # 1 0 0 0 0 elsif ($name eq "dep") { @@ -501,20 +497,20 @@ sub continue { sub check { - $error = read_contents_file("$template_dir$template"); + $error = read_contents_file($changed_text); return if $error && $error eq "ERROR"; } sub links_deps { - $error = extra_links("$template_dir$template"); + $error = extra_links($changed_text); return if $error && $error eq "ERROR"; $error = hard_links(); return if $error && $error eq "ERROR"; - $error = library_dependencies("$template_dir$template"); + $error = library_dependencies($changed_text); return if $error && $error eq "ERROR"; } @@ -649,7 +645,8 @@ my $replacement_bool = 1; my $module_bool = 1; my $start_length; sub yard_box { - + + $yard_window = new Gtk::Window "toplevel"; $yard_window->signal_connect("destroy", \&destroy_window, \$yard_window); @@ -870,15 +867,11 @@ sub yard_box { #_______________________________________ # Create the GtkText widget - my $text = new Gtk::Text( undef, undef ); + $text = new Gtk::Text( undef, undef ); $text->set_editable($true); - $text->signal_connect("changed", sub { + $text->signal_connect("activate", sub { my $new_length = $text->get_length(); - my $changed_text = $text->get_chars(0,$new_length); - if ( $start_length != $new_length ) { - print "Text has changed $start_length $new_length\n"; - $TEXT_CHANGED = "yes"; - } + $changed_text = $text->get_chars(0,$new_length); } ); $table->attach( $text, 0, 1, 0, 1, [ 'expand', 'shrink', 'fill' ], @@ -888,7 +881,7 @@ sub yard_box { $text->show(); $text->freeze(); - $text->insert( undef, undef, undef, $_[0]); + $text->insert( undef, undef, undef, $changed_text); $text->thaw(); $start_length = $text->get_length(); @@ -967,8 +960,8 @@ sub yard_box { $close_button->show(); $save_button = new Gtk::Button( "Save" ); - $save_button->signal_connect( 'clicked', - sub { destroy $yard_window; } ); + # This sub can be used by all the saved buttons + $save_button->signal_connect( 'clicked', \&saved, 102); $vbox->pack_start( $save_button, $true, $true, 0 ); $save_button->show(); @@ -976,6 +969,41 @@ sub yard_box { } # end sub yard_box +sub saved { + + my ($widget,$whoami) = @_; + my $error; + + $text->activate(); + + # It's not necessary to use lsMode, but it's a cool program by MJD. + if ($whoami == 100 || $whoami == 102 ) { + if ( file_mode("$template_dir$template") !~ /w/ ) { + error_window("gBootRoot: ERROR: $template_dir$template is not " . + "writable.\nUse [ File->Save As ] or " . + "[Alt-S] with the yard suffix."); + } + else { + # Here's where we get to undef Yard variable and start over at + # check + my $new = "$template_dir$template" . ".new"; + open(NEW,">$new") or + ($error = error("gBootRoot: ERROR: Can't create $new")); + return if $error && $error eq "ERROR"; + print NEW $changed_text; + close(NEW); + rename($new, "$template_dir$template") or + ($error = error("gBootRoot: ERROR: Can't rename $new to " . + "$template_dir$template")); + return if $error && $error eq "ERROR"; + } + } + elsif ($whoami == 101) { + print "Getting there\n"; + } + +} + sub print_hello { my ($menu_item, $action, $date) = @_;