Example #1
0
class App:
	
	
	builder = None
	window = None
	bill_entry = None
	bill_validation_tip_hbox = None
	tree_view = None
	add_button = None
	remove_button = None
	col1 = None
	col1_rend = None
	col2 = None
	col2_rend = None
	store = None
	res_tv = None
	
	asnt = None
	asnt_p1 = None
	asnt_p2 = None
	asnt_p3 = None
	people = []
	
	
	def __init__(self):
		glade_prefix = ""
		try:
			glade_prefix = os.environ["GLADE_PREFIX"]
		except KeyError:
			print "No Glade Environment"
		
		
		
		
		self.asnt = Assistant()
		self.asnt.connect("switch-page",self.__switch_page_cb)
		self.asnt.connect("validate-page",self.__validate_page_cb)
		self.asnt.window.connect("destroy", self.destroy)
		
		self.builder = gtk.Builder()
		self.builder.add_from_file(glade_prefix+"window.glade")
		
		self.asnt_p1 = AssistantPage()
		self.asnt_p1.title_side = "Bill"
		self.asnt_p1.title_top = "Enter Bill Information:"
		self.asnt_p1.widget = self.builder.get_object("vboxPage1")
		self.asnt.add_page(self.asnt_p1)
		
		self.asnt_p2 = AssistantPage()
		self.asnt_p2.title_side = "Finances"
		self.asnt_p2.title_top = "Enter the Party's Financial Information:"
		self.asnt_p2.widget = self.builder.get_object("vboxPage2")
		self.asnt.add_page(self.asnt_p2)
		
		self.asnt_p3 = AssistantPage()
		self.asnt_p3.title_side = "Results"
		self.asnt_p3.title_top = "Results:"
		self.asnt_p3.widget = self.builder.get_object("scrolledwindowPage3")
		self.asnt.add_page(self.asnt_p3)
		
		
		
		
		
		
		
		
		
		
		
		self.people.append(["Person 1","5"])
		self.people.append(["Person 2","5"])
		
		
		
		
		
		
		
		
		
		
		
		
		
		
		# Create View
		self.bill_entry = self.builder.get_object("billEntry")
		self.bill_validation_tip_hbox = self.builder.get_object("billValidationTipHBox")
		#self.bill_entry.modify_base(gtk.STATE_NORMAL,gtk.gdk.color_parse("#FF7F7F"))
		
		
		
		self.tree_view = self.builder.get_object("peopleList")
		
		self.col1_rend = gtk.CellRendererText()
		self.col1_rend.connect("edited",self.col1_edited)
		self.col1_rend.set_property("editable",True)
		self.col1 = gtk.TreeViewColumn("Name", self.col1_rend, text=0)
		self.col1.set_sort_column_id(0)
		self.tree_view.append_column(self.col1)
		
		self.col2_rend = gtk.CellRendererText()
		self.col2_rend.connect("edited",self.col2_edited)
		self.col2_rend.set_property("editable",True)
		self.col2 = gtk.TreeViewColumn("Earnings", self.col2_rend, text=1)
		self.col2.set_sort_column_id(1)
		self.tree_view.append_column(self.col2)
		
		self.add_button = self.builder.get_object("addButton")
		self.add_button.connect("clicked",self.p2_add_row)
		self.remove_button = self.builder.get_object("removeButton")
		self.remove_button.connect("clicked",self.p2_remove_row)
		
		self.res_tv = self.builder.get_object("resultTextview")
		
		
		# Create Store
		self.store = gtk.ListStore(str, str)
		for person in self.people:
			self.store.append(person)
		
		self.tree_view.set_model(self.store)
		
		
		
		self.tree_view.set_model(self.store)
		self.asnt.show()
	
	
	
	
	
	
	
	
	
	def p2_add_row(self,widget,data=None):
		self.store.append(["New Party","0"])
		self.people.append(["New Party","0"])
		
		iter = self.store.get_iter_from_string(str(len(self.people)-1))
		path = self.store.get_path(iter)
		self.tree_view.set_cursor(path,self.col1,True)
	
	def p2_remove_row(self,widget,data=None):
		
		selection = self.tree_view.get_selection()
		model, iter = selection.get_selected()
		if None != iter:
			path = model.get_path(iter)
			row = path[0] # We can only select 1 so just access the first index
			del self.people[row]
			self.store.remove(iter)
	
	def col1_edited(self,renderer,path,newtext):
		iter = self.store.get_iter_from_string(path)
		self.store.set(iter,0,newtext)
		self.people[int(path)][0] = newtext
	
	def col2_edited(self,renderer,path,newtext):
		iter = self.store.get_iter_from_string(path)
		self.store.set(iter,1,newtext)
		self.people[int(path)][1] = newtext
	
	def destroy(self, widget, data=None):
		"""
		Quit on window close.
		"""
		gtk.main_quit()
	
	def __switch_page_cb(self,assistant,page):
		if page == self.asnt_p1:
			pass
		elif page == self.asnt_p2:
			pass
		elif page == self.asnt_p3:
			charge = float(self.bill_entry.get_text())
			
			calc_people = []
			for person in self.people:
				calc_people.append(Person(person[0],person[1]))
			
			calc = Calculator()
			calc.people = calc_people
			calc.charge = charge
			calc.calculate()
			
			str = ""
			
			
			str+= "Total income including all parties: ${0:03.2f}\n\n".format(calc.total_income)
			
			for p in calc.people:
				str+= "Amount due by {0} whose income is ${1:03.2f} is ${2:03.2f}.\n".format(p.name,p.income,p.due)
			
			str+= "\nEach party is paying {0:03.2f}% of their income.".format(calc.due_percent)
			
			
			
			
			
			
			
			
			buf = self.res_tv.get_buffer()
			buf.set_text(str)
		
		print "__change_page_cb",page
	def __validate_page_cb(self,assistant,page):
		if page == self.asnt_p1:
			return self.__validate_page1()
		
		
		return self.asnt.VALIDATE_SUCCESS
	
	def __validate_page1(self):
		str = self.bill_entry.get_text()
		if str == "":
			self.bill_entry.modify_base(gtk.STATE_NORMAL,gtk.gdk.color_parse("#FF7F7F"))
			self.bill_validation_tip_hbox.show()
			return self.asnt.VALIDATE_FAIL
		
		notnum = re.compile(r"[^0-9\.]")
		if notnum.search(str):
			self.bill_entry.modify_base(gtk.STATE_NORMAL,gtk.gdk.color_parse("#FF7F7F"))
			self.bill_validation_tip_hbox.show()
			return self.asnt.VALIDATE_FAIL
		
		self.bill_entry.modify_base(gtk.STATE_NORMAL,None)
		self.bill_validation_tip_hbox.hide()
		return self.asnt.VALIDATE_SUCCESS