#!/usr/bin/python
# simple currency converter example
# todo, read several currencies from file and use combobox

import pygtk
import gtk

class currconv:

    def __init__(self):
        """Constructor"""
        self.tooltips = gtk.Tooltips()
        self.draw()
        self.update(self.win, "EUR")

    def draw(self):
        """Main window layout setup."""
        self.win = gtk.Window(gtk.WINDOW_TOPLEVEL)
        self.win.connect("delete_event", self.delete)
        self.win.set_border_width(10)

        # use table
        self.table = gtk.Table(3, 8)
        self.win.add(self.table)

        # currency entries
        self.textE = self.drawCurr("EUR", 0)
        self.textD = self.drawCurr("USD", 4)

        # equal sign
        l = gtk.Label("=")
        l.set_alignment(0.5, 0.5)
        self.table.attach(l, 3, 4, 0, 1)
        l.show()

        # rate box
        self.textR = gtk.Entry()
        self.textR.set_text("1.45")
        self.textR.set_max_length(10)
        self.textR.connect("activate", self.update, "EUR");
        self.tooltips.set_tip(self.textR, "Enter rate here")
        self.table.attach(self.textR, 1, 4, 2, 3)
        self.textR.show()

        l = gtk.Label("Rate")
        l.set_alignment(0.98, 0.5)
        self.table.attach(l, 0, 1, 2, 3)
        l.show()

        # we could use win.show_all() too
        self.table.show()
        self.win.show()


    def drawCurr(self, unit, column):
        """Draw one currency, returns corresponding Entry"""
        # text entry
        text = gtk.Entry()
        text.set_text("0")
        text.connect("activate", self.update, unit);
        self.tooltips.set_tip(text, "Enter " + unit + " here")
        self.table.attach(text, column, column+1, 0, 1, 0, 0)
        text.show()

        # label
        label = gtk.Label(unit)
        self.table.attach(label, column+1, column+2, 0, 1)
        # keep label close to Entry (align left)
        label.set_alignment(0.02, 0.5)
        label.show()

        # convert button
        but = gtk.Button("Convert")
        but.connect("clicked", self.update, unit);
        self.tooltips.set_tip(but, "Press to convert from " + unit)
        # align middle
        but.set_alignment(0.5, 0.5)
        # 10x10 spacing around
        self.table.attach(but, column, column+1, 1, 2, 0, 0, 10, 10)
        but.show()

        # return reference to the currency text entry
        return text


    def update(self, widget, data):
        """Update all fields from data"""
        rate = float(self.textR.get_text())
        if data == "EUR":
            euro = float(self.textE.get_text())
        elif data == "USD":
            euro = (float(self.textD.get_text())) / rate
        self.textE.set_text("%.2f" % euro)
        self.textD.set_text("%.2f" % (euro * rate))

    def delete(self, widget, event=None):
        """Main program quit callback."""
        gtk.main_quit()
        return False

def main():
    gtk.main()
    return 0

if __name__ == "__main__":
    currconv()
    main()

