#! perl -- -*- coding: utf-8 -*-
use utf8;
package main;
use strict;
use warnings;
use EekBoek;
use EB;
use EB::Tools::MiniAdm;
use Archive::Zip qw( :ERROR_CODES :CONSTANTS );
our $app;
our $cfg;
our $bin;
our @ebz; # ( [ "filename.ebz", "flags" ], [...], ... )
my @configs = ( qw( schema.dat mutaties.eb relaties.eb opening.eb ) );
package EB::Wx::IniWiz;
use base qw(Wx::Frame);
use EB;
use File::Spec;
use File::Basename;
my @db_drivers;
my @adm_dirs;
my @adm_names;
my $runeb;
my $default = _T("--standaard--");
use Wx qw[
wxADJUST_MINSIZE
wxALIGN_CENTER_VERTICAL
wxALL
wxBITMAP_TYPE_ANY
wxBOTTOM
wxCANCEL
wxCONFIG_USE_LOCAL_FILE
wxDEFAULT_FRAME_STYLE
wxDefaultPosition
wxDefaultSize
wxEXPAND
wxHORIZONTAL
wxICON_ERROR
wxICON_INFORMATION
wxID_CANCEL
wxID_NEW
wxID_OK
wxID_OPEN
wxID_REMOVE
wxLEFT
wxNORMAL
wxOK
wxRA_SPECIFY_ROWS
wxRIGHT
wxSP_ARROW_KEYS
wxTELETYPE
wxTE_AUTO_URL
wxTE_MULTILINE
wxTE_PASSWORD
wxTE_READONLY
wxTOP
wxVERTICAL
];
# Dummy as of Wx 2.8, but still generated by wxGlade.
{ no warnings 'redefine'; sub wxADJUST_MINSIZE() { 0 } }
# The wizard panels.
my $wp;
for ( qw( select admname btw batch db confirm ) ) {
$wp->{$_} = sprintf("wiz_p%02d", 0+keys(%$wp));
}
sub new {
my( $self, $parent, $id, $title, $pos, $size, $style, $name ) = @_;
$parent = undef unless defined $parent;
$id = -1 unless defined $id;
$title = "" unless defined $title;
$pos = wxDefaultPosition unless defined $pos;
$size = wxDefaultSize unless defined $size;
$name = "" unless defined $name;
# begin wxGlade: EB::Wx::IniWiz::new
$style = wxDEFAULT_FRAME_STYLE
unless defined $style;
$self = $self->SUPER::new( $parent, $id, $title, $pos, $size, $style, $name );
$self->{p_dummy} = Wx::Panel->new($self, -1, wxDefaultPosition, wxDefaultSize, );
$self->{wiz_p05} = Wx::WizardPanel->new($self->{p_dummy}, -1, wxDefaultPosition, wxDefaultSize, );
$self->{wiz_p04} = Wx::WizardPanel->new($self->{p_dummy}, -1, wxDefaultPosition, wxDefaultSize, );
$self->{wiz_p03} = Wx::WizardPanel->new($self->{p_dummy}, -1, wxDefaultPosition, wxDefaultSize, );
$self->{wiz_p02} = Wx::WizardPanel->new($self->{p_dummy}, -1, wxDefaultPosition, wxDefaultSize, );
$self->{wiz_p01} = Wx::WizardPanel->new($self->{p_dummy}, -1, wxDefaultPosition, wxDefaultSize, );
$self->{sizer_5_staticbox} = Wx::StaticBox->new($self->{wiz_p01}, -1, _T("Administratie") );
$self->{sizer_8_staticbox} = Wx::StaticBox->new($self->{wiz_p02}, -1, _T("BTW") );
$self->{sizer_6_staticbox} = Wx::StaticBox->new($self->{wiz_p03}, -1, _T("Dagboeken") );
$self->{sizer_4_staticbox} = Wx::StaticBox->new($self->{wiz_p04}, -1, _T("Database") );
$self->{sizer_2_staticbox} = Wx::StaticBox->new($self->{wiz_p05}, -1, _T("Bevestiging") );
$self->{wiz_p00} = Wx::WizardPanel->new($self->{p_dummy}, -1, wxDefaultPosition, wxDefaultSize, );
$self->{t_main} = Wx::TextCtrl->new($self->{p_dummy}, -1, "", wxDefaultPosition, wxDefaultSize, wxTE_MULTILINE|wxTE_READONLY);
$self->{ch_runeb} = Wx::CheckBox->new($self->{p_dummy}, -1, _T("EekBoek opstarten"), wxDefaultPosition, wxDefaultSize, );
$self->{b_details} = Wx::Button->new($self->{p_dummy}, -1, _T("Details..."));
$self->{b_ok} = Wx::Button->new($self->{p_dummy}, wxID_OK, "");
$self->{label_2} = Wx::StaticText->new($self->{wiz_p00}, -1, _T("Welkom bij de EekBoek administratie-wizard."), wxDefaultPosition, wxDefaultSize, );
$self->{rb_select} = Wx::RadioBox->new($self->{wiz_p00}, -1, _T("Maak uw keuze"), wxDefaultPosition, wxDefaultSize, [_T("Een nieuwe administratie aanmaken"), _T("Verbinden met een bestaande administratie")], 0, wxRA_SPECIFY_ROWS);
$self->{label_3} = Wx::StaticText->new($self->{wiz_p01}, -1, _T("Naam"), wxDefaultPosition, wxDefaultSize, );
$self->{t_adm_name} = Wx::TextCtrl->new($self->{wiz_p01}, -1, _T("Mijn eerste EekBoek"), wxDefaultPosition, wxDefaultSize, );
$self->{label_10} = Wx::StaticText->new($self->{wiz_p01}, -1, _T("Code"), wxDefaultPosition, wxDefaultSize, );
$self->{t_adm_code} = Wx::TextCtrl->new($self->{wiz_p01}, -1, "", wxDefaultPosition, wxDefaultSize, );
$self->{l_begin_date_1} = Wx::StaticText->new($self->{wiz_p01}, -1, _T("Begindatum"), wxDefaultPosition, wxDefaultSize, );
$self->{l_begin_date_2} = Wx::StaticText->new($self->{wiz_p01}, -1, _T("01-01-"), wxDefaultPosition, wxDefaultSize, );
$self->{sp_adm_begin} = Wx::SpinCtrl->new($self->{wiz_p01}, -1, "", wxDefaultPosition, wxDefaultSize, wxSP_ARROW_KEYS|wxTE_AUTO_URL, 0, 100, );
$self->{l_template} = Wx::StaticText->new($self->{wiz_p01}, -1, _T("Sjabloon"), wxDefaultPosition, wxDefaultSize, );
$self->{ch_template} = Wx::Choice->new($self->{wiz_p01}, -1, wxDefaultPosition, wxDefaultSize, [_T("Lege administratie")], );
$self->{cb_btw} = Wx::CheckBox->new($self->{wiz_p02}, -1, _T("BTW toepassen op deze administratie"), wxDefaultPosition, wxDefaultSize, );
$self->{l_btw_period} = Wx::StaticText->new($self->{wiz_p02}, -1, _T("Aangifteperiode"), wxDefaultPosition, wxDefaultSize, );
$self->{ch_btw_period} = Wx::Choice->new($self->{wiz_p02}, -1, wxDefaultPosition, wxDefaultSize, [_T("Maand"), _T("Kwartaal"), _T("Jaar")], );
$self->{cb_debiteuren} = Wx::CheckBox->new($self->{wiz_p03}, -1, _T("Verkoop"), wxDefaultPosition, wxDefaultSize, );
$self->{cb_crediteuren} = Wx::CheckBox->new($self->{wiz_p03}, -1, _T("Inkoop"), wxDefaultPosition, wxDefaultSize, );
$self->{cb_kas} = Wx::CheckBox->new($self->{wiz_p03}, -1, _T("Kas"), wxDefaultPosition, wxDefaultSize, );
$self->{cb_bank} = Wx::CheckBox->new($self->{wiz_p03}, -1, _T("Bank"), wxDefaultPosition, wxDefaultSize, );
$self->{label_1} = Wx::StaticText->new($self->{wiz_p04}, -1, _T("Database naam"), wxDefaultPosition, wxDefaultSize, );
$self->{t_db_name} = Wx::TextCtrl->new($self->{wiz_p04}, -1, "", wxDefaultPosition, wxDefaultSize, );
$self->{label_db_type} = Wx::StaticText->new($self->{wiz_p04}, -1, _T("Database type"), wxDefaultPosition, wxDefaultSize, );
$self->{ch_db_driver} = Wx::Choice->new($self->{wiz_p04}, -1, wxDefaultPosition, wxDefaultSize, [_T("PostgreSQL"), _T("SQLite")], );
$self->{label_db_host} = Wx::StaticText->new($self->{wiz_p04}, -1, _T("Server host"), wxDefaultPosition, wxDefaultSize, );
$self->{t_db_host} = Wx::TextCtrl->new($self->{wiz_p04}, -1, "", wxDefaultPosition, wxDefaultSize, );
$self->{label_db_port} = Wx::StaticText->new($self->{wiz_p04}, -1, _T("Server port"), wxDefaultPosition, wxDefaultSize, );
$self->{t_db_port} = Wx::TextCtrl->new($self->{wiz_p04}, -1, "", wxDefaultPosition, wxDefaultSize, );
$self->{label_db_user} = Wx::StaticText->new($self->{wiz_p04}, -1, _T("Database user"), wxDefaultPosition, wxDefaultSize, );
$self->{t_db_user} = Wx::TextCtrl->new($self->{wiz_p04}, -1, "", wxDefaultPosition, wxDefaultSize, );
$self->{label_db_password} = Wx::StaticText->new($self->{wiz_p04}, -1, _T("Password"), wxDefaultPosition, wxDefaultSize, );
$self->{t_db_password} = Wx::TextCtrl->new($self->{wiz_p04}, -1, "", wxDefaultPosition, wxDefaultSize, wxTE_PASSWORD);
$self->{b_db_test} = Wx::Button->new($self->{wiz_p04}, -1, _T("Test database"));
$self->{label_5} = Wx::StaticText->new($self->{wiz_p05}, -1, _T("Druk op 'Voltooien' om de volgende bestanden aan te maken:"), wxDefaultPosition, wxDefaultSize, );
$self->{cb_cr_config} = Wx::CheckBox->new($self->{wiz_p05}, -1, _T("Configuratiebestand"), wxDefaultPosition, wxDefaultSize, );
$self->{cb_cr_schema} = Wx::CheckBox->new($self->{wiz_p05}, -1, _T("Rekeningschema"), wxDefaultPosition, wxDefaultSize, );
$self->{cb_cr_relaties} = Wx::CheckBox->new($self->{wiz_p05}, -1, _T("Relaties (debiteuren en crediteuren)"), wxDefaultPosition, wxDefaultSize, );
$self->{cb_cr_opening} = Wx::CheckBox->new($self->{wiz_p05}, -1, _T("Openingsgegevens"), wxDefaultPosition, wxDefaultSize, );
$self->{cb_cr_mutaties} = Wx::CheckBox->new($self->{wiz_p05}, -1, _T("Mutaties (boekingen)"), wxDefaultPosition, wxDefaultSize, );
$self->{cb_cr_database} = Wx::CheckBox->new($self->{wiz_p05}, -1, _T("Database"), wxDefaultPosition, wxDefaultSize, );
$self->{label_8} = Wx::StaticText->new($self->{wiz_p05}, -1, _T("Let op! Eventuele bestaande bestanden worden overschreven!"), wxDefaultPosition, wxDefaultSize, );
$self->__set_properties();
$self->__do_layout();
Wx::Event::EVT_BUTTON($self, $self->{b_details}->GetId, \&OnDetails);
Wx::Event::EVT_BUTTON($self, $self->{b_ok}->GetId, \&OnOk);
# end wxGlade
# Set defaults for code and db name.
OnSelectAdmName( $self->{wiz} );
my $prev;
for ( my $i = 0; ; $i++ ) {
my $page = sprintf("wiz_p%02d", $i);
last unless exists $self->{$page};
$self->{sz_main}->Detach($self->{$page});
Wx::WizardPageSimple::Chain( $self->{$prev}, $self->{$page} )
if $prev;
$prev = $page;
}
my $dir = dirname( findlib( "templates.txt", "templates" ) );
@ebz = map { [ $_, "" ] } glob( "$dir/*.ebz" );
my $i = 0;
my $dp = quotemeta( _T("Omschrijving").": " );
foreach my $ebz ( @ebz ) {
require Archive::Zip;
my $zip = Archive::Zip->new();
next unless $zip->read($ebz->[0]) == ::AZ_OK;
my $desc = $zip->zipfileComment;
if ( $desc =~ /flags:\s*(.*)/i ) {
$ebz->[1] = $1;
}
if ( $desc =~ /^$dp\s*(.*)$/m ) {
$desc = $1;
}
elsif ( $desc =~ /export van (.*) aangemaakt door eekboek/i ) {
$desc = $1;
}
else {
$desc = $1 if $ebz->[0] =~ m/([^\\\/]+)\.ebz$/i;
}
$desc =~ s/[\n\r]+$//; # can't happen? think again...
$self->{ch_template}->Append($desc);
$i++;
if ( $ebz->[0] =~ /\/sample(db)?\.ebz$/ ) {
$self->{ch_template}->SetSelection($i);
OnSelectTemplate( $self->{wiz} );
}
}
unshift (@ebz, undef ); # skeleton
# Enumerate DB drivers.
my $drivers = find_db_drivers();
$self->{ch_db_driver}->Delete(0) while $self->{ch_db_driver}->GetCount;
foreach ( sort keys %$drivers ) {
push( @db_drivers, $_ );
$self->{ch_db_driver}->Append( $drivers->{$_} );
$self->{ch_db_driver}->SetSelection(@db_drivers-1) if $_ eq "sqlite";
}
#### WARNING: Hard-wired reference to wiz_p04.
# $self->{dc_dbpath} = Wx::DirPickerCtrl->new($self->{wiz_p04}, -1, "", _T("Kies een folder"), wxDefaultPosition, wxDefaultSize, 2 );
# $self->{grid_db}->Replace( $self->{l_placeholder_dbpath}, $self->{dc_dbpath}, 1 );
# $self->{l_placeholder_dbpath}->Destroy;
# $self->{dc_dbpath}->SetToolTipString(_T("Folder waar databases worden opgeslagen (niet voor alle database typen)"));
# $self->{dc_dbpath}->SetPath(_T("-- Huidige directory --"));
Wx::Event::EVT_WIZARD_PAGE_CHANGING($self, $self->{wiz}->GetId, \&OnPageChanging);
Wx::Event::EVT_WIZARD_FINISHED($self, $self->{wiz}->GetId, \&OnWizardFinished );
Wx::Event::EVT_WIZARD_CANCEL($self, $self->{wiz}->GetId, \&OnWizardCancel );
Wx::Event::EVT_RADIOBOX($self->{wiz}, $self->{rb_select}->GetId, \&OnSelectFunction );
Wx::Event::EVT_CHECKBOX($self->{wiz}, $self->{cb_btw}->GetId, \&OnToggleBTW );
Wx::Event::EVT_CHECKBOX($self->{wiz}, $self->{cb_cr_schema}->GetId, \&OnToggleCreate );
Wx::Event::EVT_CHECKBOX($self->{wiz}, $self->{cb_cr_opening}->GetId, \&OnToggleCreate );
Wx::Event::EVT_CHECKBOX($self->{wiz}, $self->{cb_cr_relaties}->GetId, \&OnToggleCreate );
Wx::Event::EVT_CHECKBOX($self->{wiz}, $self->{cb_cr_mutaties}->GetId, \&OnToggleCreate );
Wx::Event::EVT_CHOICE($self->{wiz}, $self->{ch_template}->GetId, \&OnSelectTemplate );
Wx::Event::EVT_TEXT($self->{wiz}, $self->{t_adm_name}->GetId, \&OnSelectAdmName );
Wx::Event::EVT_TEXT($self->{wiz}, $self->{t_adm_code}->GetId, \&OnSelectAdmCode );
Wx::Event::EVT_SPINCTRL($self->{wiz}, $self->{sp_adm_begin}->GetId, \&OnSelectAdmName );
Wx::Event::EVT_CHOICE($self->{wiz}, $self->{ch_db_driver}->GetId, \&OnSelectDbDriver );
Wx::Event::EVT_BUTTON($self->{wiz}, $self->{b_db_test}->GetId, \&OnDbTest);
$self->{wiz}->SetPageSize([600,-1]);
my $icon = Wx::Icon->new();
$icon->CopyFromBitmap(Wx::Bitmap->new("eb.jpg", wxBITMAP_TYPE_ANY));
$self->SetIcon($icon);
$self->{wiz}->SetIcon($icon);
$self->SetSize([450,300]);
$self->Center;
return $self;
}
sub runwiz {
my ( $self, $opts ) = @_;
$self->{wiz}->RunWizard( $self->{$wp->{select}} );
$self->{wiz}->Destroy;
}
sub getadm { # STATIC
my ( $pkg, $opts ) = @_;
chdir($opts->{admdir});
my %h;
$h{$_} = 1 foreach glob( "*/" . $cfg->std_config );
$h{$_} = 1 foreach glob( "*/" . $cfg->std_config_alt );
my @files = keys(%h);
@adm_names = ();
@adm_dirs = ();
foreach ( sort @files ) {
push( @adm_dirs, dirname($_) );
my $desc = $adm_dirs[-1];
if ( open( my $fd, '<:utf8', $adm_dirs[-1]."/opening.eb" ) ) {
while ( <$fd> ) {
next unless /adm_naam\s+"(.+)"/;
$desc = $1;
last;
}
close($fd);
}
push( @adm_names, $desc);
}
my $ret = wxID_NEW;
if ( @adm_dirs ) {
require EB::Wx::IniWiz::OpenDialog;
my $d = EB::Wx::IniWiz::OpenDialog->new( undef, -1,
_T("Kies"),
wxDefaultPosition, wxDefaultSize, );
$d->init( \@adm_names );
$ret = $d->ShowModal;
if ( $ret == wxID_OK ) {
chdir( $adm_dirs[ $d->GetSelection ] ) || die("chdir");
}
elsif ( $ret == wxID_REMOVE ) {
my $sel = $d->GetSelection;
$d->Destroy;
$d = Wx::MessageDialog->new( undef,
$adm_names[$sel] . "\n\n" .
_T("Administratie verwijderen?"),
_T("Verwijderen administratie"),
wxOK|wxCANCEL, wxDefaultPosition );
my $ret = $d->ShowModal;
$d->Destroy;
if ( $ret == wxID_OK ) {
use File::Path qw(remove_tree);
remove_tree( $adm_dirs[$sel], { verbose => 1 } );
}
# Try again.
return getadm( $pkg, $opts );
}
$d->Destroy;
}
return $ret;
}
sub __set_properties {
my $self = shift;
my $year = 1900 + (localtime(time))[5];
$self->{sp_adm_begin}->SetRange( $year-100, $year+100 );
$self->{sp_adm_begin}->SetValue( $year );
# begin wxGlade: EB::Wx::IniWiz::__set_properties
$self->SetTitle(_T("EekBoek MiniAdm Setup"));
$self->{t_main}->SetFont(Wx::Font->new(10, wxTELETYPE, wxNORMAL, wxNORMAL, 0, ""));
$self->{ch_runeb}->SetValue(1);
$self->{b_details}->Show(0);
$self->{b_ok}->Enable(0);
$self->{rb_select}->SetSelection(0);
$self->{wiz_p00}->Show(0);
$self->{t_adm_name}->SetToolTipString(_T("Een omschrijving van deze administratie, bijvoorbeeld \"Boekhouding 2009\"."));
$self->{t_adm_code}->SetToolTipString(_T("Een korte, unieke aanduiding van deze administratie, bijvoorbeeld \"admin2009\"."));
$self->{sp_adm_begin}->SetToolTipString(_T("De begindatum. Het boekjaar begint op 1 januari van dit jaar."));
$self->{ch_template}->SetSelection(0);
$self->{wiz_p01}->Show(0);
$self->{cb_btw}->SetToolTipString(_T("BTW toepassen"));
$self->{cb_btw}->SetValue(1);
$self->{ch_btw_period}->SetToolTipString(_T("De aangifteperiode voor de omzetbelasting"));
$self->{ch_btw_period}->SetSelection(1);
$self->{wiz_p02}->Show(0);
$self->{cb_debiteuren}->SetToolTipString(_T("Verkoop- en Debiteurenadministratie"));
$self->{cb_debiteuren}->SetValue(1);
$self->{cb_crediteuren}->SetToolTipString(_T("Inkoop- en Crediteurenadministratie"));
$self->{cb_crediteuren}->SetValue(1);
$self->{cb_kas}->SetToolTipString(_T("Kas (contant geld)"));
$self->{cb_kas}->SetValue(1);
$self->{cb_bank}->SetToolTipString(_T("Er wordt gebruik gemaakt van een bankrekening"));
$self->{cb_bank}->SetValue(1);
$self->{wiz_p03}->Show(0);
$self->{t_db_name}->SetToolTipString(_T("De naam van de aan te maken database, b.v. \"admin2009\"."));
$self->{ch_db_driver}->SetToolTipString(_T("Het databasesysteem waar de database wordt opgeslagen"));
$self->{ch_db_driver}->SetSelection(1);
$self->{label_db_host}->Enable(0);
$self->{t_db_host}->SetToolTipString(_T("Het systeem waarop de database server draait, indien niet lokaal."));
$self->{t_db_host}->Enable(0);
$self->{label_db_port}->Enable(0);
$self->{t_db_port}->SetToolTipString(_T("De netwerkpoort waarop de database server luistert, indien niet lokaal."));
$self->{t_db_port}->Enable(0);
$self->{label_db_user}->Enable(0);
$self->{t_db_user}->SetToolTipString(_T("De user naam voor de database server."));
$self->{t_db_user}->Enable(0);
$self->{label_db_password}->Enable(0);
$self->{t_db_password}->SetToolTipString(_T("Het password van deze user."));
$self->{t_db_password}->Enable(0);
$self->{wiz_p04}->Show(0);
$self->{cb_cr_config}->SetValue(1);
$self->{cb_cr_schema}->SetToolTipString(_T("Rekeningschema, dagboeken, BTW instellingen"));
$self->{cb_cr_schema}->SetValue(1);
$self->{cb_cr_relaties}->SetToolTipString(_T("Debiteuren en Crediteuren"));
$self->{cb_cr_relaties}->SetValue(1);
$self->{cb_cr_opening}->SetToolTipString(_T("Administratieve gegevens"));
$self->{cb_cr_opening}->SetValue(1);
$self->{cb_cr_mutaties}->SetToolTipString(_T("Mutaties (boekingen)"));
$self->{cb_cr_mutaties}->SetValue(1);
$self->{cb_cr_database}->SetToolTipString(_T("De database wordt aangemaakt en gevuld"));
$self->{cb_cr_database}->SetValue(1);
$self->{wiz_p05}->Show(0);
# end wxGlade
$self->{cb_cr_schema }->SetValue( ! -f "schema.dat" );
$self->{cb_cr_opening }->SetValue( ! -f "opening.eb" );
$self->{cb_cr_mutaties}->SetValue( ! -f "mutaties.eb" );
$self->{cb_cr_relaties}->SetValue( ! -f "relaties.eb" );
$self->{cb_cr_config }->SetValue( ! ( -f $cfg->std_config
||
-f $cfg->std_config_alt ) );
$self->{t_db_name}->SetValue(sprintf("adm%04d",
1900+(localtime(time))[5]));
$self->{t_db_host}->SetValue( $ENV{EB_DB_HOST} || $default );
$self->{t_db_port}->SetValue( $ENV{EB_DB_PORT} || $default );
$self->{t_db_user}->SetValue( $ENV{EB_DB_USER} || $default );
$self->{t_db_password}->SetValue( $ENV{EB_DB_PASSWORD} || "" );
}
sub __do_layout {
my $self = shift;
# begin wxGlade: EB::Wx::IniWiz::__do_layout
$self->{sz_dummy} = Wx::BoxSizer->new(wxHORIZONTAL);
$self->{sz_main} = Wx::BoxSizer->new(wxVERTICAL);
$self->{sizer_1} = Wx::BoxSizer->new(wxHORIZONTAL);
$self->{sizer_2}= Wx::StaticBoxSizer->new($self->{sizer_2_staticbox}, wxVERTICAL);
$self->{grid_sizer_5} = Wx::FlexGridSizer->new(6, 1, 5, 5);
$self->{sizer_16} = Wx::BoxSizer->new(wxHORIZONTAL);
$self->{sizer_4}= Wx::StaticBoxSizer->new($self->{sizer_4_staticbox}, wxVERTICAL);
$self->{grid_db} = Wx::FlexGridSizer->new(7, 2, 5, 5);
$self->{sizer_15} = Wx::BoxSizer->new(wxHORIZONTAL);
$self->{sizer_6}= Wx::StaticBoxSizer->new($self->{sizer_6_staticbox}, wxHORIZONTAL);
$self->{grid_sizer_3} = Wx::FlexGridSizer->new(4, 1, 5, 5);
$self->{sizer_14} = Wx::BoxSizer->new(wxHORIZONTAL);
$self->{sizer_8}= Wx::StaticBoxSizer->new($self->{sizer_8_staticbox}, wxHORIZONTAL);
$self->{grid_sizer_4} = Wx::FlexGridSizer->new(2, 1, 5, 5);
$self->{sizer_7} = Wx::BoxSizer->new(wxHORIZONTAL);
$self->{sizer_13} = Wx::BoxSizer->new(wxHORIZONTAL);
$self->{sizer_5}= Wx::StaticBoxSizer->new($self->{sizer_5_staticbox}, wxHORIZONTAL);
$self->{grid_sizer_2} = Wx::FlexGridSizer->new(4, 2, 5, 5);
$self->{sizer_3} = Wx::BoxSizer->new(wxHORIZONTAL);
$self->{sizer_11} = Wx::BoxSizer->new(wxHORIZONTAL);
$self->{sizer_17} = Wx::BoxSizer->new(wxVERTICAL);
$self->{sizer_9} = Wx::BoxSizer->new(wxVERTICAL);
$self->{sz_buttons} = Wx::BoxSizer->new(wxHORIZONTAL);
$self->{sizer_9}->Add($self->{t_main}, 1, wxBOTTOM|wxEXPAND|wxADJUST_MINSIZE, 10);
$self->{sizer_9}->Add($self->{ch_runeb}, 0, wxBOTTOM|wxADJUST_MINSIZE, 10);
$self->{sz_buttons}->Add(1, 1, 1, wxEXPAND|wxADJUST_MINSIZE, 0);
$self->{sz_buttons}->Add($self->{b_details}, 0, wxLEFT|wxRIGHT|wxADJUST_MINSIZE, 5);
$self->{sz_buttons}->Add($self->{b_ok}, 0, wxADJUST_MINSIZE, 0);
$self->{sizer_9}->Add($self->{sz_buttons}, 0, wxEXPAND, 0);
$self->{sz_main}->Add($self->{sizer_9}, 1, wxALL|wxEXPAND, 10);
$self->{sizer_17}->Add($self->{label_2}, 1, wxEXPAND|wxADJUST_MINSIZE, 0);
$self->{sizer_17}->Add($self->{rb_select}, 1, wxEXPAND|wxADJUST_MINSIZE, 10);
$self->{sizer_11}->Add($self->{sizer_17}, 1, wxEXPAND, 0);
$self->{wiz_p00}->SetSizer($self->{sizer_11});
$self->{sz_main}->Add($self->{wiz_p00}, 0, wxEXPAND, 0);
$self->{grid_sizer_2}->Add($self->{label_3}, 0, wxALIGN_CENTER_VERTICAL|wxADJUST_MINSIZE, 0);
$self->{grid_sizer_2}->Add($self->{t_adm_name}, 0, wxEXPAND|wxADJUST_MINSIZE, 0);
$self->{grid_sizer_2}->Add($self->{label_10}, 0, wxALIGN_CENTER_VERTICAL|wxADJUST_MINSIZE, 0);
$self->{grid_sizer_2}->Add($self->{t_adm_code}, 0, wxEXPAND|wxADJUST_MINSIZE, 0);
$self->{grid_sizer_2}->Add($self->{l_begin_date_1}, 0, wxALIGN_CENTER_VERTICAL|wxADJUST_MINSIZE, 0);
$self->{sizer_3}->Add($self->{l_begin_date_2}, 0, wxALIGN_CENTER_VERTICAL|wxADJUST_MINSIZE, 0);
$self->{sizer_3}->Add($self->{sp_adm_begin}, 0, wxADJUST_MINSIZE, 0);
$self->{grid_sizer_2}->Add($self->{sizer_3}, 1, wxEXPAND, 0);
$self->{grid_sizer_2}->Add($self->{l_template}, 0, wxALIGN_CENTER_VERTICAL|wxADJUST_MINSIZE, 0);
$self->{grid_sizer_2}->Add($self->{ch_template}, 0, wxEXPAND|wxADJUST_MINSIZE, 0);
$self->{grid_sizer_2}->AddGrowableCol(1);
$self->{sizer_5}->Add($self->{grid_sizer_2}, 1, wxALL|wxEXPAND, 5);
$self->{sizer_13}->Add($self->{sizer_5}, 1, wxEXPAND, 0);
$self->{wiz_p01}->SetSizer($self->{sizer_13});
$self->{sz_main}->Add($self->{wiz_p01}, 0, wxEXPAND, 0);
$self->{grid_sizer_4}->Add($self->{cb_btw}, 0, wxADJUST_MINSIZE, 0);
$self->{sizer_7}->Add($self->{l_btw_period}, 0, wxALIGN_CENTER_VERTICAL|wxADJUST_MINSIZE, 0);
$self->{sizer_7}->Add($self->{ch_btw_period}, 0, wxLEFT|wxEXPAND|wxADJUST_MINSIZE, 5);
$self->{grid_sizer_4}->Add($self->{sizer_7}, 1, wxEXPAND, 0);
$self->{grid_sizer_4}->AddGrowableCol(0);
$self->{sizer_8}->Add($self->{grid_sizer_4}, 1, wxALL|wxEXPAND, 5);
$self->{sizer_14}->Add($self->{sizer_8}, 1, wxEXPAND, 0);
$self->{wiz_p02}->SetSizer($self->{sizer_14});
$self->{sz_main}->Add($self->{wiz_p02}, 0, wxEXPAND, 0);
$self->{grid_sizer_3}->Add($self->{cb_debiteuren}, 0, wxALIGN_CENTER_VERTICAL|wxADJUST_MINSIZE, 0);
$self->{grid_sizer_3}->Add($self->{cb_crediteuren}, 0, wxALIGN_CENTER_VERTICAL|wxADJUST_MINSIZE, 0);
$self->{grid_sizer_3}->Add($self->{cb_kas}, 0, wxADJUST_MINSIZE, 0);
$self->{grid_sizer_3}->Add($self->{cb_bank}, 0, wxADJUST_MINSIZE, 0);
$self->{sizer_6}->Add($self->{grid_sizer_3}, 1, wxALL|wxEXPAND, 5);
$self->{sizer_15}->Add($self->{sizer_6}, 1, wxEXPAND, 0);
$self->{wiz_p03}->SetSizer($self->{sizer_15});
$self->{sz_main}->Add($self->{wiz_p03}, 0, wxEXPAND, 0);
$self->{grid_db}->Add($self->{label_1}, 0, wxALIGN_CENTER_VERTICAL|wxADJUST_MINSIZE, 0);
$self->{grid_db}->Add($self->{t_db_name}, 0, wxEXPAND|wxADJUST_MINSIZE, 0);
$self->{grid_db}->Add($self->{label_db_type}, 0, wxALIGN_CENTER_VERTICAL|wxADJUST_MINSIZE, 0);
$self->{grid_db}->Add($self->{ch_db_driver}, 0, wxEXPAND|wxADJUST_MINSIZE, 0);
$self->{grid_db}->Add($self->{label_db_host}, 0, wxALIGN_CENTER_VERTICAL|wxADJUST_MINSIZE, 0);
$self->{grid_db}->Add($self->{t_db_host}, 0, wxEXPAND|wxADJUST_MINSIZE, 0);
$self->{grid_db}->Add($self->{label_db_port}, 0, wxALIGN_CENTER_VERTICAL|wxADJUST_MINSIZE, 0);
$self->{grid_db}->Add($self->{t_db_port}, 0, wxEXPAND|wxADJUST_MINSIZE, 0);
$self->{grid_db}->Add($self->{label_db_user}, 0, wxALIGN_CENTER_VERTICAL|wxADJUST_MINSIZE, 0);
$self->{grid_db}->Add($self->{t_db_user}, 0, wxEXPAND|wxADJUST_MINSIZE, 0);
$self->{grid_db}->Add($self->{label_db_password}, 0, wxALIGN_CENTER_VERTICAL|wxADJUST_MINSIZE, 0);
$self->{grid_db}->Add($self->{t_db_password}, 0, wxEXPAND|wxADJUST_MINSIZE, 0);
$self->{grid_db}->Add(0, 0, 0, wxEXPAND|wxADJUST_MINSIZE, 0);
$self->{grid_db}->Add($self->{b_db_test}, 0, wxADJUST_MINSIZE, 0);
$self->{grid_db}->AddGrowableCol(1);
$self->{sizer_4}->Add($self->{grid_db}, 1, wxALL|wxEXPAND, 5);
$self->{sizer_16}->Add($self->{sizer_4}, 1, wxEXPAND, 0);
$self->{wiz_p04}->SetSizer($self->{sizer_16});
$self->{sz_main}->Add($self->{wiz_p04}, 0, wxEXPAND, 0);
$self->{sizer_2}->Add($self->{label_5}, 0, wxLEFT|wxRIGHT|wxTOP|wxADJUST_MINSIZE, 5);
$self->{grid_sizer_5}->Add($self->{cb_cr_config}, 0, wxADJUST_MINSIZE, 0);
$self->{grid_sizer_5}->Add($self->{cb_cr_schema}, 0, wxADJUST_MINSIZE, 0);
$self->{grid_sizer_5}->Add($self->{cb_cr_relaties}, 0, wxADJUST_MINSIZE, 0);
$self->{grid_sizer_5}->Add($self->{cb_cr_opening}, 0, wxADJUST_MINSIZE, 0);
$self->{grid_sizer_5}->Add($self->{cb_cr_mutaties}, 0, wxADJUST_MINSIZE, 0);
$self->{grid_sizer_5}->Add($self->{cb_cr_database}, 0, wxADJUST_MINSIZE, 0);
$self->{sizer_2}->Add($self->{grid_sizer_5}, 1, wxALL|wxEXPAND, 5);
$self->{sizer_2}->Add($self->{label_8}, 0, wxALL|wxADJUST_MINSIZE, 5);
$self->{sizer_1}->Add($self->{sizer_2}, 1, wxEXPAND, 5);
$self->{wiz_p05}->SetSizer($self->{sizer_1});
$self->{sz_main}->Add($self->{wiz_p05}, 0, wxEXPAND, 0);
$self->{p_dummy}->SetSizer($self->{sz_main});
$self->{sz_dummy}->Add($self->{p_dummy}, 1, wxEXPAND, 0);
$self->SetSizer($self->{sz_dummy});
$self->{sz_dummy}->Fit($self);
$self->Layout();
# end wxGlade
}
sub OnSelectFunction {
my ( $self, $event ) = @_;
$self = $self->GetParent;
my @hideshow = qw( l_begin_date_1 l_begin_date_2 sp_adm_begin l_template ch_template );
my @hideshow0 = qw( schema relaties mutaties database );
my @hideshow1 = qw( config opening );
if ( $self->{rb_select}->GetSelection == 0 ) {
Wx::WizardPageSimple::Chain( $self->{$wp->{select}}, $self->{$wp->{admname}} );
Wx::WizardPageSimple::Chain( $self->{$wp->{admname}}, $self->{$wp->{btw}} );
Wx::WizardPageSimple::Chain( $self->{$wp->{btw}}, $self->{$wp->{batch}} );
Wx::WizardPageSimple::Chain( $self->{$wp->{batch}}, $self->{$wp->{db}} );
Wx::WizardPageSimple::Chain( $self->{$wp->{db}}, $self->{$wp->{confirm}} );
foreach ( @hideshow0, @hideshow1 ) {
$self->{"cb_cr_$_"}->SetValue(1);
$self->{"cb_cr_$_"}->Enable(1);
$self->{"cb_cr_$_"}->Show(1);
}
foreach ( @hideshow ) {
$self->{$_}->Show(1);
}
$self->Layout;
OnSelectTemplate( $self->{wiz} );
}
else {
Wx::WizardPageSimple::Chain( $self->{$wp->{select}}, $self->{$wp->{admname}} );
Wx::WizardPageSimple::Chain( $self->{$wp->{admname}}, $self->{$wp->{db}} );
Wx::WizardPageSimple::Chain( $self->{$wp->{db}}, $self->{$wp->{confirm}} );
for ( my $i = 0; $i < @db_drivers; $i++ ) {
next unless $db_drivers[$i] eq "postgres";
$self->{ch_db_driver}->SetSelection($i);
OnSelectDbDriver( $self->{wiz} );
last;
}
foreach ( @hideshow1 ) {
$self->{"cb_cr_$_"}->SetValue(1);
$self->{"cb_cr_$_"}->Enable(0);
}
foreach ( @hideshow0 ) {
$self->{"cb_cr_$_"}->SetValue(0);
$self->{"cb_cr_$_"}->Show(0);
}
foreach ( @hideshow ) {
$self->{$_}->Show(0);
}
$self->Layout;
}
}
sub OnPageChanging {
my ($self, $event) = @_;
return unless $event->GetDirection;
my $page = $event->GetPage;
if ( $page->GetId == $self->{$wp->{admname}}->GetId ) {
my $nu = sub {
my $m = Wx::MessageDialog->new($self->{wiz}, shift,
_T("Niet uniek"),
wxICON_ERROR|wxOK );
my $ret = $m->ShowModal;
$m->Destroy;
return $ret;
};
my $c = $self->{t_adm_name}->GetValue;
foreach ( @adm_names ) {
next unless lc($_) eq lc($c);
$nu->( _T("Er bestaat al een administratie met deze naam.") );
$event->Veto;
# The code will probable also be duplicate.
# Prevent double warning.
return;
}
$c = $self->{t_adm_code}->GetValue;
foreach ( @adm_dirs ) {
next unless lc($_) eq lc($c);
$nu->( _T("Er bestaat al een administratie met deze code.") );
$event->Veto;
last;
}
}
if ( $page->GetId == $self->{$wp->{db}}->GetId ) {
return unless $self->{rb_select}->GetSelection;
my $res = $self->_dbtest;
if ( $res ) {
my $m = Wx::MessageDialog->new($self->{wiz},
$res,
_T("Database Test Resultaat"),
wxICON_INFORMATION | wxOK );
$m->ShowModal;
$m->Destroy;
$event->Veto;
}
}
}
sub OnToggleBTW {
my ($self, $event) = @_;
# wxGlade: EB::Wx::IniWiz::OnToggleBTW <event_handler>
$self = $self->GetParent;
my $x = $self->{cb_btw}->IsChecked ? 1 : 0;
$self->{ch_btw_period}->Enable($x);
$self->{l_btw_period}->Enable($x);
# end wxGlade
}
sub OnSelectTemplate {
my ($self, $event) = @_;
# wxGlade: EB::Wx::IniWiz::OnSelectTemplate <event_handler>
$self = $self->GetParent;
my $x = $self->{ch_template}->GetSelection;
if ( $x ) {
if ( $ebz[$x]->[1] =~ /\B-btw\b/i ) {
$self->{cb_btw}->SetValue(0);
$self->{cb_btw}->Enable(0);
$self->{ch_btw_period}->Enable(0);
$self->{l_btw_period}->Enable(0);
Wx::WizardPageSimple::Chain( $self->{$wp->{admname}}, $self->{$wp->{db}} );
}
else {
$self->{cb_btw}->SetValue(1);
$self->{cb_btw}->Enable(0);
$self->{ch_btw_period}->Enable(1);
$self->{l_btw_period}->Enable(1);
Wx::WizardPageSimple::Chain( $self->{$wp->{admname}}, $self->{$wp->{btw}} );
Wx::WizardPageSimple::Chain( $self->{$wp->{btw}}, $self->{$wp->{db}} );
}
}
else {
$self->{cb_btw}->Enable(1);
Wx::WizardPageSimple::Chain( $self->{$wp->{admname}}, $self->{$wp->{btw}} );
Wx::WizardPageSimple::Chain( $self->{$wp->{btw}}, $self->{$wp->{batch}} );
}
# end wxGlade
}
sub OnSelectAdmName {
my ($self, $event) = @_;
# wxGlade: EB::Wx::IniWiz::OnSelectAdmName <event_handler>
$self = $self->GetParent;
my $x = lc $self->{t_adm_name}->GetValue;
$x =~ s/\s+/_/g;
$x =~ s/\W//g;
$x .= "_" . $self->{sp_adm_begin}->GetValue;
$self->{t_adm_code}->SetValue($x);
$self->{t_db_name}->SetValue($x);
# end wxGlade
}
sub OnSelectAdmCode {
my ($self, $event) = @_;
# wxGlade: EB::Wx::IniWiz::OnSelectAdmCode <event_handler>
$self = $self->GetParent;
my $x = lc $self->{t_adm_code}->GetValue;
$x =~ s/\s+/_/g;
$x =~ s/\W//g;
# $x .= "_" . $self->{sp_adm_begin}->GetValue;
$self->{t_db_name}->SetValue($x);
# end wxGlade
}
sub OnToggleCreate {
my ($self, $event) = @_;
# wxGlade: EB::Wx::IniWiz::OnToggleBTW <event_handler>
$self = $self->GetParent;
my $x = $event->GetEventObject->IsChecked ? 1 : 0;
$self->{ "cb_cr_$_" }->SetValue($x)
foreach qw(schema relaties opening mutaties);
# end wxGlade
}
sub OnWizardFinished {
my ($self, $event) = @_;
# wxGlade: EB::Wx::IniWiz::OnWizardFinished <event_handler>
my %opts;
$opts{adm_naam} = $self->{t_adm_name}->GetValue;
$opts{adm_code} = $self->{t_adm_code}->GetValue;
$opts{adm_begindatum} = $self->{sp_adm_begin}->GetValue;
$opts{db_naam} = $self->{t_db_name}->GetValue;
$opts{db_driver} = $db_drivers[$self->{ch_db_driver}->GetSelection];
$opts{db_host} = $self->{t_db_host}->GetValue
if $self->{t_db_host}->IsEnabled
&& $self->{t_db_host}->GetValue
&& $self->{t_db_host}->GetValue ne $default;
$opts{db_port} = $self->{t_db_port}->GetValue
if $self->{t_db_port}->IsEnabled
&& $self->{t_db_port}->GetValue
&& $self->{t_db_port}->GetValue ne $default;
$opts{db_user} = $self->{t_db_user}->GetValue
if $self->{t_db_user}->IsEnabled
&& $self->{t_db_user}->GetValue
&& $self->{t_db_user}->GetValue ne $default;
$opts{db_password} = $self->{t_db_password}->GetValue
if $self->{t_db_password}->IsEnabled
&& $self->{t_db_password}->GetValue
&& $self->{t_db_password}->GetValue ne "";
#$opts{db_path} = $self->{dc_dbpath}->GetPath
# if $self->{dc_dbpath}->IsEnabled
# && $self->{dc_dbpath}->GetPath !~ /^--/;
$opts{"has_$_"} = $self->{"cb_$_"}->IsChecked
foreach qw(debiteuren crediteuren kas bank btw);
$opts{"create_$_"} = $self->{"cb_cr_$_"}->IsChecked
foreach qw(config schema relaties opening mutaties database);
$opts{adm_btwperiode} = qw(maand kwartaal jaar)[$self->{ch_btw_period}->GetSelection]
if $opts{has_btw};
$opts{template} = $ebz[ $self->{ch_template}->GetSelection ]->[0];
if ( $opts{adm_code} ) {
mkdir($opts{adm_code}) unless -d $opts{adm_code};
chdir($opts{adm_code}) or die("chdir($opts{adm_code}): $!\n");;
}
$self->{b_ok}->Enable(0);
my $log = $self->{t_main};
eval {
EB::Tools::MiniAdm->sanitize(\%opts);
foreach my $c ( qw(config schema relaties opening mutaties database) ) {
my $msg = __x("Aanmaken {cfg}: ", cfg => $c);
$log->AppendText($msg);
if ( $opts{"create_$c"} ) {
if ( $c eq "database" ) {
my $t = $log->GetInsertionPoint;
$log->AppendText(_T("Even geduld..."));
$self->Refresh;
$self->Update;
my $ret;
EB->app_init( { app => $EekBoek::PACKAGE, %opts } );
require EB::Main;
local $::app; # defeat Shell blocking of import command
local @ARGV = qw( --init );
my @msg;
my $out;
# Intercept warn and die.
local $SIG{__WARN__} = sub {
push( @msg, join("\n", @_) );
};
local $SIG{__DIE__} = sub {
push( @msg, "?".join("\n", @_) );
};
# Intercept STDOUT.
open( my $oldout, ">&STDOUT" );
close( STDOUT );
open( STDOUT, '>', \$out ) or die("STDOUT capture fail");
$ret = EB::Main->run;
# Restore STDOUT.
close(STDOUT);
open ( STDOUT, ">&", $oldout );
if ( $ret ) {
$log->Replace($t,
$log->GetInsertionPoint,
_T("Mislukt")."\n");
}
else {
$log->Replace($t,
$log->GetInsertionPoint,
_T("Gereed")."\n");
}
if ( $out || @msg ) {
$self->{b_details}->Show(1);
$self->{sz_buttons}->Layout;
$self->{_details} = "";
if ( @msg ) {
$self->{_details} .= _T("==== Meldingen ====")."\n";
$self->{_details} .= $_ . "\n" for @msg;
}
if ( $out ) {
$self->{_details} .= _T("==== Uitvoer ====")."\n";
$self->{_details} .= $out . "\n";
}
}
$self->Update;
}
else {
$self->Refresh;
my $m = "generate_". $c;
EB::Tools::MiniAdm->$m(\%opts);
$log->AppendText(_T("Gereed")."\n");
$self->Update;
}
}
else {
$log->AppendText(_T("Overgeslagen")."\n");
}
}
};
$log->AppendText($@) if $@;
$self->{b_ok}->Enable(1);
$self->{b_ok}->SetFocus;
unless ( -e $cfg->std_config || -e $cfg->std_config_alt ) {
$self->{ch_runeb}->SetValue(0);
}
elsif ( $self->{rb_select}->GetSelection != 0 ) {
foreach ( qw( opening.eb ) ) {
$self->{ch_runeb}->SetValue(0) unless -s $_;
}
}
else {
foreach ( @configs ) {
$self->{ch_runeb}->SetValue(0) unless -s $_;
}
}
# end wxGlade
}
sub OnWizardCancel {
my ($self, $event) = @_;
# wxGlade: EB::Wx::IniWiz::OnWizardCancel <event_handler>
$self->Show(1);
$self->{t_main}->SetValue(_T("Afgebroken!")."\n");
$self->{b_ok}->Enable(1);
$self->{ch_runeb}->SetValue(0);
# end wxGlade
}
sub OnOk {
my ($self, $event) = @_;
# wxGlade: EB::Wx::IniWiz::OnOk <event_handler>
$runeb = $self->{ch_runeb}->IsChecked;
$self->Destroy;
# end wxGlade
}
sub find_db_drivers {
my %drivers;
if ( $App::Packager::PACKAGED ) {
# Trust packager.
unless ( $App::Packager::PACKAGED ) {
# Ignored, but force packaging.
require EB::DB::Postgres;
require EB::DB::Sqlite;
}
return
{ sqlite => "SQLite",
postgres => "PostgreSQL",
};
}
foreach my $lib ( @INC ) {
next unless -d "$lib/EB/DB";
foreach my $drv ( glob("$lib/EB/DB/*.pm") ) {
open( my $fd, "<", $drv ) or next;
while ( <$fd> ) {
if ( /sub\s+type\s*{\s*"([^"]+)"\s*;?\s*}/ ) {
my $s = $1;
my $t = substr($drv,length("$lib/EB/DB/"));
$t =~ s/\.pm$//;
$drivers{lc($t)} ||= $s;
last;
}
}
close($fd);
}
}
\%drivers;
}
sub OnSelectDbDriver {
my ($self, $event) = @_;
# wxGlade: EB::Wx::IniWiz::OnSelectDbDriver <event_handler>
$self = $self->GetParent;
my $sel = $self->{ch_db_driver}->GetSelection;
my $is_default = $db_drivers[$sel] eq 'sqlite';
for ( qw( label_db_host t_db_host
label_db_port t_db_port
label_db_user t_db_user
label_db_password t_db_password ) ) {
$self->{$_}->Enable( !$is_default );
$_[0]->Layout;
$self->Layout;
}
# end wxGlade
}
sub _dbtest {
my $self = shift;
my $drv = $db_drivers[$self->{ch_db_driver}->GetSelection];
$drv = "EB::DB::" . ucfirst($drv);
my $res;
my $opts;
$opts->{host} = $self->{t_db_host}->GetValue
if $self->{t_db_host}->IsEnabled
&& $self->{t_db_host}->GetValue
&& $self->{t_db_host}->GetValue ne $default;
$opts->{port} = $self->{t_db_port}->GetValue
if $self->{t_db_port}->IsEnabled
&& $self->{t_db_port}->GetValue
&& $self->{t_db_port}->GetValue ne $default;
$opts->{user} = $self->{t_db_user}->GetValue
if $self->{t_db_user}->IsEnabled
&& $self->{t_db_user}->GetValue
&& $self->{t_db_user}->GetValue ne $default;
$opts->{password} = $self->{t_db_password}->GetValue
if $self->{t_db_password}->IsEnabled
&& $self->{t_db_password}->GetValue
&& $self->{t_db_password}->GetValue ne "";
my $db;
if ( $self->{rb_select}->GetSelection == 1 ) {
$db = $self->{t_db_name}->GetValue;
}
eval {
eval "use $drv";
die($@) if $@;
$res = $drv->feature("test") ? $drv->test( $db, $opts ) : '';
};
$res = $@ if $@;
delete( $INC{"EB.pm"} ); # remove fake environment
return $res;
}
sub OnDbTest {
my ($self, $event) = @_;
# wxGlade: EB::Wx::IniWiz::OnDbTest <event_handler>
$self = $self->GetParent;
my $res = $self->_dbtest;
my $icon = ( $res ? wxICON_ERROR : wxICON_INFORMATION );
$icon |= wxOK;
my $m = Wx::MessageDialog->new($self->{wiz},
$res || _T("Succes!"),
_T("Database Test Resultaat"),
$icon );
$m->ShowModal;
$m->Destroy;
# end wxGlade
}
sub OnDetails {
my ($self, $event) = @_;
# wxGlade: EB::Wx::IniWiz::OnDetails <event_handler>
return unless $self->{_details};
$self->{t_main}->SetValue( $self->{_details} );
$self->{_details} = "";
$self->{b_details}->Enable(0);
# end wxGlade
}
# end of class EB::Wx::IniWiz
1;
package Wx::WizardPanel;
use Wx qw[wxBITMAP_TYPE_ANY];
use EB;
#use Wx::Locale gettext => '_T';
sub new {
my ( $class, $self ) = @_;
$self = $self->GetParent;
$self->{wiz} ||= Wx::Wizard->new( $self, -1, _T("The Wiz"),
Wx::Bitmap->new("ebwiz.jpg",
wxBITMAP_TYPE_ANY
));
Wx::WizardPageSimple->new( $self->{wiz} );
}
package EB::Wx::IniWiz;
sub run {
my ( $self, $opts ) = @_;
my $admdir = $opts->{admdir} || $cfg->val(qw(general admdir), $cfg->user_dir("admdir"));
$runeb = 1;
$admdir =~ s/\$([A-Z_]+)/$ENV{$1}/ge;
if ( $admdir ) {
mkdir($admdir) unless -d $admdir;
die("No admdir $admdir: $!") unless -d $admdir;
}
$opts->{admdir} = $admdir;
$runeb = 0;
no warnings 'redefine';
local *Wx::App::OnInit = sub{1};
$app = Wx::App->new();
$app->SetAppName($EekBoek::PACKAGE);
$app->SetVendorName("Squirrel Consultancy");
if ( $^O =~ /^mswin/i ) {
Wx::ConfigBase::Get->SetPath("/ebwxiniwiz");
}
else {
Wx::ConfigBase::Set
(Wx::FileConfig->new
( $app->GetAppName() ,
$app->GetVendorName() ,
$cfg->user_dir("ebwxiniwiz"),
'',
wxCONFIG_USE_LOCAL_FILE,
));
}
Wx::ConfigBase::Get->Write('general/appversion', $EekBoek::VERSION);
my $ret = wxID_NEW;
$ret = EB::Wx::IniWiz->getadm($opts) if $admdir;
if ( $ret == wxID_CANCEL ) {
$runeb = 0;
}
elsif ( $ret == wxID_NEW
|| $ret == wxID_OPEN
|| ! ( -s $cfg->std_config || -s $cfg->std_config_alt ) ) { # getadm will chdir
my $top = EB::Wx::IniWiz->new();
$app->SetTopWindow($top);
$top->Center;
$top->Show(1);
$top->runwiz;
$app->MainLoop;
}
else {
$runeb = 1;
}
$opts->{runeb} = $runeb;
}
1;