Gtk2-Ex-DBI
view release on metacpan or search on metacpan
lib/Gtk2/Ex/DBI.pm view on Meta::CPAN
if ( $options->{format} eq "ddmmyyyy" ) {
my ( $dd, $mm, $yyyy ) = split /[-\/]/, $value;
if ( length( $yyyy) == 2 ) {
$yyyy = '20' . $yyyy;
}
$value = $yyyy . "-"
. sprintf( "%02d", $mm ) . "-"
. sprintf( "%02d", $dd );
}
} else {
$value = undef;
}
return $value;
}
sub parse_sql_server_default {
# This sub parses the string returned by SQL Server as the DEFAULT value for a given field
my ( $self, $sqlserver_default ) = @_;
# Find the last space in the string
my $final_space_position = rindex( $sqlserver_default, " " );
if ( ! $final_space_position || $final_space_position == -1 ) {
# Bail out, returning undef.
# We can't use the current default value ( as it's a string definition ), so we might as well just drop it completely
warn "Gtk2::Ex::DBI::parse_sql_server_default failed to find the last space character in the DEFAULT definition:\n$sqlserver_default\n";
return undef;
} else {
# We've got the final space character. Now get everything to the right of it ...
my $default_value = substr( $sqlserver_default, $final_space_position + 1, length( $sqlserver_default ) - $final_space_position - 1 );
# ... and strip off any quotes
$default_value =~ s/'//g;
return $default_value;
}
}
sub build_right_click_menu {
# This sub appends menu items to the right-click menu of widgets
# TODO Add some custom icons, particularly for the calculator ... find is OK
my ( $self, $widget, $menu ) = @_;
my $menu_item;
# Get the parent widget so we know if we're an entry in a combo box or not
my $parent_widget = $widget->get_parent;
# The 'find' menu item
if ( ! $self->{disable_find} && ! exists $self->{sql}->{pass_through} ) {
$menu_item = Gtk2::ImageMenuItem->new_from_stock("gtk-find");
if ( ref $parent_widget eq "Gtk2::ComboBoxEntry" ) {
$menu_item->signal_connect_after( activate => sub { $self->find_dialog($parent_widget); } );
} else {
$menu_item->signal_connect_after( activate => sub { $self->find_dialog($widget); } );
}
$menu->append($menu_item);
$menu_item->show;
}
# The 'calculator' menu item
$menu_item = Gtk2::ImageMenuItem->new("Calculator");
my $pixbuf = $widget->render_icon( "gtk-index", "menu" );
my $image = Gtk2::Image->new_from_pixbuf($pixbuf);
$menu_item->set_image($image);
$menu_item->signal_connect_after( activate => sub { $self->calculator($widget); } );
$menu->append($menu_item);
$menu_item->show;
# The 'refresh combo' menu item
# ( but only if we've got a definition handy to rebuild it with )
if ( ref $parent_widget eq "Gtk2::ComboBoxEntry"
&& $self->{combos}
&& $self->{combos}->{$parent_widget->get_name}
) {
$menu_item = Gtk2::ImageMenuItem->new("Refresh Combo");
$pixbuf = $widget->render_icon( "gtk-refresh", "menu" );
$image = Gtk2::Image->new_from_pixbuf($pixbuf);
$menu_item->set_image($image);
$menu_item->signal_connect_after( activate => sub { $self->setup_combo($parent_widget->get_name); } );
$menu->append($menu_item);
$menu_item->show;
}
return FALSE;
}
sub find_dialog {
# Pops up a find dialog for the user to search the *existing* recordset
my ( $self, $widget ) = @_;
# TODO This needs a rewrite, but I've never used it anyway ...
warn "find_dialog() functionality currently broken ... needs a rewrite ...";
$self->{find}->{window} = Gtk2::Window->new ( "toplevel" );
$self->{find}->{window}->set_title( "Gtk2::Ex::DBI advanced query" );
$self->{find}->{window}->set_default_size( 300, 480 );
$self->{find}->{window}->set_position( "center-always" );
$self->{find}->{criteria_vbox} = Gtk2::VBox->new( 0, 5 );
$self->{find}->{criteria} = ();
# Construct a model to use for the 'operator' combo box in the criteria builder
$self->{find}->{operator_model} = Gtk2::ListStore->new(
"Glib::String",
"Glib::String"
);
foreach my $operator(
[ "=", "equals" ],
[ "!=", "does not equal" ],
[ "<", "less than" ],
[ ">", "greater than" ],
[ "like", "like" ]
) {
$self->{find}->{operator_model}->set(
$self->{find}->{operator_model}->append,
0, $$operator[0],
1, $$operator[1]
);
}
# Construct a model to use for the 'field' combo box in the criteria builder
$self->{find}->{field_model} = Gtk2::ListStore->new( "Glib::String" );
foreach my $field ( $self->fieldlist ) {
$self->{find}->{field_model}->set(
$self->{find}->{field_model}->append,
0, $field
);
}
# Add a blank row ( and set the field of the first criteria row )
( run in 0.682 second using v1.01-cache-2.11-cpan-39bf76dae61 )