public EditWorkoutForm(Data data, Workout workout)
            : this(data)
        {
            // disabling the name field to avoid renaming of existing workouts
              txtName.Enabled = false;

              foreach (var wsc in workout.Steps.Select(t => new WorkoutStepControl
              {
            Location = new Point(_stepControls.Count == 0 ? labName.Left : _stepControls.Last().Right + ControlPadding, butAddStep.Top),
            Parent = this,
            Step = t
              }))
              {
            _stepControls.Add(wsc);
              }

              txtName.Text = workout.Name;

              // assign the category name but also change the dropdownstyle
              // since the combobox doesn't have the category names yet
              comCategory.DropDownStyle = ComboBoxStyle.Simple;
              comCategory.Text = workout.CategoryName;

              butAddStep.Left = _stepControls.Last().Right + ControlPadding;
              butRemoveStep.Left = _stepControls.Last().Right + ControlPadding;
        }
        public EditWorkoutCategoryFormPresenter(IEditWorkoutCategoryForm view, Data data)
        {
            _data = data;
              _view = view;

              _view.SaveButtonClick += (s, e) => SaveWorkoutCategory();
        }
        public ManageWorkoutsForm(Data data)
        {
            _data = data;

              InitializeComponent();

              lisWorkouts.ListViewItemSorter = new ListViewItemComparer(1, false);
        }
        public EditWorkoutForm(Data data)
        {
            InitializeComponent();

              txtName.AutoCompleteMode = AutoCompleteMode.SuggestAppend;
              txtName.AutoCompleteSource = AutoCompleteSource.CustomSource;
              txtName.AutoCompleteCustomSource.AddRange(data.Workouts.Select(w => w.Name).ToArray());

              UpdateWidth();
        }
    public SelectWorkoutCategoryFormPresenter(ISelectWorkoutCategoryForm view, Data data)
    {
      _data = data;
      _view = view;

      _view.WorkoutCategorySelected += (s, e) => OnWorkoutCategorySelected(e);

      // when the workout categories change, reload the category list
      _data.CategoryChanged += (s, e) => _view.SetCategories(_data.Categories.Select(c => c.Name).ToArray());

      _view.SetCategories(_data.Categories.Select(c => c.Name).ToArray());
    }
        public ManageWorkoutsFormPresenter(IManageWorkoutsForm view, Data data)
        {
            _data = data;

              view.DisplayWorkouts(_data.Workouts);

              view.AddWorkoutButtonClick += (s, e) => EditWorkout(null);
              view.EditWorkoutButtonClick += (s, e) => EditWorkout(e);
              view.DeleteWorkoutButtonClick += (s, e) => DeleteWorkout(e);
              view.ExitButtonClick += (s, e) => view.Close();

              data.WorkoutChanged += (s, e) => view.DisplayWorkouts(_data.Workouts);
        }
        public ManageWorkoutCategoriesFormPresenter(IManageWorkoutCategoriesForm view, Data data)
        {
            _data = data;

              view.DisplayCategories(data.Categories);

              view.AddCategoryButtonClick += (s, e) => EditCategory(null);
              view.EditCategoryButtonClick += (s, e) => EditCategory(e);
              view.DeleteCategoryButtonClick += (s, e) => DeleteCategory(e);
              view.ExitButtonClick += (s, e) => view.Close();

              data.CategoryChanged += (s, e) => view.DisplayCategories(data.Categories);
        }
