Padre
view release on metacpan or search on metacpan
lib/Padre/Wx/Dialog/Advanced.pm view on Meta::CPAN
my $main = shift;
# Create the Wx dialog
my $self = $class->SUPER::new(
$main,
-1,
Wx::gettext('Advanced Settings'),
Wx::DefaultPosition,
Wx::DefaultSize,
Wx::DEFAULT_FRAME_STYLE,
);
# Set some internal parameters
$self->{sortcolumn} = 0;
$self->{sortreverse} = 0;
# Minimum dialog size
$self->SetMinSize( [ 750, 550 ] );
# Create sizer that will host all controls
my $sizer = Wx::BoxSizer->new(Wx::HORIZONTAL);
# Create the controls
$self->_create_controls($sizer);
# Bind the control events
$self->_bind_events;
# Wrap everything in a vbox to add some padding
$self->SetSizer($sizer);
$self->Fit;
$self->CentreOnParent;
return $self;
}
# Create dialog controls
sub _create_controls {
my ( $self, $sizer ) = @_;
# Filter label
my $filter_label = Wx::StaticText->new( $self, -1, Wx::gettext('&Filter:') );
# Filter text field
$self->{filter} = Wx::TextCtrl->new( $self, -1, '' );
# Filtered preferences list
$self->{list} = Wx::ListView->new(
$self,
-1,
Wx::DefaultPosition,
Wx::DefaultSize,
Wx::LC_REPORT | Wx::LC_SINGLE_SEL,
);
$self->{list}->InsertColumn( 0, Wx::gettext('Preference Name') );
$self->{list}->InsertColumn( 1, Wx::gettext('Status') );
$self->{list}->InsertColumn( 2, Wx::gettext('Type') );
$self->{list}->InsertColumn( 3, Wx::gettext('Value') );
# Popup right-click menu
$self->{popup} = Wx::Menu->new;
$self->{copy} = $self->{popup}->Append( -1, Wx::gettext('Copy') );
$self->{copy_name} = $self->{popup}->Append( -1, Wx::gettext('Copy Name') );
$self->{copy_value} = $self->{popup}->Append( -1, Wx::gettext('Copy Value') );
# Preference value label
my $value_label = Wx::StaticText->new( $self, -1, Wx::gettext('&Value:') );
# Preference value text field
$self->{value} = Wx::TextCtrl->new( $self, -1, '' );
$self->{value}->Enable(0);
# Boolean value radio button fields
$self->{true} = Wx::RadioButton->new( $self, -1, Wx::gettext('True') );
$self->{false} = Wx::RadioButton->new( $self, -1, Wx::gettext('False') );
$self->{true}->Hide;
$self->{false}->Hide;
# System default
my $default_label = Wx::StaticText->new( $self, -1, Wx::gettext('Default value:') );
$self->{default_value} = Wx::TextCtrl->new(
$self,
-1,
'',
Wx::DefaultPosition,
Wx::DefaultSize,
Wx::TE_READONLY
);
$self->{default_value}->Enable(0);
# preference options
my $options_label = Wx::StaticText->new( $self, -1, Wx::gettext('Options:') );
$self->{options} = Wx::TextCtrl->new(
$self,
-1,
'',
Wx::DefaultPosition,
Wx::DefaultSize,
Wx::TE_READONLY
);
$self->{options}->Enable(0);
my $help_label = Wx::StaticText->new( $self, -1, Wx::gettext('Description:') );
$self->{help} = Wx::TextCtrl->new(
$self,
-1,
'',
Wx::DefaultPosition,
Wx::DefaultSize,
Wx::TE_READONLY | Wx::TE_MULTILINE | Wx::NO_FULL_REPAINT_ON_RESIZE
);
$self->{help}->Enable(0);
# Set preference value button
$self->{button_set} = Wx::Button->new(
$self, -1, Wx::gettext('&Set'),
);
$self->{button_set}->Enable(0);
# Reset to default preference value button
$self->{button_reset} = Wx::Button->new(
$self, -1, Wx::gettext('&Reset'),
);
lib/Padre/Wx/Dialog/Advanced.pm view on Meta::CPAN
$vsizer->Show( 3, 0 );
$vsizer->Show( 4, 0 );
# Store vertical sizer reference for later usage
$self->{vsizer} = $vsizer;
# Wrap with a horizontal sizer to get left/right padding
$sizer->Add( $vsizer, 1, Wx::ALL | Wx::EXPAND, 5 );
return;
}
# A Private method to binds events to controls
sub _bind_events {
my $self = shift;
# Set focus when Keypad Down or page down keys are pressed
Wx::Event::EVT_CHAR(
$self->{filter},
sub {
$self->_on_char( $_[1] );
}
);
# Update filter search results on each text change
Wx::Event::EVT_TEXT(
$self,
$self->{filter},
sub {
shift->_update_list;
}
);
# When the title is clicked, sort the items
Wx::Event::EVT_LIST_COL_CLICK(
$self,
$self->{list},
sub {
shift->list_col_click(@_);
},
);
# When an item is selected, its values must be populated below
Wx::Event::EVT_LIST_ITEM_SELECTED(
$self,
$self->{list},
sub {
shift->_on_list_item_selected(@_);
}
);
# When an item is activated (e.g. double-clicked, space-ed or enter-ed)
Wx::Event::EVT_LIST_ITEM_ACTIVATED(
$self,
$self->{list},
sub {
shift->_on_list_item_activated(@_);
}
);
# When a list right click event is fired, let us show a popup menu
Wx::Event::EVT_LIST_ITEM_RIGHT_CLICK(
$self,
$self->{list},
sub {
shift->_on_list_item_right_click(@_);
}
);
# Handle boolean radio buttons state change
Wx::Event::EVT_RADIOBUTTON(
$self,
$self->{true},
sub {
shift->_on_radiobutton(@_);
}
);
Wx::Event::EVT_RADIOBUTTON(
$self,
$self->{false},
sub {
shift->_on_radiobutton(@_);
}
);
# Copy everything to clipboard
Wx::Event::EVT_MENU(
$self,
$self->{copy},
sub {
shift->_on_copy_to_clipboard( @_, COPY_ALL );
}
);
# Copy name to clipboard
Wx::Event::EVT_MENU(
$self,
$self->{copy_name},
sub {
shift->_on_copy_to_clipboard( @_, COPY_NAME );
}
);
# Copy value to clipboard
Wx::Event::EVT_MENU(
$self,
$self->{copy_value},
sub {
shift->_on_copy_to_clipboard( @_, COPY_VALUE );
}
);
# Set button
Wx::Event::EVT_BUTTON(
$self,
$self->{button_set},
sub {
shift->_on_set_button;
}
);
lib/Padre/Wx/Dialog/Advanced.pm view on Meta::CPAN
$self,
$self->{button_reset},
sub {
shift->_on_reset_button;
}
);
# Save button
Wx::Event::EVT_BUTTON(
$self,
$self->{button_save},
sub {
shift->_on_save_button;
}
);
# Cancel button
Wx::Event::EVT_BUTTON(
$self,
$self->{button_cancel},
sub {
shift->EndModal(Wx::ID_CANCEL);
}
);
return;
}
# Private method to copy preferences to clipboard
sub _on_copy_to_clipboard {
my ( $self, $event, $action ) = @_;
my $list = $self->{list};
my $name = $list->GetItemText( $list->GetFirstSelected );
my $pref = $self->{preferences}->{$name};
my $text;
if ( $action == COPY_ALL ) {
$text = $name . ';' . $self->_status_name($pref) . ';' . $pref->{type_name} . ';' . $pref->{value};
} elsif ( $action == COPY_NAME ) {
$text = $name;
} elsif ( $action == COPY_VALUE ) {
$text = $pref->{value};
}
if ( $text and Wx::TheClipboard->Open ) {
Wx::TheClipboard->SetData( Wx::TextDataObject->new($text) );
Wx::TheClipboard->Close;
}
return;
}
# Private method to retrieve the correct value for the preference status column
sub _status_name {
my ( $self, $pref ) = @_;
return $pref->{is_default}
? Wx::gettext('Default')
: $pref->{store_name};
}
# Private method to show a popup menu when a list item is right-clicked
sub _on_list_item_right_click {
my $self = shift;
my $event = shift;
$self->{list}->PopupMenu(
$self->{popup},
$event->GetPoint->x,
$event->GetPoint->y,
);
return;
}
# Private method to handle on character pressed event
sub _on_char {
my $self = shift;
my $event = shift;
my $code = $event->GetKeyCode;
$self->{list}->SetFocus
if ( $code == Wx::K_DOWN )
or ( $code == Wx::K_NUMPAD_PAGEDOWN )
or ( $code == Wx::K_PAGEDOWN );
$event->Skip(1);
return;
}
# Private method to handle the selection of a preference item
sub _on_list_item_selected {
my $self = shift;
my $event = shift;
my $pref = $self->{preferences}->{ $event->GetLabel };
my $type = $pref->{type};
my $is_boolean = ( $pref->{type} == Padre::Constant::BOOLEAN ) ? 1 : 0;
if ($is_boolean) {
$self->{true}->SetValue( $pref->{value} );
$self->{false}->SetValue( not $pref->{value} );
} else {
$self->{value}->SetValue( $self->_displayed_value( $type, $pref->{value} ) );
$self->{options}->SetValue( $pref->{options} );
}
$self->{help}->SetValue( $pref->{help} );
# Show value and info sizers
$self->{vsizer}->Show( 2, 1 );
$self->{vsizer}->Show( 3, 1 );
$self->{vsizer}->Show( 4, 1 );
# Toggle visibility of fields depending on preference type
$self->{value}->Show( not $is_boolean );
$self->{true}->Show($is_boolean);
$self->{false}->Show($is_boolean);
# Hide spaces infront of true/false radiobuttons
$self->{boolean}->Show( 0, $is_boolean );
$self->{boolean}->Show( 3, $is_boolean );
# Set button is not needed when it is a boolean
$self->{button_set}->Show( not $is_boolean );
# Recalculate sizers
$self->Layout;
( run in 2.428 seconds using v1.01-cache-2.11-cpan-364913b4093 )