Xacobeo

 view release on metacpan or  search on metacpan

examples/Xacobeo/Ex/ClipboardLoad.pm  view on Meta::CPAN

package Xacobeo::Ex::ClipboardLoad;

=head1 NAME

Xacobeo::Ex::ClipboardLoad - Test plugin

=head1 DESCRIPTION

Sample plugin that allows to load an XML document based on the contents of the
clipboard.

The plugin adds the entry I<Load from clipboard> under the I<File> main menu.
The plugin can also be activated through the shortcut I<CTRL SHIFT L>.

=head1 USAGE

Copy the file examples/cliboard.plugin into $HOME/.config/xacobeo/plugins/ and
add examples/Xacobeo into your PERL5LIB path.

Or copy examples/Xacobeo/Ex/ClipboardLoad.pm somewhere and add the full path
to the variable I<Script> in the file F<cliboard.plugin>. For instance if you
copy the perl module to F<$HOME/.config/xacobeo/plugins/ and that your user name
is I<me> then use:

	Script=/home/me/.config/xacobeo/plugins/ClipboardLoad.pm

=cut

use Glib qw(TRUE FALSE);
use base 'Xacobeo::Plugin';

use strict;
use warnings;

use Xacobeo::Document;

our $VERSION = '0.03';


sub init {
	my $self = shift;
	my ($xacobeo) = @_;

	my ($window) = $xacobeo->get_windows();	
	$window->statusbar->display("Plugin Loaded!");

	# Build an action group, this is where we define the name, shortcut, icon and
	# the callback for our actions.
	my $actions = Gtk2::ActionGroup->new("XacobeoTestPluginActions");
	$actions->add_actions([
		# Entries (name, stock id, label, accelerator, tooltip, callback)
		[
			'FileNewFromClipboard',
			'gtk-paste',
			"_Load from clipboard",
			'<control><shift>L',
			"Load a file from the clipboard",
			sub { $self->load_from_clipboard(@_, $window) }
		],
	]);

	
	# Inject our new actions into the existing application
	my $ui_manager = $window->ui_manager;
	$ui_manager->insert_action_group($actions, 0);
	$ui_manager->add_ui(
		$ui_manager->new_merge_id,
		'/MenuBar/FileMenu/FilePlaceholder_1',
		'FileNewFromClipboard',
		'FileNewFromClipboard',
		'menuitem',
		FALSE
	);
}


sub load_from_clipboard {
	my $self = shift;
	my ($action, $window) = @_;

	# Prepare the system clipboard
	my $selection = Gtk2::Gdk::Atom->new('CLIPBOARD');
	my $clipboard = Gtk2::Clipboard->get($selection);
	
	# Get the xml from clipboard
	my $xml = $clipboard->wait_for_text;
	return unless defined $xml;
	
	# Load the temporary xml file
	my $document = Xacobeo::Document->new_from_string($xml, 'xml');
	$window->set_title('clipboard');
	$window->load_document($document);
}


__PACKAGE__->load();


=head1 AUTHORS

Emmanuel Rodriguez E<lt>potyl@cpan.orgE<gt>.
Jozef Kutej E<lt>jkutej@cpan.orgE<gt>.

=head1 COPYRIGHT AND LICENSE

Copyright (C) 2008,2009 by Emmanuel Rodriguez, Jozef Kutej.

This library is free software; you can redistribute it and/or modify
it under the same terms as Perl itself, either Perl version 5.8.8 or,
at your option, any later version of Perl 5 you may have available.

=cut



( run in 3.242 seconds using v1.01-cache-2.11-cpan-84e82930d8c )