00001
00002 using System;
00003 using Foodolini.Activities;
00004
00005 using Foodolini.BusinessLogic;
00006 using Gtk;
00007
00008 namespace Foodolini.Activities.Person
00009 {
00010
00011 [FoodoliniActivity("User profile", false, "profile.png")]
00012 [System.ComponentModel.ToolboxItem(true)]
00013 public partial class PersonViewer : Gtk.Bin, IActivity
00014 {
00015 private IOwner owner;
00016 private Foodolini.BusinessLogic.Person currentUser;
00017 private NodeStore exerciseList = new NodeStore(typeof(ExerciseAdapter));
00018
00019
00020 public PersonViewer()
00021 {
00022 this.Build();
00023
00024 this.ExerciseView.NodeStore = exerciseList;
00025 this.ExerciseView.AppendColumn("Activity", new CellRendererText(),"text", 0);
00026 this.ExerciseView.AppendColumn("Duration", new CellRendererText(), delegate(TreeViewColumn tree_column, CellRenderer cell, ITreeNode node){
00027 ExerciseAdapter n = (ExerciseAdapter)node;
00028 CellRendererText c = (CellRendererText)cell;
00029 c.Text = "Hours: " + n.Duration.Hours + " and minutes: " + n.Duration.Minutes;
00030 });
00031
00032 this.ExerciseView.AppendColumn("Date", new CellRendererText(), delegate(TreeViewColumn tree_column, CellRenderer cell, ITreeNode node){
00033 ExerciseAdapter n = (ExerciseAdapter)node;
00034 CellRendererText c = (CellRendererText)cell;
00035 c.Text = n.PerformedDate.ToShortDateString();
00036 });
00037
00038 btEditEx.Sensitive = false;
00039 btDeleteEx.Sensitive = false;
00040
00041 this.Shown += HandleShown;
00042 }
00043
00044 public void HandleShown(object sender, EventArgs e)
00045 {
00046
00047 UpDateUser();
00048 }
00049
00050 private void UpDateUser(){
00051
00052 if(this.owner.CurrentUser!= null){
00053
00054 currentUser = this.owner.CurrentUser;
00055 lbFullName.Markup = "<b><big>" + currentUser.FullName + "</big></b>";
00056 lbUserName.Text = currentUser.UserName;
00057 lbDateBirth.Text = currentUser.BirthDate.ToShortDateString();
00058 lbWeight.Text = currentUser.Weight.ToString()+ " kg.";
00059 lbHeight.Text = currentUser.Height.ToString()+ " cm.";
00060 lbDiet.Hide();
00061 label7.Hide();
00062
00063 button314UserProf.Sensitive = true;
00064 btChangeDiet.Hide();
00065 vbox5ViewExercises.Show();
00066
00067 this.PopulateExerciseList();
00068
00069
00070 }
00071
00072 else{
00073 lbFullName.Markup ="<b><big>Anonymous</big></b>";
00074 lbUserName.Text = "Anonymous";
00075 lbDateBirth.Text = "";
00076 lbWeight.Text = "";
00077 lbHeight.Text = "";
00078 label7.Hide();
00079 lbDiet.Text = "";
00080
00081 button314UserProf.Sensitive = false;
00082 btChangeDiet.Visible = false;
00083 btChangeDiet.Sensitive = false;
00084
00085 vbox5ViewExercises.Hide();
00086 }
00087 }
00088
00089 private void HandleUserChanged(object sender, PersonEventArgs e){
00090
00091 UpDateUser();
00092 }
00093
00098 public void Register(IOwner owner){
00099 this.owner = owner;
00100 this.owner.CurrentUserChanged += HandleUserChanged;
00101 }
00102
00103 public void Unregister(){
00104
00105 this.owner.CurrentUserChanged -= HandleUserChanged;
00106 this.owner = null;
00107 }
00108
00109
00113 protected virtual void btEditUserProfileOnClick (object sender, System.EventArgs e)
00114 {
00115 PersonEditorDialog dia = new PersonEditorDialog();
00116 dia.SetDetails(this.owner.CurrentUser);
00117 ResponseType res = (ResponseType)dia.Run();
00118
00119 if(res == ResponseType.Ok){
00120 this.UpDateUser();
00121
00122 }
00123 dia.Destroy();
00124
00125
00126 }
00127
00128 protected virtual void CancelOnClick (object sender, System.EventArgs e)
00129 {
00130 this.owner.PopActivity();
00131 }
00132
00142 protected virtual void RegExOnClicked (object sender, System.EventArgs e)
00143 {
00144 RegisterExercise.RegisterExerciseDialog regExercise = new RegisterExercise.RegisterExerciseDialog();
00145 regExercise.Register(owner);
00146 if (regExercise.Run() == (int)ResponseType.Ok) {
00147 this.exerciseList.AddNode(new ExerciseAdapter(regExercise.Exercise));
00148 }
00149 regExercise.Unregister();
00150 regExercise.Destroy();
00151
00152 }
00153
00163 protected virtual void EditExOnClicked (object sender, System.EventArgs e)
00164 {
00165 if(ExerciseView.NodeSelection.SelectedNode != null) {
00166 RegisterExercise.ExerciseEditorDialog exEdit =
00167 new RegisterExercise.ExerciseEditorDialog(((ExerciseAdapter)ExerciseView.NodeSelection.SelectedNode).Exercise);
00168 exEdit.Register(owner);
00169 if(exEdit.Run() == (int)ResponseType.Ok) {
00170 exEdit.SaveExercise();
00171 this.PopulateExerciseList();
00172 }
00173 exEdit.Unregister();
00174 exEdit.Destroy();
00175 }
00176
00177 }
00187 protected virtual void OnBtDeleteExClicked (object sender, System.EventArgs e)
00188 {
00189 if(ExerciseView.NodeSelection.SelectedNode != null) {
00190 RegisterExercise.ConfirmDialog dialog = new RegisterExercise.ConfirmDialog();
00191
00192 ResponseType res = (ResponseType)dialog.Run();
00193
00194 if (res == ResponseType.Ok) {
00195 ((ExerciseAdapter)ExerciseView.NodeSelection.SelectedNode).Exercise.Delete();
00196 this.exerciseList.RemoveNode(ExerciseView.NodeSelection.SelectedNode);
00197 }
00198
00199 dialog.Destroy();
00200 }
00201 }
00202
00206 private void PopulateExerciseList() {
00207 this.exerciseList.Clear();
00208 foreach(Exercise ex in owner.CurrentUser.GetPerformedExercises())
00209 this.exerciseList.AddNode(new ExerciseAdapter(ex));
00210
00211 }
00212
00223 protected virtual void OnExerciseViewCursorChanged (object sender, System.EventArgs e)
00224 {
00225 if (ExerciseView.NodeSelection.SelectedNode != null) {
00226 btEditEx.Sensitive = true;
00227 btDeleteEx.Sensitive = true;
00228 } else {
00229 btEditEx.Sensitive = false;
00230 btDeleteEx.Sensitive = false;
00231 }
00232
00233 }
00234
00235
00236
00237
00238
00242 public Widget Widget{
00243 get{
00244 return this;
00245 }
00246 }
00247 }
00248 }