]> git.ipfire.org Git - thirdparty/newt.git/commitdiff
Add a numeric percentage count to the scale widget.
authorjorton <jorton>
Tue, 11 Jun 2002 12:52:11 +0000 (12:52 +0000)
committerjorton <jorton>
Tue, 11 Jun 2002 12:52:11 +0000 (12:52 +0000)
Patch by: Mark Cox <mjc@redhat.com>

* scale.c: Add 'percentage' field to struct scale.
(newtScale): Initialize percentage field.
(newtScaleSet): Update percentage field.
(scaleDraw): Draw in the percentage count.

* newt.c: Use "white" as the default foreground colour for the
scale widget.

newt.c
scale.c

diff --git a/newt.c b/newt.c
index 685dead935242c83fd61329b1a64e06e647f4091..48426e4d108264acc37608494bda3213bcf7dbd4 100644 (file)
--- a/newt.c
+++ b/newt.c
@@ -265,9 +265,9 @@ void newtSetColors(struct newtColors colors) {
     SLtt_set_color(NEWT_COLORSET_ROOTTEXT, "", colors.rootTextFg,
                        colors.rootTextBg);
 
-    SLtt_set_color(NEWT_COLORSET_EMPTYSCALE, "", "black",
+    SLtt_set_color(NEWT_COLORSET_EMPTYSCALE, "", "white",
                        colors.emptyScale);
-    SLtt_set_color(NEWT_COLORSET_FULLSCALE, "", "black",
+    SLtt_set_color(NEWT_COLORSET_FULLSCALE, "", "white",
                        colors.fullScale);
     SLtt_set_color(NEWT_COLORSET_DISENTRY, "", colors.disabledEntryFg,
                        colors.disabledEntryBg);
diff --git a/scale.c b/scale.c
index 11c72ccf5d2ab8a12d27d5c3cf9e94411b863abe..f898916b339327b8b18c1931dfd2441bd2833b7e 100644 (file)
--- a/scale.c
+++ b/scale.c
@@ -8,6 +8,7 @@
 struct scale {
     long long fullValue;
     int charsSet;
+    unsigned int percentage;
 };
 
 static void scaleDraw(newtComponent co);
@@ -38,18 +39,23 @@ newtComponent newtScale(int left, int top, int width, long long fullValue) {
 
     sc->fullValue = fullValue;
     sc->charsSet = 0;
+    sc->percentage = 0;
 
     return co;
 }
 
 void newtScaleSet(newtComponent co, unsigned long long amount) {
     struct scale * sc = co->data;
-    int newCharsSet;
+    int newPercentage;
 
-    newCharsSet = (amount * co->width) / sc->fullValue;
+    sc->charsSet = (amount * co->width) / sc->fullValue;
+    newPercentage = (amount * 100) / sc->fullValue;
+
+    if (newPercentage > 100)
+       newPercentage = 100;
     
-    if (newCharsSet != sc->charsSet) {
-       sc->charsSet = newCharsSet;
+    if (newPercentage != sc->percentage) {
+       sc->percentage = newPercentage;
        scaleDraw(co);
     }
 }
@@ -57,16 +63,23 @@ void newtScaleSet(newtComponent co, unsigned long long amount) {
 static void scaleDraw(newtComponent co) {
     struct scale * sc = co->data;
     int i;
-
+    int xlabel = (co->width-4) /2;
+    char percent[10];
+    
     if (co->top == -1) return;
 
     newtGotorc(co->top, co->left);
 
-    SLsmg_set_color(NEWT_COLORSET_FULLSCALE);
-    for (i = 0; i < sc->charsSet; i++)
-       SLsmg_write_string(" ");
+    sprintf(percent, "%3d%%", sc->percentage);
 
-    SLsmg_set_color(NEWT_COLORSET_EMPTYSCALE);
-    for (i = 0; i < (co->width - sc->charsSet); i++)
-       SLsmg_write_string(" ");
+    SLsmg_set_color(NEWT_COLORSET_FULLSCALE);
+    
+    for (i = 0; i < co->width; i++) {
+        if (i == sc->charsSet)
+            SLsmg_set_color(NEWT_COLORSET_EMPTYSCALE);
+        if (i >= xlabel && i < xlabel+4)
+            SLsmg_write_char(percent[i-xlabel]);
+        else
+            SLsmg_write_char(' ');
+    }
 }