App-Music-ChordPro

 view release on metacpan or  search on metacpan

lib/ChordPro/Wx/FileDirPickerCtrl.pm  view on Meta::CPAN

#! perl

use v5.26;
use Object::Pad;
use utf8;

use Wx ':panel';

class ChordPro::Wx::FileDirPickerCtrl
  :repr(HASH)
  :isa(Wx::Panel);

use Wx ':everything';
use ChordPro::Files;
use ChordPro::Wx::Config;
use ChordPro::Wx::Utils;

field $text     = "";
field $textctrl;
field $picker;
field $picker_event;

my @args;

sub BUILDARGS {
    my $class = shift;

    my ( $parent, $id, $path, $message, $wildcard, $new ) = @args = @_;

    # Args for SUPER::new.
    ( $parent, $id, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL );
}

BUILD {
    my ( $parent, $id, $path, $message, $wildcard, $new ) = @args;

    if ( $wildcard eq "" && !$new ) {
	$picker = Wx::DirDialog->new( $self, $message,
				      $path,
				      wxDD_DIR_MUST_EXIST
				    );
	$picker_event = Wx::FileDirPickerEvent->new
	  ( wxEVT_COMMAND_DIRPICKER_CHANGED, $self->GetId );
    }
    else {
	$picker = Wx::FileDialog->new( $self, $message,
				       fn_dirname($path), fn_basename($path),
				       $wildcard || $state{ffilters},
				       $new
				       ? (wxFD_SAVE|wxFD_OVERWRITE_PROMPT)
				       : (wxFD_OPEN|wxFD_FILE_MUST_EXIST)
				     );
	$picker_event = Wx::FileDirPickerEvent->new
	  ( wxEVT_COMMAND_FILEPICKER_CHANGED, $self->GetId );
    }

    $picker_event->SetEventObject($self);

    $textctrl = Wx::TextCtrl->new( $self, wxID_ANY,
				   "",
				   wxDefaultPosition,
				   wxDefaultSize,
				   0|wxTE_READONLY
				 );

    my $browse = Wx::Button->new( $self, wxID_ANY, "Browse",
				  wxDefaultPosition, wxDefaultSize,
				  0 );

    my $sizer = Wx::BoxSizer->new(wxHORIZONTAL);
    $sizer->Add( $textctrl, 1, wxEXPAND|wxRIGHT, 5 );
    $sizer->Add( $browse, 0, wxLEFT|wxRIGHT, 5 );
    $sizer->Layout;

    Wx::Event::EVT_TEXT( $self, $textctrl->GetId,
			 sub { $self->OnTextChanged($_[1]) } );
    Wx::Event::EVT_SET_FOCUS( $textctrl,
			      sub { $self->OnTextFocusIn($_[1]) } );
    Wx::Event::EVT_KILL_FOCUS( $textctrl,
			      sub { $self->OnTextFocusOut($_[1]) } );

    Wx::Event::EVT_BUTTON( $self, $browse->GetId,
			   sub { $self->OnDialog($_[1]) } );

    $self->SetSizer($sizer);
    $sizer->Fit($self);
    $self->Layout;
}

################ Widget Accessors ################



( run in 1.070 second using v1.01-cache-2.11-cpan-ff9377addf4 )