/*
* Copyright (C) 2014 ELITA ASTRID ANGELINA LOBO
*
* This program is free software: you can redistribute it and/or modify it under
* the terms of the GNU General Public License as published by the Free Software
* Foundation, either version 3 of the License, or (at your option) any later
* version. See http://www.gnu.org/copyleft/gpl.html the full text of the
* license.
*/
[GtkTemplate (ui = "/org/gnome/calculator/history-view.ui")]
public class HistoryView : Gtk.ScrolledWindow
{
string? last_answer = null;
string? last_equation = null;
Serializer serializer_four = new Serializer (DisplayFormat.AUTOMATIC, 10, 4);
Serializer serializer_nine = new Serializer (DisplayFormat.AUTOMATIC, 10, 9);
[GtkChild]
Gtk.ListBox listbox;
public signal void answer_clicked (string ans);
public signal void equation_clicked (string equation);
public signal void row_added ();
[GtkCallback]
public void scroll_bottom ()
{
var adjustment = listbox.get_adjustment ();
// TODO make this dynamic, do not hardcode listbox_height_request/number_of_rows
int width, height;
get_size_request (out width, out height);
adjustment.page_size = height / 3;
adjustment.set_value (adjustment.get_upper () - adjustment.get_page_size ());
}
public void insert_entry (string equation, Number answer, int number_base, uint representation_base)
{
serializer_four.set_base (number_base);
serializer_nine.set_base (number_base);
serializer_four.set_representation_base (representation_base);
serializer_nine.set_representation_base (representation_base);
var answer_nine_digits = serializer_nine.to_string (answer);
var answer_four_digits = serializer_four.to_string (answer);
if (last_answer == answer_nine_digits && last_equation == equation)
return;
var entry = new HistoryEntry (equation, answer_four_digits, answer_nine_digits);
listbox.insert (entry, -1);
entry.show ();
entry.answer_clicked.connect ((ans) => { this.answer_clicked (ans); });
entry.equation_clicked.connect ((eq) => { this.equation_clicked (eq); });
last_answer = answer_nine_digits;
last_equation = equation;
row_added ();
}
public void clear ()
{
listbox.foreach ((child) => { listbox.remove(child); });
}
}
[GtkTemplate (ui = "/org/gnome/calculator/history-entry.ui")]
public class HistoryEntry : Gtk.ListBoxRow
{
[GtkChild]
Gtk.Label equation_label;
[GtkChild]
Gtk.Label answer_label;
public signal void answer_clicked (string ans);
public signal void equation_clicked (string equation);
public HistoryEntry (string equation,
string answer_four_digits,
string answer_nine_digits)
{
equation_label.set_tooltip_text (equation);
answer_label.set_tooltip_text (answer_nine_digits);
equation_label.set_text (equation);
answer_label.set_text (answer_four_digits);
}
[GtkCallback]
public bool answer_clicked_cb (Gtk.Widget widget, Gdk.EventButton eventbutton)
{
var answer = answer_label.get_text ();
if (answer != null)
answer_clicked (answer);
return true;
}
[GtkCallback]
private bool equation_clicked_cb (Gtk.Widget widget, Gdk.EventButton eventbutton)
{
var equation = equation_label.get_text ();
if (equation != null)
equation_clicked (equation);
return true;
}
}