[PATCH] Update Zenity with progress icon notification

Kevin Hunter hunteke at earlham.edu
Mon Sep 19 11:28:43 PDT 2011


Add a "clock" style progress meter for the build via dynamically
generated svg images.  The colors are rather arbitrarily chosen, but
with a very minor attempt to be readable by color-blind folks.  A second
round cut of this patch might make the fill and stroke colors
configurable.
---
 solenv/bin/build.pl |   57 +++++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 57 insertions(+), 0 deletions(-)

diff --git a/solenv/bin/build.pl b/solenv/bin/build.pl
index 865e4d1..93a6952 100755
--- a/solenv/bin/build.pl
+++ b/solenv/bin/build.pl
@@ -1910,10 +1910,67 @@ sub print_announce {
     $announce_string .= $echo . "=============\n";
     print $announce_string;
 
+    my $percent_progress = $modules_started / $total_modules;
     zenity_tooltip("$text");
+    my $zenity_icon = create_progress_svg($percent_progress);
+    zenity_icon( $zenity_icon ) if ( $zenity_icon );
+
     $module_announced{$prj}++;
 };
 
+sub create_progress_svg {
+    # The colors are rather arbitrarily chosen, but with a very minor attempt
+    #   to be readable by color-blind folks.  A second round cut might make
+    #   the fill and stroke colors configurable.
+
+    # This function currently leaves a stray svg file in the tmp directory.
+    #  This shouldn't be too much of a problem, but if the next person in line
+    #  wants to remove this, go ahead.
+
+    if (! zenity_enabled()) {
+        return undef;
+    }
+
+    my $pi = 3.1415923;
+    my $percentage = shift;
+    my $path = $percentage > .5 ? '1,1' : '0,1';
+
+    # Creating a "clock" progress meter that starts from the 12 position; the
+    #  cursor starts in the center (M50,50), then goes immediately vertical
+    #  (v-50).  Associating sin with x, because it's the /difference/ of where
+    #  the cursor needs to move.  Other relevent documentation may be found at
+    #
+    #  http://www.w3.org/TR/SVG11/paths.html#PathElement and
+    #  http://www.w3.org/TR/SVG11/images/paths/arcs02.svg
+
+    my $x = 50 * sin( $percentage * 2 * $pi );
+    my $y = 50 - 50 * cos( $percentage * 2 * $pi );
+
+    my $progress_file = "$tmp_dir/lo_build_progress.svg";
+    open( PROGRESS, '>', $progress_file ) or return undef;
+    print PROGRESS <<EOF;
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<svg
+	xmlns:dc="http://purl.org/dc/elements/1.1/"
+	xmlns:cc="http://creativecommons.org/ns#"
+	xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+	xmlns:svg="http://www.w3.org/2000/svg"
+	xmlns="http://www.w3.org/2000/svg"
+	version="1.1"
+	viewBox="0 0 100 100">
+	<path
+		d="M50,50 v-50 a50,50 0 $path $x,$y z"
+		fill="#aaa"
+		stroke="#00f"
+		stroke-width="1" />
+</svg>
+EOF
+
+    close( PROGRESS );
+
+    return $progress_file;
+}
+
 sub zenity_enabled {
     return 0 if ($ENV{ENABLE_ZENITY} ne "TRUE");
     return 0 if (!defined $ENV{DISPLAY});
-- 
1.7.1


--------------010608080803020902020203--


More information about the LibreOffice mailing list