Beispiel #8
0
    /// <summary>
    /// Initializes a new Data instance with the given name.
    /// This name is used to resolve the path to the persisted data.
    /// </summary>
    /// <param name="planName">Name of the training plan.</param>
    public Data(string planName)
    {
      Instance = this;

      // create persistence handler for this `Data` instance.
      var persistence = new DataPersistence(this);

      // load persisted data
      // NOTE: Must load training plan first because its name is needed to find the other files
      _trainingPlan = persistence.LoadPlan(planName);
      _trainingPlan.SetData(this);

      Pace = persistence.LoadPace();

      _workouts = new List<Workout>(persistence.LoadWorkouts());
      _categories = new List<WorkoutCategory>(persistence.LoadCategories());

      Logger.Info("Data instantiated");
    }
        public EditWorkoutFormPresenter(IEditWorkoutForm view, Data data)
        {
            _view = view;
              _data = data;

              _data.CategoryChanged += (s, e) => SetCategories();
              SetCategories();

              _view.AddStepButtonClick += (s, e) => _view.AddStep();
              _view.RemoveStepButtonClick += (s, e) => _view.RemoveStep();
              _view.EditWorkoutFormClosing += OnEditWorkoutFormClosing;
              _view.SaveButtonClick += (s, e) => OnSaveButtonClick();
              _view.DeleteButtonClick += (s, e) => OnDeleteButtonClick();

              // only add a step if there is none yet (there already are steps when editing
              // but not when creating workouts)
              if (_view.Steps == null || _view.Steps.Length == 0)
              {
            _view.AddStep();
              }
        }
        private void LoadTrainingPlan(string planName)
        {
            try
              {
            // update recent training plans in settings - before actually loading the plan
            var recentPlans = Misc.Default.LastTrainingPlans.Split(';').ToList();
            if (recentPlans.Contains(planName))
            {
              // the newly-loaded plan is already among the list of recent plans - remove it
              recentPlans.Remove(planName);
            }
            else
            {
              while (recentPlans.Count >= 5)
              {
            // the plan isn't already in the list but we may need to remove one
            // to avoid having too many recent plans
            recentPlans.RemoveAt(4);
              }
            }

            // insert newly-loaded plan and save
            recentPlans.Insert(0, planName);
            Misc.Default.LastTrainingPlans = recentPlans.Aggregate((a, b) => a + ";" + b).TrimEnd(';');
            Misc.Default.Save();

            // load plan
            var data = new Data(planName);
            Data = data;
            _view.SetNewData(data);
            _view.UpdateWeeklyPlan(Data.TrainingPlan.WeeklyPlans);

            // scroll to current week - this probably doesn't work
            for (var i = 0; i < Data.TrainingPlan.WeeklyPlans.Length; i++)
            {

              if (Data.TrainingPlan.WeeklyPlans[i].WeekStart > DateTime.Today ||
              Data.TrainingPlan.WeeklyPlans[i].WeekEnd < DateTime.Today)
              {
            continue;
              }

              _view.SetWeekActivity(i, true);
              //Task.Factory.StartNew(() =>
              //{
              //  Thread.Sleep(1);
              //view.ScrollToWeek(i);
              //});
              break;
            }
              }
              catch (Exception e)
              {
            MessageBox.Show(string.Format("Error while attempting to load plan {0} - {1}", planName,
              e.Message));

            RemoveRecentPlan(planName);
            _view.UpdateRecentTrainingPlans();
              }
        }
        private void OnClosePlanClick()
        {
            Data = null;
              _view.SetNewData(null);

              Logger.Info("Closed current training plan");
        }
Beispiel #12
0
        public WeekControl(Data data)
        {
            InitializeComponent();

              _data = data;

              BackColor = Colors.Default.DefaultWorkoutControlBackground;

              _workoutControls = new[]
              {
            wrkMondayMorning, wrkMondayEvening, wrkTuesdayMorning, wrkTuesdayEvening, wrkWednesdayMorning,
            wrkWednesdayEvening, wrkThursdayMorning, wrkThursdayEvening, wrkFridayMorning, wrkFridayEvening,
            wrkSaturdayMorning, wrkSaturdayEvening, wrkSundayMorning, wrkSundayEvening
              };

              if (_workoutControls.Length != MaxWeeklyWorkouts)
              {
            throw new Exception("Must have exactly " + MaxWeeklyWorkouts + " workout contorls");
              }

              for (var i = 0; i < _workoutControls.Length; i++)
              {
            var i1 = i;
            _workoutControls[i].SetData(_data);
            _workoutControls[i].WorkoutChanged += (s, workout) =>
            {
              _weeklyPlan.Workouts[i1] = workout == null ? null : workout.Name;
              UpdateStatistics();

              if (WeeklyPlanChanged != null && _triggerWeeklyPlanChangedEvent)
              {
            Logger.Debug("Triggering WeeklyPlanChanged event");
            WeeklyPlanChanged(this, new EventArgs<WeeklyPlan>(WeeklyPlan));
              }
            };
              }

              // create a timer that triggers after 2s
              var noteChangeTriggerTimer = new Timer {Interval = 2000};

              noteChangeTriggerTimer.Tick += (s, e) =>
              {
            // when the timer triggers, stop it from re-triggering
            noteChangeTriggerTimer.Stop();

            // save the currently entered notes
            _weeklyPlan.Notes = txtNotes.Text;

            if (WeeklyPlanChanged != null)
            {
              Logger.Debug("Triggering WeeklyPlanChanged event");
              WeeklyPlanChanged(this, new EventArgs<WeeklyPlan>(WeeklyPlan));
            }
              };

              txtNotes.TextChanged += (s, e) =>
              {
            if (!_triggerWeeklyPlanChangedEvent)
            {
              return;
            }
            noteChangeTriggerTimer.Stop();
            noteChangeTriggerTimer.Start();
              };
        }
        public void SetData(Data data)
        {
            _data = data;

              _data.CategoryChanged += (s, e) => UpdateControl();
              _data.WorkoutChanged += (s, e) => UpdateControl();

              CreateContextMenu();
        }