summaryrefslogtreecommitdiff
path: root/src/gtkdbi.pm
diff options
context:
space:
mode:
Diffstat (limited to 'src/gtkdbi.pm')
-rw-r--r--src/gtkdbi.pm503
1 files changed, 503 insertions, 0 deletions
diff --git a/src/gtkdbi.pm b/src/gtkdbi.pm
new file mode 100644
index 0000000..0a2916c
--- /dev/null
+++ b/src/gtkdbi.pm
@@ -0,0 +1,503 @@
+#!/usr/bin/perl -w
+#
+# This is the basis of an application with signal handlers
+#
+# You can safely edit this file, any changes that you make will be preserved
+# and this file will not be overwritten by the next run of Glade::PerlGenerate
+#
+# Skeleton subs of any missing signal handlers can be copied from
+# /home/ivan/gtkdbi/src/GtkdbiSIGS.pm
+#
+#==============================================================================
+#=== This is the 'window1' class
+#==============================================================================
+package window1;
+require 5.000; use strict 'vars', 'refs', 'subs';
+# UI class 'window1' (version 0.01)
+#
+# Copyright (c) Date Tue Oct 23 01:49:12 PDT 2001
+# Author Ivan Kohler,Chess room,888-670-SISD,215-996-0824 <ivan\@rootwood.haze.st>
+#
+## Unspecified copying policy, please contact the author\n# Ivan Kohler,Chess room,888-670-SISD,215-996-0824 <ivan\@rootwood.haze.st>
+#
+#==============================================================================
+# This perl source file was automatically generated by
+# Glade::PerlGenerate version 0.59 - Wed Jun 20 14:48:25 BST 2001
+# Copyright (c) Author Dermot Musgrove <dermot.musgrove\@virgin.net>
+#
+# from Glade file /home/ivan/gtkdbi/gtkdbi.glade
+# Tue Oct 23 01:53:38 PDT 2001
+#==============================================================================
+
+BEGIN {
+ use src::gtkdbiUI;
+} # End of sub BEGIN
+
+use vars qw($ick_global_window1 $dbh $schema);
+
+sub app_run {
+ my ($class) = @_;
+ #$class->load_translations('Gtkdbi');
+ $class->load_translations('gtkdbi');
+ # You can use the line below to load a test .mo file before it is installed in
+ # the normal place (eg /usr/local/share/locale/fr/LC_MESSAGES/Gtkdbi.mo)
+# $class->load_translations('Gtkdbi', 'test', undef, '/home/ivan/gtkdbi/ppo/Gtkdbi.mo');
+ Gtk->init;
+ my $window = $class->new;
+ $ick_global_window1 = $window;
+ $window->TOPLEVEL->show;
+
+ # Put any extra UI initialisation (eg signal_connect) calls here
+
+ # Now let Gtk handle signals
+ Gtk->main;
+
+ $window->TOPLEVEL->destroy;
+
+ return $window;
+
+} # End of sub app_run
+
+#===============================================================================
+#=== Below are the default signal handlers for 'window1' class
+#===============================================================================
+sub about_Form {
+ my ($class) = @_;
+ my $gtkversion =
+ Gtk->major_version.".".
+ Gtk->minor_version.".".
+ Gtk->micro_version;
+ my $name = $0;
+ my $message =
+ __PACKAGE__." ("._("version")." $VERSION - $DATE)\n".
+ _("Written by")." $AUTHOR \n\n".
+ _("No description")." \n\n".
+ "Gtk ". _("version").": $gtkversion\n".
+ "Gtk-Perl "._("version").": $Gtk::VERSION\n".
+ _("run from file").": $name";
+ __PACKAGE__->message_box($message, _("About")." \u".__PACKAGE__, [_('Dismiss'), _('Quit Program')], 1,
+ "$Glade::PerlRun::pixmaps_directory/glade2perl_logo.xpm", 'left' );
+} # End of sub about_Form
+
+sub destroy_Form {
+ my ($class, $data, $object, $instance) = @_;
+ Gtk->main_quit;
+} # End of sub destroy_Form
+
+sub toplevel_hide { shift->get_toplevel->hide }
+sub toplevel_close { shift->get_toplevel->close }
+sub toplevel_destroy { shift->get_toplevel->destroy }
+
+#==============================================================================
+#=== Below are the signal handlers for 'window1' class
+#==============================================================================
+#sub on_file1_activate {
+# my ($class, $data, $object, $instance, $event) = @_;
+# my $me = __PACKAGE__."->on_file1_activate";
+# # Get ref to hash of all widgets on our form
+# my $form = $__PACKAGE__::all_forms->{$instance};
+#
+# # REPLACE the line below with the actions to be taken when __PACKAGE__."->on_file1_activate." is called
+# __PACKAGE__->show_skeleton_message($me, \@_, __PACKAGE__, "$Glade::PerlRun::pixmaps_directory/glade2perl_logo.xpm");
+#
+#} # End of sub on_file1_activate
+#
+#sub on_help1_activate {
+# my ($class, $data, $object, $instance, $event) = @_;
+# my $me = __PACKAGE__."->on_help1_activate";
+# # Get ref to hash of all widgets on our form
+# my $form = $__PACKAGE__::all_forms->{$instance};
+#
+# # REPLACE the line below with the actions to be taken when __PACKAGE__."->on_help1_activate." is called
+# __PACKAGE__->show_skeleton_message($me, \@_, __PACKAGE__, "$Glade::PerlRun::pixmaps_directory/glade2perl_logo.xpm");
+#
+#} # End of sub on_help1_activate
+
+
+use vars qw($quit_dialog);
+#$quit_dialog = quit_dialog->new;
+
+sub on_quit1_activate {
+ my ($class, $data, $object, $instance, $event) = @_;
+# my $me = __PACKAGE__."->on_quit1_activate";
+ # Get ref to hash of all widgets on our form
+# my $form = $__PACKAGE__::all_forms->{$instance};
+
+ $quit_dialog ||= quit_dialog->new;
+
+ #should disable window1 too
+
+ $quit_dialog->TOPLEVEL->show;
+
+}
+
+{
+ package quit_dialog;
+
+ sub on_quit_no_clicked {
+ my ($class, $data, $object, $instance, $event) = @_;
+ $class->get_toplevel->hide;
+ }
+
+ sub on_quit_yes_clicked {
+ my ($class, $data, $object, $instance, $event) = @_;
+ #exit;
+ Gtk->main_quit;
+ }
+}
+
+use vars qw($about_dialog);
+
+sub on_about1_activate {
+ my ($class, $data, $object, $instance, $event) = @_;
+
+ $about_dialog ||= about_dialog->new;
+
+ #should disable window1 too
+
+ $about_dialog->TOPLEVEL->show;
+
+}
+
+{
+ package about_dialog;
+
+ sub on_about_button_clicked {
+ my ($class, $data, $object, $instance, $event) = @_;
+ $class->get_toplevel->hide;
+ }
+
+}
+
+use vars qw($connect_dialog);
+
+sub on_connect1_activate {
+ my ($class, $data, $object, $instance, $event) = @_;
+
+ $connect_dialog ||= connect_dialog->new;
+
+ $connect_dialog->read_sessions;
+
+ #should disable window1 too
+
+ $connect_dialog->TOPLEVEL->show;
+
+}
+
+{
+ package connect_dialog;
+
+ use vars qw( $datasource $username $password ); #shouldn't be globals...
+# $datasource = '';
+# $username = '';
+# $password = '';
+
+ use vars qw( %session_username %session_password ); #ick more
+
+ use subs qw( save_session );
+
+ sub on_abortconnect_button_clicked {
+ my ($class, $data, $object, $instance, $event) = @_;
+ $class->get_toplevel->hide;
+ }
+
+ sub on_connect_button_clicked {
+ my ($class, $data, $object, $instance, $event) = @_;
+
+ # dbh shouldn't be global. alas. window1 should pass a ref to connect dialog or something.
+ use DBI;
+ use DBIx::DBSchema 0.19;
+ $@ = '';
+ if ( $window1::dbh =
+ eval { DBI->connect($datasource, $username, $password,
+ { RaiseError => 0, PrintError => 0 },
+ )
+ }
+ ) {
+
+ save_session($datasource, $username, $password)
+ unless exists $session_username{$datasource};
+
+ $class->get_toplevel->hide;
+
+ #shouldn't be global
+ $window1::ick_global_window1->TOPLEVEL->set_title("gtkdbi - $datasource");
+ $window1::ick_global_window1->FORM->{'entry1'}->set_text("Connected to $datasource");
+
+ #$window1::schema = new_odbc DBIx::DBSchema $window1::dbh;
+ #DBI::type_info Pg driver returned no results for type 23 at /usr/local/share/perl/5.6.1/DBIx/DBSchema/Table.pm line 172.
+ $window1::schema = new_native DBIx::DBSchema $window1::dbh;
+
+# warn $window1::schema->pretty_print;
+
+ foreach my $table ( $window1::schema->tables ) {
+ #make a
+ warn $table;
+
+ #maybe this should go in a sub around resultview
+ my $sth = $window1::dbh->prepare("SELECT * FROM $table") or do {
+ warn "should pop up an error message ". $window1::dbh->errstr;
+ next;
+ };
+ $sth->execute or do {
+ warn "should pop up an error message ". $sth->errstr;
+ next;
+ };
+
+ my $rows = $sth->fetchall_arrayref({});
+
+ #my $view = resultview->new( $table, [ $schema->table($table)->columns ], [] );
+ #my($window, $label) = resultview->new( $table, [ $window1::schema->table($table)->columns ], [] );
+ my($window, $label) = resultview->new( $table, [ $window1::schema->table($table)->columns ], $rows );
+
+ $window1::ick_global_window1->FORM->{'notebook1'}->append_page($window, $label);
+
+ # $forms->{'window1'}{'notebook1'}->append_page($forms->{'window1'}{'scrolledwindow1'}, $widgets->{'tablelabel1'} );
+# $widgets->{'tablelabel1'}->show;
+# $forms->{'window1'}{'tablelabel1'} = $widgets->{'tablelabel1'};
+# $forms->{'window1'}{'tablelabel1'}->set_alignment(0.5, 0.5 );
+# $forms->{'window1'}{'vbox1'}->set_child_packing($forms->{'window1'}{'notebook1'}, 1, 1, 0, 'start' );
+
+
+ }
+
+ } else {
+ warn "should pop up an error message $DBI::errstr $@";
+ }
+
+ }
+
+ sub on_datasource_entry_changed {
+ my ($class, $data, $object, $instance, $event) = @_;
+ $datasource = $class->get_text;
+ }
+
+ sub on_username_entry_changed {
+ my ($class, $data, $object, $instance, $event) = @_;
+ $username = $class->get_text;
+ }
+
+ sub on_password_entry_changed {
+ my ($class, $data, $object, $instance, $event) = @_;
+ $password = $class->get_text;
+ }
+
+ sub on_savesession_button_clicked {
+ my ($class, $data, $object, $instance, $event) = @_;
+
+ save_session($datasource, $username, $password);
+
+ }
+
+ #sub, not method
+ sub save_session {
+ my($datasource, $username, $password) = @_;
+ #this is very lame and embarassing but it works for now.
+ open(CONF, ">>$ENV{HOME}/.gtkdbi") or do {
+ warn "should pop up an error message: can't open $ENV{HOME}/.gtkdbi: $!";
+ #error dialog
+ return;
+ };
+ print CONF "$datasource\t$username\t$password\n";
+ close CONF;
+ }
+
+ #method
+ sub read_sessions {
+ my $self = shift;
+ #this is very lame and embarassing but it works for now.
+ open(CONF, "<$ENV{HOME}/.gtkdbi") or return;
+ while (<CONF>) {
+ chomp;
+ my($datasource, $username, $password) = split(/\t/, $_);
+ $session_username{$datasource} = $username;
+ $session_password{$datasource} = $password;
+ my $menuitem = new Gtk::MenuItem($datasource);
+ my $class = ref($self);
+ $menuitem->signal_connect('activate', "$class\::on_session_optionmenu_changed", $datasource );
+ $self->FORM->{'session_optionmenu_menu'}->append( $menuitem );
+ $menuitem->show;
+ }
+ close CONF;
+ }
+
+ sub on_session_optionmenu_changed {
+ my( $self, $data ) = @_;
+
+ # via $window1:: ???? ! this is getting worse and worse.
+ $window1::connect_dialog->FORM->{'datasource_entry'}->set_text($data);
+ $window1::connect_dialog->FORM->{'username_entry'}->set_text($session_username{$data});
+ $window1::connect_dialog->FORM->{'password_entry'}->set_text($session_password{$data});
+ }
+
+}
+
+#################################3
+
+package resultview;
+
+sub new {
+ my ( $self, $labeltext, $columns, $rows ) = @_;
+
+ my $widgets;
+ my $forms;
+
+ #ganked from a glade-constructed gtkdbiUI.pm
+
+ # Construct a GtkScrolledWindow 'scrolledwindow1'
+ $widgets->{'scrolledwindow1'} = new Gtk::ScrolledWindow( undef, undef);
+ $widgets->{'scrolledwindow1'}->set_policy('always', 'always' );
+ $widgets->{'scrolledwindow1'}->border_width(0 );
+ $widgets->{'scrolledwindow1'}->hscrollbar->set_update_policy('continuous' );
+ $widgets->{'scrolledwindow1'}->vscrollbar->set_update_policy('continuous' );
+ $widgets->{'scrolledwindow1'}->show;
+ $forms->{'window1'}{'scrolledwindow1'} = $widgets->{'scrolledwindow1'};
+ #
+ # Construct a GtkViewport 'viewport1'
+ $widgets->{'viewport1'} = new Gtk::Viewport(new Gtk::Adjustment( 0.0, 0.0, 101.0, 0.1, 1.0, 1.0), new Gtk::Adjustment( 0.0, 0.0, 101.0, 0.1, 1.0, 1.0) );
+ $widgets->{'viewport1'}->set_shadow_type('in' );
+ $forms->{'window1'}{'scrolledwindow1'}->add_with_viewport($widgets->{'viewport1'} );
+ $widgets->{'viewport1'}->show;
+ $forms->{'window1'}{'viewport1'} = $widgets->{'viewport1'};
+ #
+ # Construct a GtkHBox 'hbox1'
+ $widgets->{'hbox1'} = new Gtk::HBox(0, 0 );
+ $forms->{'window1'}{'viewport1'}->add($widgets->{'hbox1'} );
+ $widgets->{'hbox1'}->show;
+ $forms->{'window1'}{'hbox1'} = $widgets->{'hbox1'};
+
+ foreach my $column ( @$columns ) {
+ #
+ # Construct a GtkVBox 'vbox2'
+ #$widgets->{'vbox2'} = new Gtk::VBox(0, 0 );
+ my $vbox = new Gtk::VBox(0, 0 );
+ #$forms->{'window1'}{'hbox1'}->add($widgets->{'vbox2'} );
+ $forms->{'window1'}{'hbox1'}->add($vbox);
+ #$widgets->{'vbox2'}->show;
+ $vbox->show;
+ #$forms->{'window1'}{'vbox2'} = $widgets->{'vbox2'};
+ #
+ # Construct a GtkButton 'button1'
+ #$widgets->{'button1'} = new Gtk::Button(_('button1'));
+ my $button = new Gtk::Button($column);
+ #$forms->{'window1'}{'vbox2'}->add($widgets->{'button1'} );
+ $vbox->add($button );
+ #$widgets->{'button1'}->show;
+ $button->show;
+ #$forms->{'window1'}{'button1'} = $widgets->{'button1'};
+ #$forms->{'window1'}{'button1'}->can_focus(1 );
+ $button->can_focus(1 );
+ #$forms->{'window1'}{'vbox2'}->set_child_packing($forms->{'window1'}{'button1'}, 0, 0, 0, 'start' );
+ $vbox->set_child_packing($button, 0, 0, 0, 'start' );
+ #
+ # Construct a GtkEntry 'entry2'
+ foreach my $row ( @$rows ) {
+ #$widgets->{'entry2'} = new Gtk::Entry;
+ my $entry = new Gtk::Entry;
+ #$forms->{'window1'}{'vbox2'}->add($widgets->{'entry2'} );
+ $vbox->add($entry );
+ #$widgets->{'entry2'}->show;
+ $entry->show;
+ #$forms->{'window1'}{'entry2'} = $widgets->{'entry2'};
+ $entry->can_focus(1 );
+ #$entry->set_text(_('') );
+ $entry->set_text($row->{$column});
+ $entry->set_max_length(0 );
+ $entry->set_visibility(1 );
+ $entry->set_editable(1 );
+
+ #$forms->{'window1'}{'vbox2'}->set_child_packing($forms->{'window1'}{'entry2'}, 0, 0, 0, 'start' );
+ $vbox->set_child_packing($entry, 0, 0, 0, 'start' );
+ }
+
+ #$forms->{'window1'}{'hbox1'}->set_child_packing($forms->{'window1'}{'vbox2'}, 1, 1, 0, 'start' );
+ $forms->{'window1'}{'hbox1'}->set_child_packing($vbox, 1, 1, 0, 'start' );
+ }
+
+# #
+# # Construct a GtkVBox 'vbox3'
+# $widgets->{'vbox3'} = new Gtk::VBox(0, 0 );
+# $forms->{'window1'}{'hbox1'}->add($widgets->{'vbox3'} );
+# $widgets->{'vbox3'}->show;
+# $forms->{'window1'}{'vbox3'} = $widgets->{'vbox3'};
+# #
+# # Construct a GtkButton 'button2'
+# $widgets->{'button2'} = new Gtk::Button(_('button2'));
+# $forms->{'window1'}{'vbox3'}->add($widgets->{'button2'} );
+# $widgets->{'button2'}->show;
+# $forms->{'window1'}{'button2'} = $widgets->{'button2'};
+# $forms->{'window1'}{'button2'}->can_focus(1 );
+# $forms->{'window1'}{'vbox3'}->set_child_packing($forms->{'window1'}{'button2'}, 0, 0, 0, 'start' );
+# #
+# # Construct a GtkEntry 'entry3'
+# $widgets->{'entry3'} = new Gtk::Entry;
+# $forms->{'window1'}{'vbox3'}->add($widgets->{'entry3'} );
+# $widgets->{'entry3'}->show;
+# $forms->{'window1'}{'entry3'} = $widgets->{'entry3'};
+# $forms->{'window1'}{'entry3'}->can_focus(1 );
+# $forms->{'window1'}{'entry3'}->set_text(_('') );
+# $forms->{'window1'}{'entry3'}->set_max_length(0 );
+# $forms->{'window1'}{'entry3'}->set_visibility(1 );
+# $forms->{'window1'}{'entry3'}->set_editable(1 );
+# $forms->{'window1'}{'vbox3'}->set_child_packing($forms->{'window1'}{'entry3'}, 0, 0, 0, 'start' );
+# $forms->{'window1'}{'hbox1'}->set_child_packing($forms->{'window1'}{'vbox3'}, 1, 1, 0, 'start' );
+
+ #
+ # Construct a GtkLabel 'tablelabel1'
+ #$widgets->{'tablelabel1'} = new Gtk::Label(_('tabletable1'));
+ my $label = new Gtk::Label($labeltext);
+ #$widgets->{'tablelabel1'}->set_justify('center' );
+ $label->set_justify('center' );
+ #$widgets->{'tablelabel1'}->set_line_wrap(0 );
+ $label->set_line_wrap(0 );
+
+ ( $widgets->{'scrolledwindow1'}, $label );
+
+# $forms->{'window1'}{'notebook1'}->append_page($forms->{'window1'}{'scrolledwindow1'}, $widgets->{'tablelabel1'} );
+# $widgets->{'tablelabel1'}->show;
+# $forms->{'window1'}{'tablelabel1'} = $widgets->{'tablelabel1'};
+# $forms->{'window1'}{'tablelabel1'}->set_alignment(0.5, 0.5 );
+# $forms->{'window1'}{'vbox1'}->set_child_packing($forms->{'window1'}{'notebook1'}, 1, 1, 0, 'start' );
+
+
+}
+
+1;
+
+__END__
+
+#===============================================================================
+#==== Documentation
+#===============================================================================
+=pod
+
+=head1 NAME
+
+gtkdbi - version 0.01 Tue Oct 23 01:49:12 PDT 2001
+
+No description
+
+=head1 SYNOPSIS
+
+ use gtkdbi;
+
+ To construct the window object and show it call
+
+ Gtk->init;
+ my $window = window1->new;
+ $window->TOPLEVEL->show;
+ Gtk->main;
+
+ OR use the shorthand for the above calls
+
+ window1->app_run;
+
+=head1 DESCRIPTION
+
+Unfortunately, the author has not yet written any documentation :-(
+
+=head1 AUTHOR
+
+Ivan Kohler,Chess room,888-670-SISD,215-996-0824 <ivan\@rootwood.haze.st>
+
+=cut