#!/usr/bin/perl -w
# -*- perl -*-

#
# $Id: tkxmlview,v 1.4 2000/07/29 00:27:15 eserte Exp $
# Author: Slaven Rezic
#
# Copyright (C) 2000 Slaven Rezic. All rights reserved.
# This program is free software; you can redistribute it and/or
# modify it under the same terms as Perl itself.
#
# Mail: eserte@cs.tu-berlin.de
# WWW:  http://user.cs.tu-berlin.de/~eserte/
#

use Tk;
use Tk::XMLViewer;

$top = new MainWindow;
my $file = shift;
$xmlviewer = $top->Scrolled("XMLViewer")->pack(-expand => 1, -fill => "both");
$xmlviewer->XMLMenu;
if ($Tk::VERSION >= 800.015) {
    my $textmenu = $xmlviewer->menu;
    if ($textmenu) {
	my $filemenu = $textmenu->entrycget(0, -menu);
	$filemenu->command(-label => 'Open',
			   -command => sub { openxml(); viewxml() });
	$filemenu->command(-label => 'Re-Open',
			   -command => sub { 
			       if ($xmlviewer->SourceType eq 'file'){
				   viewxml();
			       }
			   });

	my $editmenu = $textmenu->entrycget(1, -menu);
	$editmenu->separator;
	$editmenu->command
	    (-label => 'Edit file...',
	     -command => sub {
		 require Tk::TextEdit;
		 package Tk::TextEdit;
		 sub Save {
		     my $self = shift;
		     my $r = $self->SUPER::Save(@_);
		     main::viewxml();
		     $r;
		 }

		 package main;
		 my $top_editor = $top->Toplevel;
		 $top_editor->title("Edit $file");
		 my $editor = $top_editor->Scrolled
		     ('TextEdit',
		      -scrollbars => "osoe",
		      -wrap => "none",
		     )->pack;
		 # XXX workaround bug in 3.004
		 $editor->SetGUICallbacks([]);
		 $editor->FileName($file);
		 $editor->Load;
	     });

	my $helpmenu = $textmenu->cascade(-tearoff => 0,
					  -label => 'Help');
	$helpmenu->command(-label => 'About',
			   -command => sub {
			       $top->messageBox
				   (-title   => 'About tkxmlview',
				    -message => "An XML viewer for Perl/Tk\n" .
				                "(c) 2000 by Slaven Rezic",
				    -type    => 'OK');
			   });
	$helpmenu->command(-label => 'Tk::XMLViewer POD',
			   -command => sub {
			       require Tk::Pod;
			       $top->Pod(-file => 'Tk/XMLViewer',
					 -title => 'Tk::XMLViewer POD');
			   });
    }
}
if (!defined $file) {
    openxml();
}
viewxml();
MainLoop;

sub openxml {
    $file = $top->getOpenFile(-filetypes => [['XML Files', '*.xml'],
					     ['All Files', '*']]);
}
sub viewxml {
    if (defined $file) {
	$top->title($file);
	$xmlviewer->delete("1.0", "end");
	$xmlviewer->insertXML(-file => $file);
    }
}

__END__
