#!/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;
}
}