[recipes] edit page: Populate the temperature popover
- From: Matthias Clasen <matthiasc src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [recipes] edit page: Populate the temperature popover
- Date: Sun, 7 May 2017 00:13:30 +0000 (UTC)
commit 2518cf2878bfdde97da37392c495e7244e8c6fc8
Author: Matthias Clasen <mclasen redhat com>
Date: Sat May 6 20:12:03 2017 -0400
edit page: Populate the temperature popover
When the caredis inside a temperature tag, parse it and
populate the popover from it, and replace instead of inserting
a new new tag in the middle.
src/gr-edit-page.c | 70 ++++++++++++++++++++++++++++++++++++++++++++++++++++
1 files changed, 70 insertions(+), 0 deletions(-)
---
diff --git a/src/gr-edit-page.c b/src/gr-edit-page.c
index acedb31..e42cfce 100644
--- a/src/gr-edit-page.c
+++ b/src/gr-edit-page.c
@@ -684,12 +684,49 @@ add_timer (GtkButton *button, GrEditPage *page)
gtk_popover_popup (GTK_POPOVER (page->timer_popover));
}
+static gboolean
+find_temperature_tag (GtkTextBuffer *buffer,
+ GtkTextIter *start,
+ GtkTextIter *end,
+ char **out_text)
+{
+ GtkTextIter pos;
+ GtkTextIter limit;
+ g_autofree char *text = NULL;
+
+ gtk_text_buffer_get_iter_at_mark (buffer, &pos, gtk_text_buffer_get_insert (buffer));
+ limit = pos;
+ gtk_text_iter_backward_lines (&limit, 1);
+ if (!gtk_text_iter_backward_search (&pos, "[", 0, start, NULL, &limit))
+ return FALSE;
+
+ limit = pos;
+ gtk_text_iter_forward_lines (&limit, 1);
+ if (!gtk_text_iter_forward_search (&pos, "]", 0, NULL, end, &limit))
+ return FALSE;
+
+ if (!gtk_text_iter_in_range (&pos, start, end))
+ return FALSE;
+
+ text = gtk_text_buffer_get_text (buffer, start, end, FALSE);
+ if (strncmp (text, "[temperature:", strlen ("[temperature:")) != 0)
+ return FALSE;
+
+ if (out_text)
+ *out_text = g_steal_pointer (&text);
+
+ return TRUE;
+}
+
static void
temperature_spin_activate (GtkEntry *entry, GrEditPage *self)
{
int value;
g_autofree char *text = NULL;
const char *unit;
+ GtkTextBuffer *buffer;
+ GtkTextIter start;
+ GtkTextIter end;
gtk_spin_button_update (GTK_SPIN_BUTTON (entry));
@@ -700,14 +737,47 @@ temperature_spin_activate (GtkEntry *entry, GrEditPage *self)
unit = "F";
text = g_strdup_printf ("[temperature:%d%s]", value, unit);
+
+ buffer = gtk_text_view_get_buffer (GTK_TEXT_VIEW (self->instructions_field));
+ if (find_temperature_tag (buffer, &start, &end, NULL))
+ gtk_text_buffer_delete (buffer, &start, &end);
add_tag_at_insert (self, text);
gtk_popover_popdown (GTK_POPOVER (self->temperature_popover));
gtk_widget_grab_focus (self->instructions_field);
}
+
+static void
+populate_temperature_popover (GrEditPage *self)
+{
+ GtkTextBuffer *buffer;
+ GtkTextIter start;
+ GtkTextIter end;
+ g_autofree char *text = NULL;
+ const char *unit = "C";
+ int value = 0;
+
+ buffer = gtk_text_view_get_buffer (GTK_TEXT_VIEW (self->instructions_field));
+ if (find_temperature_tag (buffer, &start, &end, &text)) {
+ const char *tmp;
+ char *endp;
+
+ tmp = text + strlen ("[temperature:");
+ value = strtol (tmp, &endp, 10);
+ if (endp[0] == 'F')
+ unit = "F";
+ else
+ unit = "C";
+ }
+
+ gtk_spin_button_set_value (GTK_SPIN_BUTTON (self->temperature_spin), value);
+ gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (self->celsius_button), unit[0] == 'C');
+}
+
static void
add_temperature (GtkButton *button, GrEditPage *page)
{
+ populate_temperature_popover (page);
gtk_popover_popup (GTK_POPOVER (page->temperature_popover));
}
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]