File: main.pm

package info (click to toggle)
dbishell 0.8.9-7
  • links: PTS
  • area: main
  • in suites: sarge
  • size: 828 kB
  • ctags: 1,423
  • sloc: perl: 13,353; makefile: 138; sh: 15
file content (94 lines) | stat: -rw-r--r-- 2,319 bytes parent folder | download | duplicates (3)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
package DBIShell::Gtk::main;

use strict;

use Gtk;
use Gtk::Atoms;
use Gtk::Icon;

use DBIShell::UTIL qw(TRUE FALSE);

use Gtk::Symbols (':func'          ,
		  ':gdk_win_type'  ,
		  ':toolbar_style' ,
		  ':orientation'   ,
		  ':gdk_ev_type'   ,
		  ':state_type'    ,
		  ':signals'       ,
		 );

use constant WINDOW_LABEL => 'dbishell / gtk';

use vars qw(@ISA @EXPORT @EXPORT_OK %EXPORT_TAGS $VERSION);

@ISA         = qw(DBIShell::Gtk);
@EXPORT      = ();
@EXPORT_OK   = ();
%EXPORT_TAGS = ();
$VERSION     = 0.00_01;

sub handler ($;@)
{
    my $sh     = shift( @_ );
    my $button = $_[0];
    my $action = $button->get_user_data();

    local($_) = $action;

  PANEL_ACTION:
    {
	/^connect$/ix && return $sh->DBIShell::Gtk::conn::panel( @_ );
	/^help$   /ix && return $sh->DBIShell::Gtk::help::panel( @_ );
	/^bug$    /ix && return $sh->DBIShell::Gtk::rbug::panel( @_ );
	/^quit$   /ix && return $sh->close_down();
    };
}

sub panel ($)
{
    use constant TL_TXT => 0;
    use constant TL_TIP => 0;
    use constant TL_XPM => 1;
    use constant TL_TX2 => 2;

    my $sh      = $_[0];

    my $idir    = join( '/', $sh->_share(), 'icons' );
    my $handler = sub { handler($sh, @_) };

    my $window  = Gtk::Window  -> new ( GDK_WIN_TYPE_TOPLEVEL );
    my $vbox_0  = Gtk::VBox    -> new ( FALSE, FALSE          );
    my $bpanel  = Gtk::Toolbar -> new ( ORIENTATION_HORIZONTAL,
					TOOLBAR_STYLE_ICONS
				      );
    $sh->{GTK}{CONTROL} = $window;

    $window->set_title( WINDOW_LABEL );
    $window->signal_connect( GDK_EV_TYPE_DESTROY, GTK__MAIN_QUIT );
    $window->signal_connect( GDK_EV_TYPE_DELETE,  GTK__MAIN_QUIT );

    $window->add( $vbox_0 );
    $vbox_0->show();

    foreach (
	     [ Connect => "$idir/connect.xpm", 'connect' ],
	     [ Bug     => "$idir/bug.xpm"    , 'bug'     ],
	     [ Help    => "$idir/help.xpm"   , 'help'    ],
	     [ Quit    => "$idir/quit.xpm"   , 'quit'    ],
	    )
    {
	my $icon = Gtk::Icon::xpm( $window, $_->[TL_XPM], STATE_TYPE_NORMAL );
	my $bt   = $bpanel->append_item( $_->[TL_TXT],
					 $_->[TL_TIP],
					 $_->[TL_TX2],
					 $icon
				       );
	$bt->set_user_data( $_->[TL_TX2] );
	$bt->signal_connect( BUTTON_CLICKED, $handler );
    }

    $bpanel->show();
    $vbox_0->pack_start( $bpanel, FALSE, FALSE, FALSE );

    $window->show();
}