#!/usr/bin/python

import sys
try:
	import pygtk
	pygtk.require('2.0')
except:
	pass
try:
	import gtk
	import gtk.glade
except:
	print('GTK not available')
	sys.exit(1)

class Calculator:
	def __init__(self):
		self.gladefile = "calculator.glade"
		self.wTree = gtk.glade.XML(self.gladefile)
		dic = {
			"on_window_calculator_destroy" :self.quit,
			"on_close_clicked" : self.quit,
			"on_CE_clicked" : self.displayCE,
			"on_Clear_clicked" : self.displayClr,
			"on_Modulus_clicked" : self.displayMod,
			"on_Seven_clicked" : self.displaySeven,
			"on_Eight_clicked" : self.displayEight,
			"on_Nine_clicked"  : self.displayNine,
			"on_Divide_clicked" : self.displayDiv,
			"on_Four_clicked" : self.displayFour,
			"on_Five_clicked" : self.displayFive,
			"on_Six_clicked" : self.displaySix,
			"on_Multiply_clicked" : self.displayMultiply,
			"on_One_clicked" : self.displayOne,
			"on_Two_clicked" : self.displayTwo,
			"on_Three_clicked" : self.displayThree,
			"on_Minus_clicked" : self.displayMinus,
			"on_Zero_clicked" : self.displayZero,
			"on_Dot_clicked" : self.displayDot,
			"on_Equal_clicked" : self.displayEqual,
			"on_Add_clicked" : self.displayAdd,
			}
		self.wTree.signal_autoconnect(dic)
		self.window = self.wTree.get_widget("window_calculator")
		self.window.show()

	def displayOperand(self,operand):
		self.wTree.get_widget("displayText").insert_text(operand,position=20)

	def compute(self,operator):
		if operator == 'Clr':
			self.wTree.get_widget("displayText").set_text("")
		if operator == 'CE':
			self.wTree.get_widget("displayText").set_text("0")	
		if operator == "+":
			self.flag = 1
			self.firstOperand = self.wTree.get_widget("displayText").get_text()
			self.wTree.get_widget("displayText").set_text("")
		if operator == '-':
			self.flag = 2
			self.firstOperand = self.wTree.get_widget("displayText").get_text()
			self.wTree.get_widget("displayText").set_text("")
		if operator == '*':
			self.flag = 3
			self.firstOperand = self.wTree.get_widget("displayText").get_text()
			self.wTree.get_widget("displayText").set_text("")
		if operator == '/':
			self.flag = 4
			self.firstOperand = self.wTree.get_widget("displayText").get_text()
			self.wTree.get_widget("displayText").set_text("")
		if operator == '%':
			self.flag = 5
			self.firstOperand = self.wTree.get_widget("displayText").get_text()
			self.wTree.get_widget("displayText").set_text("")
		if operator == '=':
			self.secondOperand = self.wTree.get_widget("displayText").get_text()
			sum1 = float(self.firstOperand)
			sum2 = float(self.secondOperand)
			if self.flag == 1:
				result = sum1 + sum2
			if self.flag == 2:
				result = sum1 - sum2
			if self.flag == 3:
				result = sum1 * sum2
			if self.flag == 4:
				if sum2 == 0.0:
					try:
						result = sum1 / sum2
					except:						
						result = "Math operation error"
				else:
					result = sum1 / sum2
			if self.flag == 5:
				sum1 = int(sum1)
				sum2 = int(sum2)
				result = sum1 % sum2
			self.wTree.get_widget("displayText").set_text(str(result))
	
	def displayClr(self,widget):
		self.compute("Clr")

	def displayCE(self,widget):
		self.compute("CE")	

	def displaySeven(self,widget):
		self.displayOperand("7")

	def displayEight(self,widget):
		self.displayOperand("8")

	def displayNine(self,widget):
		self.displayOperand("9")
	
	def displayFour(self,widget):
		self.displayOperand("4")

	def displayFive(self,widget):
		self.displayOperand("5")

	def displaySix(self,widget):
		self.displayOperand("6")

	def displayOne(self,widget):
		self.displayOperand("1")

	def displayTwo(self,widget):
		self.displayOperand("2")

	def displayThree(self,widget):
		self.displayOperand("3")

	def displayZero(self,widget):
		self.displayOperand("0")

	def displayDot(self,widget):
		self.displayOperand(".")	

	def displayMod(self,widget):
		self.compute("%")	
	
	def displayDiv(self,widget):
		self.compute("/")	

	def displayMultiply(self,widget):
		self.compute("*")
	
	def displayMinus(self,widget):
		self.compute("-")
	
	def displayEqual(self,widget):
		self.compute("=")

	def displayAdd(self,widget):
		self.compute("+")

	def quit(self,widget):
		sys.exit(0)

if __name__ == "__main__":	
	cal = Calculator()
	gtk.main()
	
	
