#!/usr/bin/perl -w use Gtk2 '-init'; require Gtk2; use scarletMeter qw ( :DATA ); use strict; use warnings; my $uid; my $passwd; my $saved = 0; my $error = ""; &read_configFile; ###gui creeren my $main= new Gtk2::Window( "toplevel" ); $main->set_default_size( 420,200 ); $main->set_position('center'); $main->set_title( "ScarletMeter" ); $main->show(); ###layout aanmaken my $vbox = new Gtk2::VBox( 0, 0 ); $main->add( $vbox ); $vbox->show; my $table = Gtk2::Table->new(3,1,0); $vbox->pack_end($table, 1,1,2); $table->set_row_spacing( 1, 45 ); $table->show; my $table2 = Gtk2::Table->new(2,3,0); $table->attach_defaults($table2, 0,1,2,3); $table2->show; my $table3 = Gtk2::Table->new(2,1,0); $table->attach_defaults($table3, 0,1,1,2); $table3->set_row_spacings( 20 ); $table3->show; ###titel my $title = new Gtk2::Label(""); $title->set_markup("\nScarletMeter\n" ) ; $title->show; ###knoppen my $login = new Gtk2::Button( "Inloggen" ); $login->show; $login->signal_connect("clicked" => \&show_login_dialog ); my $overzicht = new Gtk2::Button( "Overzicht" ); $overzicht->show; $overzicht->signal_connect("clicked", \&show_overzicht_dialog ); my $voorbije_periode = new Gtk2::Button( "Voorbije Periode" ); $voorbije_periode->show; $voorbije_periode->signal_connect("clicked", \&show_voorbije_periode_dialog ); my $refresh = new Gtk2::Button( "Vernieuwen" ); $refresh->signal_connect("clicked", \&get_data ); $refresh->show; my $exit = new Gtk2::Button( "Afsluiten" ); $exit->signal_connect("clicked", sub { Gtk2->main_quit; } ); $exit->show; ###gegevens my $result = new Gtk2::Label(); ###balk my $bar = Gtk2::ProgressBar->new; my $align = Gtk2::Alignment->new(0.5, 0.5, 0.5, 0.0); $align->show; $align->add($bar); ###menu creeren my $menubar = new Gtk2::MenuBar(); $vbox->pack_start($menubar, 0,0,2 ); $menubar->show(); my $file_menu = new Gtk2::Menu(); $file_menu->set_tearoff_state(0); my $help_menu = new Gtk2::Menu(); $help_menu->set_tearoff_state(0); # Create the file menu my $file_menu_login = new Gtk2::MenuItem( "Inloggen" ); my $file_menu_close = new Gtk2::MenuItem( "Afsluiten" ); # Add them to the menu $file_menu->append( $file_menu_login ); $file_menu->append( $file_menu_close ); # Attach the callback functions to the activate signal $file_menu_login->signal_connect( 'activate', \&show_login_dialog ); $file_menu_close->signal_connect( 'activate', sub { Gtk2->main_quit; } ); # We do not need the show the menu, but we do need to show the menu items $file_menu_login->show(); $file_menu_close->show(); my $file_item = new Gtk2::MenuItem( "Bestand" ); $file_item->show(); $file_item->set_submenu( $file_menu ); $menubar->append( $file_item ); #Create the help menu my $help_menu_help = new Gtk2::MenuItem( "Help" ); my $help_menu_about = new Gtk2::MenuItem( "About" ); #add help items to the menu $help_menu->append( $help_menu_help ); $help_menu->append( $help_menu_about ); #attach the callback of the menu $help_menu_help->signal_connect( 'activate', sub { &show_dialog('hallo test', 'help'); }); $help_menu_about->signal_connect( 'activate', sub { &show_dialog("Wout Clymans\nperl/Gtk\n2006", 'about'); }); #show the items $help_menu_help->show(); $help_menu_about->show(); my $help_item = new Gtk2::MenuItem( "Help" ); $help_item->show(); $help_item->set_submenu( $help_menu ); $menubar->append( $help_item ); ###packing $table->attach_defaults($title, 0,1,0,1); $table2->attach_defaults($login, 0,1,0,1); $table2->attach_defaults($overzicht,1,2,0,1); $table2->attach_defaults($voorbije_periode, 2,3,0,1); $table2->attach_defaults($refresh, 0,1,1,2); $table2->attach_defaults($exit,1,2,1,2); $table3->attach_defaults($result, 0,1,0,1); $table3->attach_defaults($align, 0,1,1,2); ###callback registration $main->signal_connect( 'delete_event', sub { Gtk2->main_quit; } ); ###Gtk2 event loop Gtk2->main; #### Functions ##### sub show_dialog { my($message, $title) = @_; my $dialog = Gtk2::MessageDialog->new($main, 'destroy-with-parent', 'info', 'ok', $message); $dialog->set_title($title); $dialog->run; $dialog->destroy; } sub show_login_dialog { my $dialog = Gtk2::Dialog->new("Inloggen", $main, 'destroy-with-parent','gtk-ok' => 'ok', 'gtk-cancel' => 'cancel'); my $txtLogin = Gtk2::Entry->new; $txtLogin->show; my $txtPassword = Gtk2::Entry->new; $txtPassword->set_visibility(0); $txtPassword->set_invisible_char('*'); $txtPassword->show; my $lblLogin = Gtk2::Label->new("Gebruikersnaam:"); $lblLogin->show; my $lblPassword = Gtk2::Label->new("Paswoord:"); $lblPassword->show; my $checkRemember = Gtk2::CheckButton->new_with_label("Gegevens onthouden?"); $checkRemember->show; my $table = Gtk2::Table->new(3,2,1); $dialog->vbox->add($table); $table->show; $table->attach_defaults($lblLogin, 0,1,0,1); $table->attach_defaults($txtLogin, 1,2,0,1); $table->attach_defaults($lblPassword, 0,1,1,2); $table->attach_defaults($txtPassword, 1,2,1,2); $table->attach_defaults($checkRemember, 1,2,2,3); if($saved == 1){ $txtLogin->set_text($uid); $txtPassword->set_text($passwd); $checkRemember->set_active(1); } $dialog->signal_connect('response' , sub { my ($dialog, $response, $data) = @_; if($response eq 'ok'){ $uid = $data->[0]->get_text; chomp($uid); $passwd = $data->[1]->get_text; chomp($passwd); if ($data->[2]->get_active) { &write_configFile; $saved = 1; &get_data; } else { $saved = 0; &get_data; &remove_configFile; } $dialog->destroy; } else{ $dialog->destroy; } },[$txtLogin, $txtPassword, $checkRemember] ); $dialog->run; } sub show_overzicht_dialog { my $dialog = Gtk2::Dialog->new("Overzicht", $main, 'destroy-with-parent','gtk-ok' => 'ok'); my $model = Gtk2::ListStore -> new('Glib::String', 'Glib::String','Glib::String', 'Glib::String'); my $list = Gtk2::TreeView -> new_with_model($model); $dialog->vbox->add($list); my $colDate = Gtk2::TreeViewColumn -> new_with_attributes('Datum',Gtk2::CellRendererText->new, text => 0); my $colDown = Gtk2::TreeViewColumn -> new_with_attributes('Download',Gtk2::CellRendererText->new, text => 1); my $colUp = Gtk2::TreeViewColumn -> new_with_attributes('Upload',Gtk2::CellRendererText->new, text => 2); my $colTotal = Gtk2::TreeViewColumn -> new_with_attributes('Totaal',Gtk2::CellRendererText->new, text => 3); $list->append_column($colDate); $list->append_column($colDown); $list->append_column($colUp); $list->append_column($colTotal); my $i=0; my $y=0; my $z=0; (my @algemene_waarden, $error) = &algemene_waarden; if(&check_error == 1){ my @iter; while($i < @algemene_waarden -1){ $iter[$z] = $model->insert($z); while($y < 4) { $model->set_value($iter[$z], $y, $algemene_waarden[$i]); $i++; $y++; } $y = 0; $z++; } $list->show; $dialog->run; $dialog->destroy; } } sub show_voorbije_periode_dialog { my $dialog = Gtk2::Dialog->new("Voorbije periode", $main, 'destroy-with-parent','gtk-ok' => 'ok'); my $model = Gtk2::ListStore -> new('Glib::String', 'Glib::String','Glib::String', 'Glib::String'); my $list = Gtk2::TreeView -> new_with_model($model); $dialog->vbox->add($list); my $colDate = Gtk2::TreeViewColumn -> new_with_attributes('Periode',Gtk2::CellRendererText->new, text => 0); my $colDown = Gtk2::TreeViewColumn -> new_with_attributes('Download',Gtk2::CellRendererText->new, text => 1); my $colUp = Gtk2::TreeViewColumn -> new_with_attributes('Upload',Gtk2::CellRendererText->new, text => 2); my $colTotal = Gtk2::TreeViewColumn -> new_with_attributes('Totaal',Gtk2::CellRendererText->new, text => 3); $list->append_column($colDate); $list->append_column($colDown); $list->append_column($colUp); $list->append_column($colTotal); my $i=0; my $y=0; my $z=0; my $x=0; my @voorbije_periode = &voorbije_periode; #foutcontrole nog maken! if(&check_error == 1){ my @iter; while($x < @voorbije_periode){ $iter[$z] = $model->insert($z); $model->set_value($iter[$z], $y, $voorbije_periode[0]->[$z]); $x++; $y++; while($y < 4) { $model->set_value($iter[$z], $y, $voorbije_periode[1]->[$i]); $y++; $i++; } $y = 0; $z++; } $list->show; $dialog->run; $dialog->destroy; } } sub read_configFile { if (-e "scarletconf.dat" && -s "scarletconf.dat"){ open(FD, "scarletconf.dat"); my @lines; @lines=; close (FD); $uid = $lines[0]; $passwd = $lines[1]; $saved = 1; } } sub write_configFile { open(DATA,">scarletconf.dat") || warn("Cannot Open File"); print DATA "$uid\n$passwd"; close(DATA); } sub remove_configFile { unlink("scarletconf.dat"); $uid = ""; $passwd = ""; } ##### SCARLETMETER MODULE FUNCTIONS ##### sub get_data { $error = &login($uid,$passwd); if(&check_error == 1){ my $procent = &procent; $bar->set_fraction($procent / 100); $bar->set_text( $procent . '%' ); $bar->show; (my $periode,$error) = &periode; if(&check_error == 1){ (my @tot_waarden, $error) = &totale_waarden; if(&check_error == 1){ $result->set_text( $periode . "\n\nDownload:\t" . $tot_waarden[0] . "\nUpload:\t\t" . $tot_waarden[1] . "\nTotaal:\t\t" . $tot_waarden[2] ); $result->show; print $main->get_size; } } } } sub check_error { if ($error){ &show_dialog($error, 'fout!'); $error = ""; return 0; } else{ return 1; } }