using System;
using System.Collections.Generic;
using System.Linq;
using MonoTouch.Foundation;
using MonoTouch.UIKit;
using System.Drawing;
namespace BillSplitter
{
public class Application
{
static void Main (string[] args)
{
UIApplication.Main (args);
}
}
// The name AppDelegate is referenced in the MainWindow.xib file.
public partial class AppDelegate : UIApplicationDelegate
{
private int drinkers=0;
private int nondrinkers=0;
public int Drinkers {get {return drinkers;}
set{
drinkers = value;
if (drinkers > 0)
labelDrinkers.Text = drinkers + " drinkers owe";
else
labelDrinkers.Text = "Drinkers owe";
Calculate();
UpdateButton();}
}
public int NonDrinkers {get {return nondrinkers;}
set{
nondrinkers = value;
if (nondrinkers > 0)
labelNonDrinkers.Text = nondrinkers + " non-drinkers";
else
labelNonDrinkers.Text = "Non-drinkers";
Calculate();
UpdateButton();}
}
// This method is invoked when the application has loaded its UI and its ready to run
public override bool FinishedLaunching (UIApplication app, NSDictionary options)
{
// If you have defined a view, add it here:
// window.AddSubview (navigationController.View);
CreatePicker ();
textfieldTotal.Ended += delegate {
Console.WriteLine("textfieldTotal.Ended");
textfieldTotal.ResignFirstResponder();
};
textfieldWine.Ended += delegate {
Console.WriteLine("textfieldWine.Ended");
textfieldWine.ResignFirstResponder();
};
textfieldTotal.EditingDidEnd += delegate(object sender, EventArgs e) {
Console.WriteLine("textfieldTotal.EditingDidEnd");
UITextField tf = sender as UITextField;
tf.ResignFirstResponder();
};
textfieldWine.EditingDidEnd += delegate(object sender, EventArgs e) {
Console.WriteLine("textfieldWine.EditingDidEnd");
UITextField tf = sender as UITextField;
tf.ResignFirstResponder();
};
background.TouchDown += delegate {
Console.WriteLine("background.TouchDown");
textfieldTotal.ResignFirstResponder();
textfieldWine.ResignFirstResponder();
};
buttonSplit.TouchDown += delegate {
Console.WriteLine("buttonSplit.TouchDown");
textfieldTotal.ResignFirstResponder();
textfieldWine.ResignFirstResponder();
Calculate();
};
textfieldTotal.ValueChanged += delegate {
Console.WriteLine("textfieldTotal.ValueChanged");
Calculate();
};
textfieldTotal.EditingDidEnd += delegate {
Console.WriteLine("textfieldTotal.EditingDidEnd");
textfieldTotal.ResignFirstResponder();
Calculate();
};
window.MakeKeyAndVisible ();
return true;
}
private void UpdateButton()
{
int pax = drinkers + nondrinkers;
if (pax > 0)
{
buttonSplit.TitleLabel.Text = String.Format("Split {0} ways", pax);
buttonSplit.TitleLabel.SizeToFit();
}
else
buttonSplit.TitleLabel.Text = "Split";
}
private void Calculate()
{
decimal total = 0.0m;
decimal wine = 0.0m;
int pax = drinkers + nondrinkers;
labelSplit.Text = "-";
labelSplit2.Text = "-";
if (pax > 0)
{
string totalText = textfieldTotal.Text==""?"0":textfieldTotal.Text;
string wineText = textfieldWine.Text==""?"0":textfieldWine.Text;
if (decimal.TryParse(totalText, out total))
{
if (decimal.TryParse(wineText, out wine))
{
decimal foodeach = (total - wine) / pax;
if (foodeach > 0)
{
labelTotal.Text = "$ " + total.ToString("#.00");
if (drinkers > 0)
{
labelSplit.Text = (foodeach + wine/drinkers).ToString("#.00");
}
else
{ // if no drinkers, add the wine back into the bill
foodeach = (total) / pax;
}
if (nondrinkers > 0)
{
labelSplit2.Text = (foodeach).ToString("#.00");
}
}
else Console.WriteLine("cannot be negative " + foodeach);
}
}
}
}
// This method is required in iPhoneOS 3.0
public override void OnActivated (UIApplication application)
{
}
#region People picker
void CreatePicker ()
{
pickerPax.Model = new PeopleModel(this);
}
public class PeopleModel : UIPickerViewModel {
static string [] names = new string [] {
"0 drinkers",
"1 drinker",
"2 drinkers",
"3 drinkers",
"4 drinkers",
"5 drinkers",
"6 drinkers",
"7 drinkers",
"8 drinkers"
};
static string [] names2 = new string [] {
"0 non-drinkers",
"1 non-drinker",
"2 non-drinkers",
"3 non-drinkers",
"4 non-drinkers",
"5 non-drinkers",
"6 non-drinkers",
"7 non-drinkers",
"8 non-drinkers"
};
AppDelegate pvc;
public PeopleModel (AppDelegate pvc) {
this.pvc = pvc;
}
public override int GetComponentCount (UIPickerView v)
{
return 2;
}
public override int GetRowsInComponent (UIPickerView pickerView, int component)
{
if (component == 0)
return names.Length;
else
return names2.Length;
}
public override string GetTitle (UIPickerView picker, int row, int component)
{
if (component == 0)
return names [row];
else
return names2[row];
}
public override void Selected (UIPickerView picker, int row, int component)
{
Console.WriteLine("picker changed" + row + " in " + component);
if (component == 0)
pvc.Drinkers = row;
else
pvc.NonDrinkers = row;
}
public override float GetComponentWidth (UIPickerView picker, int component)
{
if (component == 0)
return 125f;
else
return 155f;
}
public override float GetRowHeight (UIPickerView picker, int component)
{
return 40f;
}
}
#endregion
}
}