[recipes] Added human_readability function to e.g. display 1 cup rather than 16 tablespoons



commit 00d6f0d95ab6709ae27e438da4a4b4fb07feac37
Author: Paxana Amanda Xander <veganbikepunk gmail com>
Date:   Mon Aug 28 14:28:46 2017 -0700

    Added human_readability function to e.g. display 1 cup rather than 16 tablespoons

 src/gr-convert-units.c      |  103 +++++++++++++++++++++++++++++++++++++++++++
 src/gr-convert-units.h      |    2 +
 src/gr-ingredients-viewer.c |    2 +
 3 files changed, 107 insertions(+), 0 deletions(-)
---
diff --git a/src/gr-convert-units.c b/src/gr-convert-units.c
index 3174c34..d3ea057 100644
--- a/src/gr-convert-units.c
+++ b/src/gr-convert-units.c
@@ -316,3 +316,106 @@ gr_convert_weight (double *amount, GrUnit *unit, GrPreferredUnit user_weight_uni
          *amount = amount1;
          *unit = unit1;
 }
+
+void
+gr_convert_human_readable (double *amount, GrUnit *unit)
+{
+        double amount1 = *amount;
+        GrUnit unit1 = *unit;
+        gboolean unit_changed = TRUE;
+
+        while (unit_changed) {
+                switch (unit1) {
+                case GR_UNIT_GRAM:
+                        if (amount1 >= 1000) {
+                                amount1 = (amount1 / 1000);
+                                unit1 = GR_UNIT_KILOGRAM;
+                        }
+                        break;
+
+                case GR_UNIT_KILOGRAM:
+                        if (amount1 < 1) {
+                                amount1 = (amount1 * 1000);
+                                unit1 = GR_UNIT_GRAM;
+                        }
+                        break;
+
+                case GR_UNIT_POUND:
+                        if (amount1 < 1) {
+                                amount1 = (amount1 * 16);
+                                unit1 = GR_UNIT_OUNCE;
+                        }
+                        break;
+
+                case GR_UNIT_OUNCE:
+                        if (amount1 >= 16) {
+                                amount1 = (amount1 / 16);
+                                unit1 = GR_UNIT_POUND;
+                        }
+                        break;
+
+                case GR_UNIT_TEASPOON:
+                        if (amount1 >= 3) {
+                                amount1 = (amount1 / 3);
+                                unit1 = GR_UNIT_TABLESPOON;
+                        }
+                        break;
+
+                case GR_UNIT_TABLESPOON:
+                        if (amount1 >= 16) {
+                                amount1 = (amount1 / 16);
+                                unit1 = GR_UNIT_CUP;
+                        }
+                        else if ((amount1 < 1) && (amount1 > 0)) {
+                                amount1 = (amount1 * 3);
+                                unit1 = GR_UNIT_TEASPOON;
+                        }
+                        break;
+
+                case GR_UNIT_CUP:
+                        if (amount1 >= 4) {
+                                amount1 = (amount1 / 4);
+                                unit1 = GR_UNIT_QUART;
+                        }
+                        else if (amount1 < 1) {
+                                amount1 = amount1 / 16;
+                                unit1 = GR_UNIT_TABLESPOON;
+                        }
+                        break;
+
+                case GR_UNIT_MILLILITER:
+                        if (amount1 >= 1000) {
+                                amount1 = amount1 / 1000;
+                                unit1 = GR_UNIT_LITER;
+                        }
+                        break;
+
+                case GR_UNIT_DECILITER:
+                        if (amount1 < 1) {
+                                amount1 = amount1 * 100;
+                                unit1 = GR_UNIT_MILLILITER;
+                        }
+                        else if (amount1 >= 10) {
+                                amount1 = amount1 / 10;
+                                unit1 = GR_UNIT_LITER;
+                        }
+                        break;
+
+                case GR_UNIT_LITER:
+                        if (amount1 < 1) {
+                                amount1 = amount1 * 1000;
+                                unit1 = GR_UNIT_MILLILITER;
+                        }
+                        break;
+
+                default: ;
+                }
+
+                if (*unit == unit1) {
+                        unit_changed = FALSE;
+                }
+
+                *amount = amount1;
+                *unit = unit1;
+        }
+}
diff --git a/src/gr-convert-units.h b/src/gr-convert-units.h
index cb56a3e..f5553d7 100644
--- a/src/gr-convert-units.h
+++ b/src/gr-convert-units.h
@@ -46,5 +46,7 @@ GrPreferredUnit     gr_convert_get_weight_unit          (void);
 void                gr_convert_temp                     (int *num, int *unit, int user_unit);
 void                gr_convert_volume                   (double *amount, GrUnit *unit, GrPreferredUnit 
user_volume_unit);
 void                gr_convert_weight                   (double *amount, GrUnit *unit, GrPreferredUnit 
user_weight_unit);
+void                gr_convert_human_readable           (double *amount, GrUnit *unit);
+
 
 G_END_DECLS
diff --git a/src/gr-ingredients-viewer.c b/src/gr-ingredients-viewer.c
index 31a6ed9..68d0f1e 100644
--- a/src/gr-ingredients-viewer.c
+++ b/src/gr-ingredients-viewer.c
@@ -340,6 +340,8 @@ gr_ingredients_viewer_set_ingredients (GrIngredientsViewer *viewer,
                         }
                 }
 
+                gr_convert_human_readable (&amount, &unit);
+
                 char *a_final = gr_number_format (amount);
                 const char *u_final = gr_unit_get_name (unit);
 


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]