#!/usr/bin/perl

# Simple tray icon showing the ACPI battery state in the tray icon. 
#
# Written because I couldn't find one that'd work with fbpanel.
# 
# Requirements:
# - libgtk2-perl
# - 'acpi' executable
# - icons in /usr/share/icons/oxygen ('oxygen-icon-theme' package on Debian)
#
# Written by Arnout Engelen, public domain. 
# Need it under another license? Just contact me.

use strict;
use Gtk2 '-init';

sub get_current_status_image
{
  shift =~ /: (\w+)(, (\d+))?\%/;
  my $status = $1;
  my $percent = $3;

  my $result = '/usr/share/icons/oxygen/48x48/status/battery';
  if ($status eq "Charging")
  {
    $result .= '-charging';
  }

  if ($status eq "Full")
  {
    $result .= '-100';
  }
  elsif ($percent <= 20)
  {
    $result .= "-caution";
  }
  elsif ($percent <= 40)
  {
    $result .= "-low";
  }
  elsif ($percent <= 60)
  {
    $result .= "-040";
  }
  elsif ($percent <= 80)
  {
    $result .= "-060";
  }
  else 
  { 
    $result .= "-080"; 
  }

  #print "Status: $status, $percent percent, result $result.png\n";
  return $result . '.png';
}

my $tray = Gtk2::StatusIcon->new;

$tray->set_from_file(get_current_status_image(`acpi`));
$tray->set_visible(1);

Glib::Timeout->add (10 * 1000, sub 
  {
    my $acpi = `acpi`;
    my $image = get_current_status_image($acpi);

    $tray->set_from_file($image);
    $tray->set_tooltip($acpi);

    my $blink = $image =~ /caution/;
    $tray->set_blinking($blink);

    return 1;
  });

Gtk2->main;

