summaryrefslogtreecommitdiff
path: root/lib/gcstar/GCSplash.pm
diff options
context:
space:
mode:
Diffstat (limited to 'lib/gcstar/GCSplash.pm')
-rw-r--r--lib/gcstar/GCSplash.pm241
1 files changed, 241 insertions, 0 deletions
diff --git a/lib/gcstar/GCSplash.pm b/lib/gcstar/GCSplash.pm
new file mode 100644
index 0000000..27c0a27
--- /dev/null
+++ b/lib/gcstar/GCSplash.pm
@@ -0,0 +1,241 @@
+package GCSplash;
+
+###################################################
+#
+# Copyright 2005-2010 Christian Jodar
+#
+# This file is part of GCstar.
+#
+# GCstar is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# GCstar is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with GCstar; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+#
+###################################################
+
+use strict;
+use Gtk2;
+
+{
+ package GCSplashWindow;
+ use GCUtils;
+ use base "Gtk2::Window";
+
+ sub new
+ {
+ my $proto = shift;
+ my $class = ref($proto) || $proto;
+ my $self = $class->SUPER::new();
+ bless ($self, $class);
+
+ $self->{parent} = shift;
+ $self->{version} = shift;
+
+ $self->{splashImage} = $self->{parent}->{logosDir}.'splash.png';
+
+ $self->set_decorated(0);
+ $self->set_resizable(0);
+ $self->set_transient_for($self->{parent});
+ $self->set_destroy_with_parent(1);
+ $self->set_modal(1);
+ $self->set_skip_taskbar_hint(1);
+
+ #$self->set_position('center-always');
+ $self->set_keep_above(1);
+
+ $self->{title} = new Gtk2::Label;
+ $self->{title}->set_markup('<span size="xx-large" weight="bold" color="#1c86ee">GCstar</span>');
+ $self->{label} = new Gtk2::Label('test');
+
+ $self->{vbox} = new Gtk2::VBox(0,0);
+
+ $self->{progress} = new Gtk2::ProgressBar;
+ $self->{progress}->set_size_request(240,-1);
+
+ my $color_fg = Gtk2::Gdk::Color->parse('#1c86ee');
+ my $color_progress_bg = Gtk2::Gdk::Color->parse('#ffffff');
+ my $color_progress_fg = Gtk2::Gdk::Color->parse('#1c86ee');
+ my $color_progress_text = Gtk2::Gdk::Color->parse('#cdad00');
+
+ $self->{label}->modify_fg('normal', $color_fg);
+ $self->{progress}->modify_bg('normal', $color_progress_bg);
+ $self->{progress}->modify_bg('active', $color_progress_fg);
+ $self->{progress}->modify_bg('prelight', $color_progress_fg);
+
+ my $eventbox = Gtk2::EventBox->new();
+ my $img = Gtk2::Image->new_from_pixmap (undef, undef);
+ my $inbox = new Gtk2::Fixed;
+ $eventbox->add($inbox);
+ $inbox->put($img,0,0);
+ $inbox->put($self->{title},0,110);
+ $inbox->put($self->{label},0,145);
+ $inbox->put($self->{progress},30,170);
+ $self->{vbox}->pack_start($eventbox,0,0,0);
+
+ $self->add($self->{vbox});
+ my $drawing_area = Gtk2::DrawingArea->new;
+ $self->{vbox}->pack_start($drawing_area,0,0,0);
+ $drawing_area->realize;
+
+ my ($pango_w, $pango_h) = (300,200);
+ my $pixmap = Gtk2::Gdk::Pixmap->new ($drawing_area->window,
+ $pango_w,
+ $pango_h,
+ -1);
+
+ my $pixbuf = Gtk2::Gdk::Pixbuf->new_from_file($self->{splashImage});
+ my ($pm, $m) = $pixbuf->render_pixmap_and_mask(255);
+ $img->set_from_pixmap($pm, $m);
+ $self->shape_combine_mask ($m, 0, 0) if $m;
+ $self->set_position('center');
+ $self->{vbox}->show_all;
+ $self->show;
+ $self->{title}->set_size_request(300,-1);
+ $self->{label}->set_size_request(300,-1);
+
+ return $self;
+ }
+
+ sub init
+ {
+ my $self = shift;
+
+ if ($self->{phase} == 0)
+ {
+ $self->setLabel($self->{parent}->{lang}->{SplashInit});
+ $self->{phase} = 1;
+ }
+ elsif ($self->{phase} == 1)
+ {
+ $self->setProgress(0.0);
+ $self->{parent}->init($self);
+ $self->setProgress(0.1);
+ $self->{phase} = 2;
+ $self->setLabel($self->{parent}->{lang}->{SplashLoad});
+ }
+ elsif ($self->{phase} == 2)
+ {
+ $self->{parent}->loadPrevious($self);
+ $self->setProgress(0.7);
+# $self->{parent}->setSensitive(1);
+ $self->{phase} = 3;
+ $self->setLabel($self->{parent}->{lang}->{SplashSort});
+ }
+ elsif ($self->{phase} == 3)
+ {
+ $self->{parent}->initEnd;
+ $self->setProgress(1.0);
+ $self->{parent}->setSensitive(1);
+ $self->{phase} = 4;
+ $self->setLabel($self->{parent}->{lang}->{SplashDone});
+ }
+ else
+ {
+ $self->hide;
+ $self->{parent}->{initializing} = 0;
+ Glib::Timeout->add(700 ,\&destroyMe, $self);
+ return 0;
+ }
+ Glib::Timeout->add(100 ,\&init, $self);
+
+ return 0;
+ }
+
+ sub setLabel
+ {
+ my ($self, $text) = @_;
+ #$text =~ s|^(.)|<span size="x-large" color="#cdad00">$1</span>|;
+ $self->{label}->set_markup('<b>'.$text.'</b>');
+ }
+
+ sub setItemsTotal
+ {
+ my ($self, $total) = @_;
+ $self->{step} = GCUtils::round($total / 7);
+ $self->{step} = 1 if $self->{step} < 1;
+ $self->{total} = $total;
+ }
+
+ sub setProgressForItemsLoad
+ {
+ my ($self, $current) = @_;
+ if (! $self->{total})
+ {
+ $self->{progress}->set_fraction(0.2);
+ }
+ else
+ {
+ return if ($current % $self->{step});
+ $self->setLabel($self->{parent}->{lang}->{SplashLoad}." <span color='#cdad00'>($current/".$self->{total}.')</span>');
+ $self->{progress}->set_fraction(0.1 + (($current / $self->{total}) * 0.3));
+ }
+ GCUtils::updateUI;
+ }
+
+ sub setProgressForItemsDisplay
+ {
+ my ($self, $current) = @_;
+ if (! $self->{total})
+ {
+ $self->{progress}->set_fraction(0.6);
+ }
+ else
+ {
+ return if ($current % $self->{step});
+ $self->setLabel($self->{parent}->{lang}->{SplashDisplay}." <span color='#cdad00'>($current/".$self->{total}.')</span>');
+ $self->{progress}->set_fraction(0.4 + (($current / $self->{total}) * 0.3));
+ }
+ GCUtils::updateUI;
+ }
+
+ sub setProgressForItemsSort
+ {
+ my ($self, $current) = @_;
+ if (! $self->{total})
+ {
+ $self->{progress}->set_fraction(0.8);
+ }
+ else
+ {
+ return if ($current % $self->{step});
+ $self->setLabel($self->{parent}->{lang}->{SplashSort}." <span color='#cdad00'>($current/".$self->{total}.')</span>');
+ $self->{progress}->set_fraction(0.7 + (($current / $self->{total}) * 0.2));
+ }
+ GCUtils::updateUI;
+ }
+
+ sub setProgress
+ {
+ my ($self, $current) = @_;
+ $self->{progress}->set_fraction($current);
+ GCUtils::updateUI;
+ }
+
+ sub destroyMe
+ {
+ my $self = shift;
+
+ $self->destroy;
+ return 0;
+ }
+
+ sub show
+ {
+ my $self = shift;
+
+ $self->SUPER::show_all;
+ $self->{phase} = 0;
+ Glib::Timeout->add(10 ,\&init, $self);
+ }
+}
+
+1;