/usr/local/CPAN/Padre/Padre/Wx/Menu/RightClick.pm
package Padre::Wx::Menu::RightClick;
# Menu that shows up when user right-clicks with the mouse
use 5.008;
use strict;
use warnings;
use Padre::Wx ();
use Padre::Wx::Menu ();
our $VERSION = '0.86';
our @ISA = 'Padre::Wx::Menu';
sub new {
my $class = shift;
my $main = shift;
my $editor = shift;
my $event = shift;
return if not $editor;
# Create the empty menu as normal
my $self = $class->SUPER::new(@_);
# Add additional properties
$self->{main} = $main;
my $selection_exists = length( $editor->GetSelectedText ) > 0 ? 1 : 0;
# Undo/Redo
$self->{undo} = $self->add_menu_action(
$self,
'edit.undo',
);
if ( not $editor->CanUndo ) {
$self->{undo}->Enable(0);
}
$self->{redo} = $self->add_menu_action(
$self,
'edit.redo',
);
if ( not $editor->CanRedo ) {
$self->{redo}->Enable(0);
}
$self->AppendSeparator;
if ($selection_exists) {
$self->{open_selection} = $self->add_menu_action(
$self,
'file.open_selection',
);
}
$self->{open_in_file_browser} = $self->add_menu_action(
$self,
'file.open_in_file_browser',
);
$self->{find_in_files} = $self->add_menu_action(
$self,
'search.find_in_files',
);
$self->AppendSeparator;
$self->{copy} = $self->add_menu_action(
$self,
'edit.copy',
);
$self->{cut} = $self->add_menu_action(
$self,
'edit.cut',
);
if ( not $selection_exists ) {
$self->{copy}->Enable(0);
$self->{cut}->Enable(0);
}
$self->{paste} = $self->add_menu_action(
$self,
'edit.paste',
);
my $text = $editor->get_text_from_clipboard();
if ( not defined($text) or not length($text) or not $editor->CanPaste ) {
$self->{paste}->Enable(0);
}
$self->{select_all} = $self->add_menu_action(
$self,
'edit.select_all',
);
$self->AppendSeparator;
$self->{comment_toggle} = $self->add_menu_action(
$self,
'edit.comment_toggle',
);
$self->{comment} = $self->add_menu_action(
$self,
'edit.comment',
);
$self->{uncomment} = $self->add_menu_action(
$self,
'edit.uncomment',
);
if ( $event->isa('Wx::MouseEvent')
and $editor->main->ide->config->editor_folding )
{
my $mousePos = $event->GetPosition;
my $line = $editor->LineFromPosition( $editor->PositionFromPoint($mousePos) );
my $firstPointInLine = $editor->PointFromPosition( $editor->PositionFromLine($line) );
if ( $mousePos->x < $firstPointInLine->x
&& $mousePos->x > ( $firstPointInLine->x - 18 ) )
{
$self->AppendSeparator;
$self->{fold_all} = $self->add_menu_action(
$self,
'view.fold_all',
);
$self->{unfold_all} = $self->add_menu_action(
$self,
'view.unfold_all',
);
$self->AppendSeparator;
}
}
my $doc = $editor->{Document};
if ($doc) {
if ( $doc->can('event_on_right_down') ) {
$doc->event_on_right_down( $editor, $self, $event );
}
# Let the plugins have a go
$editor->main->ide->plugin_manager->on_context_menu( $doc, $editor, $self, $event );
}
return $self;
}
1;
# Copyright 2008-2011 The Padre development team as listed in Padre.pm.
# LICENSE
# This program is free software; you can redistribute it and/or
# modify it under the same terms as Perl 5 itself.