public override void OnViewModelLoadedOverride()
        {
            AddSpacing(16);

            var label = new UILabel()
            {
                TranslatesAutoresizingMaskIntoConstraints = false,
                Text  = PowerPlannerResources.GetString("Settings_SuccessfullyCreatedAccountPage_Message.Text"),
                Lines = 0 // Wraps text
            };

            StackView.AddArrangedSubview(label);
            label.StretchWidth(StackView, left: 16, right: 16);

            AddHeader(PowerPlannerResources.GetString("TextBox_Username.Header"));
            AddText(ViewModel.Username);

            AddHeader(PowerPlannerResources.GetString("CreateAccountPage_TextBoxEmail.Header"));
            AddText(ViewModel.Email);

            AddSpacing(24);

            var buttonContinue = PowerPlannerUIHelper.CreatePowerPlannerBlueButton("Continue");

            buttonContinue.TranslatesAutoresizingMaskIntoConstraints = false;
            buttonContinue.TouchUpInside += new WeakEventHandler <EventArgs>(delegate { ViewModel.Continue(); }).Handler;
            StackView.AddArrangedSubview(buttonContinue);
            buttonContinue.StretchWidth(StackView, left: 16, right: 16);

            AddSpacing(16);

            base.OnViewModelLoadedOverride();
        }
Beispiel #2
0
        protected void AddDeleteButtonWithConfirmation(string text, Action deleteAction, string confirmTitle, string confirmMessage)
        {
            var handler = new EventHandler <EventArgs>(delegate
            {
                PowerPlannerUIHelper.ConfirmDelete(confirmMessage, confirmTitle, deleteAction);
            });

            _buttonDeleteEventHandlers.Add(handler);

            AddDeleteButton(text, handler);
        }
        public ConfigureClassPassingGradeViewController()
        {
            Title = PowerPlannerResources.GetString("Settings_GradeOptions_ListItemPassingGrade.Title");

            PowerPlannerUIHelper.ConfigureForInputsStyle(this);

            var cancelButton = new UIBarButtonItem()
            {
                Title = PowerPlannerResources.GetStringCancel()
            };

            cancelButton.Clicked            += new WeakEventHandler <EventArgs>(CancelButton_Clicked).Handler;
            NavigationItem.LeftBarButtonItem = cancelButton;

            var saveButton = new UIBarButtonItem()
            {
                Title = PowerPlannerResources.GetStringSave()
            };

            saveButton.Clicked += new WeakEventHandler <EventArgs>(SaveButton_Clicked).Handler;
            NavigationItem.RightBarButtonItem = saveButton;

            StackView.AddSectionDivider();

            var textFieldPassingGrade = new UITextField()
            {
                TranslatesAutoresizingMaskIntoConstraints = false,
                KeyboardType = UIKeyboardType.DecimalPad,
                AdjustsFontSizeToFitWidth = true,
                Placeholder = PowerPlannerResources.GetExamplePlaceholderString(60.ToString())
            };

            BindingHost.SetTextFieldTextBinding <double>(textFieldPassingGrade, nameof(ViewModel.PassingGrade), converter: TextToDoubleConverter.Convert, backConverter: TextToDoubleConverter.ConvertBack);
            AddTextField(StackView, textFieldPassingGrade, firstResponder: true);

            StackView.AddSectionDivider();
            StackView.AddSpacing(16);

            var labelDescription = new UILabel()
            {
                Text      = PowerPlannerResources.GetString("Settings_GradeOptions_PassingGrade_Explanation.Text"),
                Lines     = 0,
                Font      = UIFont.PreferredCaption1,
                TextColor = UIColor.LightGray
            };

            StackView.AddArrangedSubview(labelDescription);
            labelDescription.StretchWidth(StackView, left: 16, right: 16);

            StackView.AddSpacing(16);
            StackView.AddBottomSectionDivider();
        }
Beispiel #4
0
        public override void OnViewModelLoadedOverride()
        {
            AddSpacing(16);

            var label = new UILabel()
            {
                TranslatesAutoresizingMaskIntoConstraints = false,
                Text  = PowerPlannerResources.GetString("Welcome_ConnectAccountPage_Message.Text"),
                Lines = 0 // Wraps text
            };

            StackView.AddArrangedSubview(label);
            label.StretchWidth(StackView, left: 16, right: 16);

            AddSpacing(24);

            var buttonLogIn = PowerPlannerUIHelper.CreatePowerPlannerBlueButton("Log In");

            buttonLogIn.TranslatesAutoresizingMaskIntoConstraints = false;
            buttonLogIn.TouchUpInside += new WeakEventHandler <EventArgs>(delegate { ViewModel.LogIn(); }).Handler;
            StackView.AddArrangedSubview(buttonLogIn);
            buttonLogIn.StretchWidth(StackView, left: 16, right: 16);

            AddSpacing(6);

            var labelHelp = new UILabel()
            {
                TranslatesAutoresizingMaskIntoConstraints = false,
                Text  = PowerPlannerResources.GetString("Welcome_ConnectAccountPage_NeedHelp.Text"),
                Lines = 0,
                Font  = UIFont.PreferredCaption1
            };

            StackView.AddArrangedSubview(labelHelp);
            labelHelp.StretchWidth(StackView, left: 16, right: 16);

            AddSpacing(16);

            base.OnViewModelLoadedOverride();
        }
Beispiel #5
0
        public EditClassCreditsViewController()
        {
            Title = "Credits";

            PowerPlannerUIHelper.ConfigureForInputsStyle(this);

            var cancelButton = new UIBarButtonItem()
            {
                Title = "Cancel"
            };

            cancelButton.Clicked            += new WeakEventHandler <EventArgs>(CancelButton_Clicked).Handler;
            NavigationItem.LeftBarButtonItem = cancelButton;

            var saveButton = new UIBarButtonItem()
            {
                Title = "Save"
            };

            saveButton.Clicked += new WeakEventHandler <EventArgs>(SaveButton_Clicked).Handler;
            NavigationItem.RightBarButtonItem = saveButton;

            StackView.AddSectionDivider();

            var textFieldCredits = new UITextField()
            {
                TranslatesAutoresizingMaskIntoConstraints = false,
                KeyboardType = UIKeyboardType.DecimalPad,
                AdjustsFontSizeToFitWidth = true,
                Placeholder = "ex: 3"
            };

            BindingHost.SetTextFieldTextBinding <double>(textFieldCredits, nameof(ViewModel.Credits), converter: CreditsToTextBoxTextConverter.Convert, backConverter: CreditsToTextBoxTextConverter.ConvertBack);
            AddTextField(StackView, textFieldCredits, firstResponder: true);

            StackView.AddSectionDivider();
        }
Beispiel #6
0
        public override void OnViewModelLoadedOverride()
        {
            AddSpacing(16);

            var label = new UILabel()
            {
                TranslatesAutoresizingMaskIntoConstraints = false,
                Text  = PowerPlannerResources.GetString("Welcome_ExistingUserPage_Message.Text"),
                Lines = 0 // Wraps text
            };

            StackView.AddArrangedSubview(label);
            label.StretchWidth(StackView, left: 16, right: 16);

            AddSpacing(24);

            var buttonHasAccount = PowerPlannerUIHelper.CreatePowerPlannerBlueButton(PowerPlannerResources.GetString("Welcome_ExistingUserPage_ButtonHasAccount.Content"));

            buttonHasAccount.TranslatesAutoresizingMaskIntoConstraints = false;
            buttonHasAccount.TouchUpInside += new WeakEventHandler <EventArgs>(delegate { ViewModel.HasAccount(); }).Handler;
            StackView.AddArrangedSubview(buttonHasAccount);
            buttonHasAccount.StretchWidth(StackView, left: 16, right: 16);

            AddSpacing(8);

            var buttonNoAccount = PowerPlannerUIHelper.CreatePowerPlannerBlueButton(PowerPlannerResources.GetString("Welcome_ExistingUserPage_ButtonNoAccount.Content"));

            buttonNoAccount.TranslatesAutoresizingMaskIntoConstraints = false;
            buttonNoAccount.TouchUpInside += new WeakEventHandler <EventArgs>(delegate { ViewModel.NoAccount(); }).Handler;
            StackView.AddArrangedSubview(buttonNoAccount);
            buttonNoAccount.StretchWidth(StackView, left: 16, right: 16);

            AddSpacing(16);

            base.OnViewModelLoadedOverride();
        }
Beispiel #7
0
 private void ButtonDelete_Clicked(object sender, EventArgs e)
 {
     PowerPlannerUIHelper.ConfirmDeleteQuick(this, NavItem.RightBarButtonItems.First(), ViewModel.Delete);
 }
        public override void OnViewModelLoadedOverride()
        {
            Title = ViewModel.State == AddHomeworkViewModel.OperationState.Adding ?
                    ViewModel.Type == AddHomeworkViewModel.ItemType.Homework ? "Add Task" : "Add Event"
                : ViewModel.Type == AddHomeworkViewModel.ItemType.Homework ? "Edit Task" : "Edit Event";

            AddTopSectionDivider();

            AddTextField(new UITextField()
            {
                Placeholder   = "Name",
                ReturnKeyType = UIReturnKeyType.Done,
                EnablesReturnKeyAutomatically = true
            }, nameof(ViewModel.Name), firstResponder: ViewModel.State == AddHomeworkViewModel.OperationState.Adding);

            AddDivider();

            var dateContainer = new UIStackView()
            {
                Axis = UILayoutConstraintAxis.Vertical
            };

            {
                var datePicker = new BareUIInlineDatePicker(this, left: 16, right: 16)
                {
                    TranslatesAutoresizingMaskIntoConstraints = false
                };
                BindingHost.SetDateBinding(datePicker, nameof(ViewModel.Date));
                dateContainer.AddArrangedSubview(datePicker);
                datePicker.StretchWidth(dateContainer);
                datePicker.SetHeight(44);

                AddDivider(dateContainer);
            }
            AddUnderVisiblity(dateContainer, nameof(ViewModel.IsDatePickerVisible));

            var classContainer = new UIStackView()
            {
                Axis = UILayoutConstraintAxis.Vertical
            };

            {
                var pickerClass = new BareUIInlinePickerView(this, left: 16, right: 16)
                {
                    TranslatesAutoresizingMaskIntoConstraints = false,
                    HeaderText          = "Class",
                    ItemToViewConverter = ConvertClassToInlineView
                };
                BindingHost.SetItemsSourceBinding(pickerClass, nameof(ViewModel.Classes));
                BindingHost.SetSelectedItemBinding(pickerClass, nameof(ViewModel.Class));
                classContainer.AddArrangedSubview(pickerClass);
                pickerClass.StretchWidth(classContainer);
                pickerClass.SetHeight(44);

                AddDivider(classContainer);
            }
            AddUnderVisiblity(classContainer, nameof(ViewModel.IsClassPickerVisible));

            var gradeWeightContainer = new UIStackView()
            {
                Axis = UILayoutConstraintAxis.Vertical
            };

            {
                var pickerGradeWeight = new BareUIInlinePickerView(this, left: 16, right: 16)
                {
                    TranslatesAutoresizingMaskIntoConstraints = false,
                    HeaderText = "Grade Category"
                };
                BindingHost.SetItemsSourceBinding(pickerGradeWeight, nameof(ViewModel.WeightCategories));
                BindingHost.SetSelectedItemBinding(pickerGradeWeight, nameof(ViewModel.SelectedWeightCategory));
                gradeWeightContainer.AddArrangedSubview(pickerGradeWeight);
                pickerGradeWeight.StretchWidth(gradeWeightContainer);
                pickerGradeWeight.SetHeight(44);

                AddDivider(gradeWeightContainer);
            }
            AddUnderVisiblity(gradeWeightContainer, nameof(ViewModel.IsWeightCategoryPickerVisible));

            var pickerTime = new BareUIInlinePickerView(this, left: 16, right: 16)
            {
                TranslatesAutoresizingMaskIntoConstraints = false,
                HeaderText = "Time"
            };

            BindingHost.SetItemsSourceBinding(pickerTime, nameof(ViewModel.TimeOptions));
            BindingHost.SetSelectedItemBinding(pickerTime, nameof(ViewModel.SelectedTimeOption));
            StackView.AddArrangedSubview(pickerTime);
            pickerTime.StretchWidth(StackView);
            pickerTime.SetHeight(44);

            var stackViewPickerCustomTime = new UIStackView()
            {
                Axis = UILayoutConstraintAxis.Vertical
            };

            AddDivider(stackViewPickerCustomTime);
            if (ViewModel.Type == AddHomeworkViewModel.ItemType.Homework)
            {
                var pickerDueTime = new BareUIInlineTimePicker(this, left: 16, right: 16)
                {
                    TranslatesAutoresizingMaskIntoConstraints = false,
                    HeaderText = "Due Time"
                };
                BindingHost.SetTimeBinding(pickerDueTime, nameof(ViewModel.StartTime));
                stackViewPickerCustomTime.AddArrangedSubview(pickerDueTime);
                pickerDueTime.StretchWidth(stackViewPickerCustomTime);
                pickerDueTime.SetHeight(44);
            }
            else
            {
                var pickerStartTime = new BareUIInlineTimePicker(this, left: 16, right: 16)
                {
                    TranslatesAutoresizingMaskIntoConstraints = false,
                    HeaderText = "Start Time"
                };
                BindingHost.SetTimeBinding(pickerStartTime, nameof(ViewModel.StartTime));
                stackViewPickerCustomTime.AddArrangedSubview(pickerStartTime);
                pickerStartTime.StretchWidth(stackViewPickerCustomTime);
                pickerStartTime.SetHeight(44);

                AddDivider(stackViewPickerCustomTime);

                var pickerEndTime = new BareUIInlineTimePicker(this, left: 16, right: 16)
                {
                    TranslatesAutoresizingMaskIntoConstraints = false,
                    HeaderText = "End Time"
                };
                BindingHost.SetTimeBinding(pickerEndTime, nameof(ViewModel.EndTime));
                stackViewPickerCustomTime.AddArrangedSubview(pickerEndTime);
                pickerEndTime.StretchWidth(stackViewPickerCustomTime);
                pickerEndTime.SetHeight(44);
            }
            var pickerCustomTimeContainer = new BareUIVisibilityContainer()
            {
                Child = stackViewPickerCustomTime
            };

            BindingHost.SetVisibilityBinding(pickerCustomTimeContainer, nameof(ViewModel.IsStartTimePickerVisible));
            StackView.AddArrangedSubview(pickerCustomTimeContainer);
            pickerCustomTimeContainer.StretchWidth(StackView);

            AddSectionDivider();

            var detailsView = new BareUITextView()
            {
                TranslatesAutoresizingMaskIntoConstraints = false,
                Placeholder = "Details"
            };

            BindingHost.SetTextViewTextBinding(detailsView.TextView, nameof(ViewModel.Details));
            StackView.AddArrangedSubview(detailsView);
            detailsView.StretchWidth(StackView);
            detailsView.SetHeight(130);

            if (ViewModel.IsRepeatsVisible)
            {
                AddSectionDivider();

                var switchRepeats = new BareUISwitch()
                {
                    TranslatesAutoresizingMaskIntoConstraints = false,
                    Header = PowerPlannerResources.GetString("RepeatingEntry_CheckBoxRepeats.Content")
                };
                BindingHost.SetSwitchBinding(switchRepeats, nameof(ViewModel.Repeats));
                StackView.AddArrangedSubview(switchRepeats);
                switchRepeats.StretchWidth(StackView);
                switchRepeats.SetHeight(44);

                StackView.AddUnderLazyVisibility(BindingHost, nameof(ViewModel.Repeats), delegate
                {
                    var recurrenceContainer = new UIStackView()
                    {
                        Axis = UILayoutConstraintAxis.Vertical
                    };
                    {
                        recurrenceContainer.AddDivider();

                        var tryForFreeContainer = new UIStackView()
                        {
                            Axis = UILayoutConstraintAxis.Vertical
                        };
                        {
                            tryForFreeContainer.AddSpacing(16);
                            var tryForFreeLabel = new UILabel()
                            {
                                TranslatesAutoresizingMaskIntoConstraints = false,
                                Text      = PowerPlannerResources.GetString("RepeatingEntry_TextBlockTryForFree.Text"),
                                Font      = UIFont.PreferredCaption1,
                                TextColor = UIColor.Red,
                                Lines     = 0
                            };
                            tryForFreeContainer.AddArrangedSubview(tryForFreeLabel);
                            tryForFreeLabel.StretchWidth(tryForFreeContainer, left: 16, right: 16);
                            tryForFreeContainer.AddSpacing(16);

                            tryForFreeContainer.AddDivider();
                        }
                        recurrenceContainer.AddUnderVisiblity(tryForFreeContainer, BindingHost, nameof(ViewModel.ShowRepeatingPremiumTrial));

                        var mustUpgradeContainer = new UIStackView()
                        {
                            Axis = UILayoutConstraintAxis.Vertical
                        };
                        {
                            mustUpgradeContainer.AddSpacing(16);
                            var mustUpgradeLabel = new UILabel()
                            {
                                TranslatesAutoresizingMaskIntoConstraints = false,
                                Text      = PowerPlannerResources.GetString("RepeatingEntry_TextBlockMustUpgrade.Text"),
                                Font      = UIFont.PreferredCaption1,
                                TextColor = UIColor.Red,
                                Lines     = 0
                            };
                            mustUpgradeContainer.AddArrangedSubview(mustUpgradeLabel);
                            mustUpgradeLabel.StretchWidth(mustUpgradeContainer, left: 16, right: 16);
                            mustUpgradeContainer.AddSpacing(8);

                            var buttonUpgrade = PowerPlannerUIHelper.CreatePowerPlannerBlueButton(PowerPlannerResources.GetString("Settings_UpgradeToPremium_ButtonUpgrade.Content"));
                            buttonUpgrade.TranslatesAutoresizingMaskIntoConstraints = false;
                            buttonUpgrade.TouchUpInside += new WeakEventHandler <EventArgs>(delegate { ViewModel.UpgradeToPremiumForRepeating(); }).Handler;
                            mustUpgradeContainer.AddArrangedSubview(buttonUpgrade);
                            buttonUpgrade.StretchWidth(mustUpgradeContainer, left: 16, right: 16);
                            mustUpgradeContainer.AddSpacing(16);

                            mustUpgradeContainer.AddDivider();
                        }
                        recurrenceContainer.AddUnderVisiblity(mustUpgradeContainer, BindingHost, nameof(ViewModel.ShowRepeatingMustUpgradeToPremium));

                        var recurrenceView = new UIRecurrenceView(this)
                        {
                            TranslatesAutoresizingMaskIntoConstraints = false,
                            ViewModel = ViewModel.RecurrenceControlViewModel
                        };
                        BindingHost.SetIsEnabledBinding(recurrenceView, nameof(ViewModel.IsRepeatingEntryEnabled));
                        recurrenceContainer.AddArrangedSubview(recurrenceView);
                        recurrenceView.StretchWidth(recurrenceContainer);

                        recurrenceContainer.AddDivider();

                        recurrenceContainer.AddSpacing(16);
                        var labelNoteCannotBulkEdit = new UILabel()
                        {
                            TranslatesAutoresizingMaskIntoConstraints = false,
                            Text      = PowerPlannerResources.GetString("RepeatingEntry_TextBlockNoteCannotBulkEdit.Text"),
                            Font      = UIFont.PreferredCaption1,
                            TextColor = UIColor.LightGray,
                            Lines     = 0
                        };
                        recurrenceContainer.AddArrangedSubview(labelNoteCannotBulkEdit);
                        labelNoteCannotBulkEdit.StretchWidth(recurrenceContainer, left: 16, right: 16);
                        recurrenceContainer.AddSpacing(16);
                    }
                    return(recurrenceContainer);
                });
            }

            AddBottomSectionDivider();

            BackButtonText       = "Cancel";
            PositiveNavBarButton = new PopupRightNavBarButtonItem("Save", delegate { Save(); });

            base.OnViewModelLoadedOverride();
        }
        public EditClassWeightCategoriesViewController()
        {
            Title = "Weight Categories";

            var cancelButton = new UIBarButtonItem()
            {
                Title = "Cancel"
            };

            cancelButton.Clicked            += new WeakEventHandler <EventArgs>(CancelButton_Clicked).Handler;
            NavigationItem.LeftBarButtonItem = cancelButton;

            var saveButton = new UIBarButtonItem()
            {
                Title = "Save"
            };

            saveButton.Clicked += new WeakEventHandler <EventArgs>(SaveButton_Clicked).Handler;
            NavigationItem.RightBarButtonItem = saveButton;

            PowerPlannerUIHelper.ConfigureForInputsStyle(this);

            // No save/cancel button, implicitly saves when going back or exiting

            StackView.AddTopSectionDivider();

            var headerView = new UIView()
            {
                TranslatesAutoresizingMaskIntoConstraints = false
            };

            {
                var labelName = new UILabel()
                {
                    TranslatesAutoresizingMaskIntoConstraints = false,
                    Text = "Name",
                    Font = UIFont.PreferredBody.Bold()
                };
                headerView.Add(labelName);
                labelName.StretchHeight(headerView, top: 8, bottom: 8);

                var labelWeight = new UILabel()
                {
                    TranslatesAutoresizingMaskIntoConstraints = false,
                    Text = "Weight",
                    Font = UIFont.PreferredBody.Bold()
                };
                headerView.Add(labelWeight);
                labelWeight.StretchHeight(headerView, top: 8, bottom: 8);

                headerView.AddConstraints(NSLayoutConstraint.FromVisualFormat("H:|[name][weight(60)]-52-|", NSLayoutFormatOptions.DirectionLeadingToTrailing,
                                                                              "name", labelName,
                                                                              "weight", labelWeight));
            }
            StackView.AddArrangedSubview(headerView);
            headerView.StretchWidth(StackView, left: 16, right: 16);

            StackView.AddDivider();

            var weightsView = new UIView()
            {
                TranslatesAutoresizingMaskIntoConstraints = false
            };

            {
                _itemsSourceWeights = new BareUIViewItemsSourceAdapterAsStackPanel(weightsView, (w) => { return(new UIEditingWeightCategoryView(this)
                    {
                        DataContext = w
                    }); });
            }
            StackView.AddArrangedSubview(weightsView);
            weightsView.StretchWidth(StackView, left: 16);

            var buttonDelete = new UIButton(UIButtonType.System)
            {
                TranslatesAutoresizingMaskIntoConstraints = false
            };

            buttonDelete.SetTitle("Add Category", UIControlState.Normal);
            buttonDelete.TouchUpInside += new WeakEventHandler(delegate { ViewModel.AddWeightCategory(); }).Handler;
            StackView.AddArrangedSubview(buttonDelete);
            buttonDelete.StretchWidth(StackView);
            buttonDelete.SetHeight(44);

            StackView.AddBottomSectionDivider();
        }
Beispiel #10
0
        public override void OnViewModelLoadedOverride()
        {
            var safeView = BareUISafeView.CreateAndAddTo(View);

            {
                var viewTopSpacer = new UIView()
                {
                    TranslatesAutoresizingMaskIntoConstraints = false
                };
                safeView.Add(viewTopSpacer);
                viewTopSpacer.StretchWidth(safeView);

                var viewCenterContainer = new UIStackView()
                {
                    TranslatesAutoresizingMaskIntoConstraints = false,
                    Axis    = UILayoutConstraintAxis.Vertical,
                    Spacing = 8
                };
                {
                    var icon = new UIImageView(UIImage.FromBundle("PowerPlannerIcon"))
                    {
                        TranslatesAutoresizingMaskIntoConstraints = false,
                        ContentMode = UIViewContentMode.ScaleAspectFit
                    };
                    icon.SetHeight(100);
                    viewCenterContainer.AddArrangedSubview(icon);

                    // In iOS 13, WhiteLarge was deprecated and Large was added
                    var progressRing = new UIActivityIndicatorView(UIDevice.CurrentDevice.CheckSystemVersion(13, 0) ? UIActivityIndicatorViewStyle.Large : UIActivityIndicatorViewStyle.WhiteLarge)
                    {
                        TranslatesAutoresizingMaskIntoConstraints = false,
                        Color = UIColor.White
                    };
                    progressRing.StartAnimating();
                    viewCenterContainer.AddUnderVisiblity(progressRing, BindingHost, nameof(ViewModel.IsSyncing));

                    var labelSyncing = new UILabel()
                    {
                        TranslatesAutoresizingMaskIntoConstraints = false,
                        Text          = PowerPlannerResources.GetString("LoginPage_String_SyncingAccount"),
                        TextColor     = new UIColor(1, 1),
                        Font          = UIFont.PreferredTitle2,
                        TextAlignment = UITextAlignment.Center
                    };
                    viewCenterContainer.AddUnderVisiblity(labelSyncing, BindingHost, nameof(ViewModel.IsSyncing));

                    var labelSyncError = new UILabel()
                    {
                        TranslatesAutoresizingMaskIntoConstraints = false,
                        Text          = PowerPlannerResources.GetString("String_SyncError"),
                        TextColor     = new UIColor(1, 1),
                        Font          = UIFont.PreferredTitle2,
                        TextAlignment = UITextAlignment.Center
                    };
                    viewCenterContainer.AddUnderVisiblity(labelSyncError, BindingHost, nameof(ViewModel.IsSyncing), invert: true);

                    var buttonTryAgain = PowerPlannerUIHelper.CreatePowerPlannerBlueButton("Try again");
                    buttonTryAgain.TranslatesAutoresizingMaskIntoConstraints = false;
                    buttonTryAgain.TouchUpInside += new WeakEventHandler <EventArgs>(delegate { ViewModel.TryAgain(); }).Handler;
                    viewCenterContainer.AddUnderVisiblity(buttonTryAgain, BindingHost, nameof(ViewModel.IsSyncing), invert: true);

                    var labelErrorDescription = new UILabel()
                    {
                        TranslatesAutoresizingMaskIntoConstraints = false,
                        TextColor     = new UIColor(0.9f, 1),
                        Font          = UIFont.PreferredCaption1,
                        TextAlignment = UITextAlignment.Left,
                        Lines         = 0
                    };
                    BindingHost.SetLabelTextBinding(labelErrorDescription, nameof(ViewModel.Error));
                    viewCenterContainer.AddUnderVisiblity(labelErrorDescription, BindingHost, nameof(ViewModel.Error));
                }
                safeView.Add(viewCenterContainer);
                viewCenterContainer.StretchWidth(safeView, left: 16, right: 16);

                var viewLowerSpacer = new UIView()
                {
                    TranslatesAutoresizingMaskIntoConstraints = false
                };
                safeView.Add(viewLowerSpacer);
                viewLowerSpacer.StretchWidth(safeView);

                safeView.AddConstraints(NSLayoutConstraint.FromVisualFormat($"V:|-16-[viewTopSpacer(==viewLowerSpacer)][viewCenterContainer][viewLowerSpacer]-16-|", NSLayoutFormatOptions.AlignAllCenterX, null, new NSDictionary(
                                                                                "viewCenterContainer", viewCenterContainer,
                                                                                "viewTopSpacer", viewTopSpacer,
                                                                                "viewLowerSpacer", viewLowerSpacer)));

                var buttonSettings = new UIControl()
                {
                    TranslatesAutoresizingMaskIntoConstraints = false
                };
                {
                    var settingsImage = new UIImageView(UIImage.FromBundle("SettingsIcon").ImageWithRenderingMode(UIImageRenderingMode.AlwaysTemplate))
                    {
                        TranslatesAutoresizingMaskIntoConstraints = false,
                        TintColor   = UIColor.White,
                        ContentMode = UIViewContentMode.ScaleAspectFit
                    };
                    buttonSettings.Add(settingsImage);
                    settingsImage.StretchHeight(buttonSettings, top: 4, bottom: 4);

                    var label = new UILabel()
                    {
                        TranslatesAutoresizingMaskIntoConstraints = false,
                        Font      = UIFont.PreferredCaption1,
                        TextColor = UIColor.White,
                        Text      = PowerPlannerResources.GetString("MainMenuItem_Settings")
                    };
                    buttonSettings.Add(label);
                    label.StretchHeight(buttonSettings);

                    buttonSettings.AddConstraints(NSLayoutConstraint.FromVisualFormat("H:|[image(22)]-8-[label]|", NSLayoutFormatOptions.DirectionLeadingToTrailing,
                                                                                      "image", settingsImage,
                                                                                      "label", label));
                }
                BindingHost.SetVisibilityBinding(buttonSettings, nameof(ViewModel.IsSyncing), invert: true);
                safeView.Add(buttonSettings);

                buttonSettings.TouchUpInside += new WeakEventHandler(delegate { ViewModel.OpenSettings(asPopup: true); }).Handler;
                buttonSettings.PinToTop(safeView, top: UIDevice.CurrentDevice.CheckSystemVersion(11, 0) ? 12 : 28); // We do this comparison since on iOS 11 the safe view adds extra padding
                buttonSettings.PinToLeft(safeView, left: 12);
                buttonSettings.SetHeight(30);
            }

            base.OnViewModelLoadedOverride();
        }
        private void UpdateLayoutMode()
        {
            // Clean up from previous state
            if (_prevLayoutMode != null)
            {
                // If for some reason state didn't change, do nothing
                if (_prevLayoutMode.Value == ViewModel.LayoutMode)
                {
                    return;
                }

                // On iOS we make these the same, so ignore changes between them
                if ((_prevLayoutMode.Value == ScheduleViewModel.LayoutModes.FullEditing || _prevLayoutMode.Value == ScheduleViewModel.LayoutModes.SplitEditing) &&
                    (ViewModel.LayoutMode == ScheduleViewModel.LayoutModes.FullEditing || ViewModel.LayoutMode == ScheduleViewModel.LayoutModes.SplitEditing))
                {
                    return;
                }

                switch (_prevLayoutMode.Value)
                {
                case ScheduleViewModel.LayoutModes.SplitEditing:
                case ScheduleViewModel.LayoutModes.FullEditing:
                    _editingView.RemoveFromSuperview();
                    break;

                case ScheduleViewModel.LayoutModes.Welcome:
                    _welcomeView.RemoveFromSuperview();
                    break;
                }
            }

            _prevLayoutMode = ViewModel.LayoutMode;

            if (ViewModel.LayoutMode == ScheduleViewModel.LayoutModes.Normal)
            {
                NavItem.RightBarButtonItem = _editButton;
                Title = "Schedule";
            }
            else if (ViewModel.LayoutMode == ScheduleViewModel.LayoutModes.SplitEditing ||
                     ViewModel.LayoutMode == ScheduleViewModel.LayoutModes.FullEditing)
            {
                if (_editingView == null)
                {
                    _editingView = new UIScrollView()
                    {
                        TranslatesAutoresizingMaskIntoConstraints = false,
                        ShowsHorizontalScrollIndicator            = false,
                        BackgroundColor = UIColor.White
                    };
                    var actualEditingView = new UIScheduleEditingView(ViewModel);
                    _editingView.Add(actualEditingView);
                    actualEditingView.ConfigureForVerticalScrolling(_editingView, top: 16, bottom: 16);

                    MainScreenViewController.ListenToTabBarHeightChanged(ref _tabBarHeightListener, delegate
                    {
                        _editingView.ContentInset = new UIEdgeInsets(0, 0, MainScreenViewController.TAB_BAR_HEIGHT, 0);
                    });
                }

                ContentView.Add(_editingView);
                _editingView.StretchWidthAndHeight(ContentView);

                NavItem.RightBarButtonItem = _doneButton;
                Title = "Edit Schedule";
            }
            else
            {
                if (_welcomeView == null)
                {
                    _welcomeView = new UIView()
                    {
                        TranslatesAutoresizingMaskIntoConstraints = false,
                        BackgroundColor = UIColor.White
                    };
                    {
                        // New user
                        var topSpacer = new UIView()
                        {
                            TranslatesAutoresizingMaskIntoConstraints = false
                        };
                        _welcomeView.Add(topSpacer);
                        topSpacer.StretchWidth(_welcomeView);

                        var bottomSpacer = new UIView()
                        {
                            TranslatesAutoresizingMaskIntoConstraints = false
                        };
                        _welcomeView.Add(bottomSpacer);
                        bottomSpacer.StretchWidth(_welcomeView);

                        var title = new UILabel()
                        {
                            TranslatesAutoresizingMaskIntoConstraints = false,
                            Text = "Welcome to Power Planner!",
                            AdjustsFontSizeToFitWidth = true,
                            Font          = UIFont.PreferredTitle3,
                            TextAlignment = UITextAlignment.Center
                        };
                        _welcomeView.Add(title);
                        title.StretchWidth(_welcomeView, left: 16, right: 16);

                        var subtitle = new UILabel()
                        {
                            TranslatesAutoresizingMaskIntoConstraints = false,
                            Text          = "To get started, add your classes and schedule!",
                            Lines         = 0,
                            Font          = UIFont.PreferredCaption1,
                            TextAlignment = UITextAlignment.Center
                        };
                        _welcomeView.Add(subtitle);
                        subtitle.StretchWidth(_welcomeView, left: 16, right: 16);

                        var buttonAddClass = new UIButton(UIButtonType.System)
                        {
                            TranslatesAutoresizingMaskIntoConstraints = false
                        };
                        buttonAddClass.SetTitle("Add Class", UIControlState.Normal);
                        buttonAddClass.SetTitleColor(new UIColor(1, 1), UIControlState.Normal);
                        buttonAddClass.BackgroundColor = ColorResources.PowerPlannerAccentBlue;
                        buttonAddClass.TouchUpInside  += new WeakEventHandler <EventArgs>(delegate { ViewModel.AddClass(); }).Handler;
                        _welcomeView.Add(buttonAddClass);
                        buttonAddClass.StretchWidth(_welcomeView, left: 16, right: 16);
                        buttonAddClass.SetMaxWidth(250);

                        _welcomeView.AddConstraints(NSLayoutConstraint.FromVisualFormat("V:|[topSpacer(==bottomSpacer)][title]-8-[subtitle]-16-[buttonAddClass][bottomSpacer]-32-|", NSLayoutFormatOptions.DirectionLeadingToTrailing,
                                                                                        "topSpacer", topSpacer,
                                                                                        "title", title,
                                                                                        "subtitle", subtitle,
                                                                                        "buttonAddClass", buttonAddClass,
                                                                                        "bottomSpacer", bottomSpacer));

                        // Returning user (we add on top so it remains clickable
                        if (ViewModel.IsReturningUserVisible)
                        {
                            var returningUser = new UILabel()
                            {
                                TranslatesAutoresizingMaskIntoConstraints = false,
                                Text = PowerPlannerResources.GetString("SchedulePage_TextBlockReturningUser.Text"),
                                Font = UIFont.PreferredCaption1
                            };
                            _welcomeView.Add(returningUser);
                            returningUser.StretchWidth(_welcomeView, left: 16, right: 16);

                            var buttonLogIn = PowerPlannerUIHelper.CreatePowerPlannerBlueButton("Log In");
                            buttonLogIn.TranslatesAutoresizingMaskIntoConstraints = false;
                            buttonLogIn.TouchUpInside += new WeakEventHandler <EventArgs>(delegate { ViewModel.LogIn(); }).Handler;
                            _welcomeView.Add(buttonLogIn);
                            buttonLogIn.PinToLeft(_welcomeView, left: 16);

                            _welcomeView.AddConstraints(NSLayoutConstraint.FromVisualFormat("V:|-16-[returningUser]-8-[buttonLogIn]", NSLayoutFormatOptions.DirectionLeadingToTrailing,
                                                                                            "returningUser", returningUser,
                                                                                            "buttonLogIn", buttonLogIn));
                        }
                    }
                }

                // Display the welcome view on top of everything, including on top of the nav bar
                ContentView.Add(_welcomeView);
                _welcomeView.StretchWidth(ContentView);

                NavItem.RightBarButtonItem = null;
                Title = "Edit Schedule";

                MainScreenViewController.ListenToTabBarHeightChanged(ref _welcomeViewTabBarHeightListener, delegate
                {
                    _welcomeView.StretchHeight(ContentView, top: 0, bottom: (float)MainScreenViewController.TAB_BAR_HEIGHT);
                });
            }
        }
Beispiel #12
0
        public override void OnViewModelLoadedOverride()
        {
            // [viewTextContainer]
            // [viewButtons]
            var safeView = BareUISafeView.CreateAndAddTo(View);

            {
                var viewTopSpacer = new UIView()
                {
                    TranslatesAutoresizingMaskIntoConstraints = false
                };
                safeView.Add(viewTopSpacer);
                viewTopSpacer.StretchWidth(safeView);

                var viewTextContainer = new UIStackView()
                {
                    TranslatesAutoresizingMaskIntoConstraints = false,
                    Axis    = UILayoutConstraintAxis.Vertical,
                    Spacing = 8
                };
                {
                    var labelTitle = new UILabel()
                    {
                        TranslatesAutoresizingMaskIntoConstraints = false,
                        Text          = "Power Planner",
                        TextColor     = new UIColor(1, 1),
                        Font          = UIFont.PreferredTitle1,
                        TextAlignment = UITextAlignment.Center
                    };
                    viewTextContainer.AddArrangedSubview(labelTitle);
                    labelTitle.StretchWidth(viewTextContainer);

                    var labelSubtitle = new UILabel()
                    {
                        TranslatesAutoresizingMaskIntoConstraints = false,
                        Text          = "The ultimate homework planner",
                        TextColor     = new UIColor(0.9f, 1),
                        Font          = UIFont.PreferredCaption1,
                        TextAlignment = UITextAlignment.Center
                    };
                    viewTextContainer.AddArrangedSubview(labelSubtitle);
                    labelSubtitle.StretchWidth(viewTextContainer);
                }
                safeView.Add(viewTextContainer);
                viewTextContainer.StretchWidth(safeView, left: 16, right: 16);

                var viewLowerSpacer = new UIView()
                {
                    TranslatesAutoresizingMaskIntoConstraints = false
                };
                safeView.Add(viewLowerSpacer);
                viewLowerSpacer.StretchWidth(safeView);

                var viewButtons = new UIView()
                {
                    TranslatesAutoresizingMaskIntoConstraints = false
                };
                {
                    var buttonLogin = PowerPlannerUIHelper.CreatePowerPlannerBlueButton("Log In");
                    buttonLogin.TranslatesAutoresizingMaskIntoConstraints = false;
                    buttonLogin.TouchUpInside += new WeakEventHandler <EventArgs>(delegate { ViewModel.Login(); }).Handler;
                    viewButtons.Add(buttonLogin);
                    buttonLogin.StretchHeight(viewButtons);

                    var buttonCreateAccount = PowerPlannerUIHelper.CreatePowerPlannerBlueButton("Create Account");
                    buttonCreateAccount.TranslatesAutoresizingMaskIntoConstraints = false;
                    buttonCreateAccount.TouchUpInside += new WeakEventHandler <EventArgs>(delegate { ViewModel.CreateAccount(); }).Handler;
                    viewButtons.Add(buttonCreateAccount);
                    buttonCreateAccount.StretchHeight(viewButtons);

                    viewButtons.AddConstraints(NSLayoutConstraint.FromVisualFormat($"H:|[buttonLogin(==buttonCreateAccount)]-8-[buttonCreateAccount]|", NSLayoutFormatOptions.DirectionLeadingToTrailing, null, new NSDictionary(
                                                                                       "buttonLogin", buttonLogin,
                                                                                       "buttonCreateAccount", buttonCreateAccount)));
                }
                safeView.Add(viewButtons);
                viewButtons.StretchWidth(safeView, left: 16, right: 16);

                safeView.AddConstraints(NSLayoutConstraint.FromVisualFormat($"V:|-16-[viewTopSpacer(==viewLowerSpacer)][viewTextContainer][viewLowerSpacer]-16-[viewButtons]-16-|", NSLayoutFormatOptions.AlignAllCenterX, null, new NSDictionary(
                                                                                "viewTextContainer", viewTextContainer,
                                                                                "viewButtons", viewButtons,
                                                                                "viewTopSpacer", viewTopSpacer,
                                                                                "viewLowerSpacer", viewLowerSpacer)));

                var buttonSettings = new UIControl()
                {
                    TranslatesAutoresizingMaskIntoConstraints = false
                };
                {
                    var settingsImage = new UIImageView(UIImage.FromBundle("TabSettings").ImageWithRenderingMode(UIImageRenderingMode.AlwaysTemplate))
                    {
                        TranslatesAutoresizingMaskIntoConstraints = false,
                        TintColor   = UIColor.White,
                        ContentMode = UIViewContentMode.ScaleAspectFit
                    };
                    buttonSettings.Add(settingsImage);
                    settingsImage.StretchHeight(buttonSettings, top: 4, bottom: 4);

                    var label = new UILabel()
                    {
                        TranslatesAutoresizingMaskIntoConstraints = false,
                        Font      = UIFont.PreferredCaption1,
                        TextColor = UIColor.White,
                        Text      = "About"
                    };
                    buttonSettings.Add(label);
                    label.StretchHeight(buttonSettings);

                    buttonSettings.AddConstraints(NSLayoutConstraint.FromVisualFormat("H:|[image(22)]-8-[label]|", NSLayoutFormatOptions.DirectionLeadingToTrailing,
                                                                                      "image", settingsImage,
                                                                                      "label", label));
                }
                safeView.Add(buttonSettings);
                buttonSettings.TouchUpInside += new WeakEventHandler(delegate { OpenAboutPageAsPopup(); }).Handler;
                buttonSettings.PinToTop(safeView, top: UIDevice.CurrentDevice.CheckSystemVersion(11, 0) ? 12 : 28); // We do this comparison since on iOS 11 the safe view adds extra padding
                buttonSettings.PinToLeft(safeView, left: 12);
                buttonSettings.SetHeight(30);
            }

            base.OnViewModelLoadedOverride();
        }
Beispiel #13
0
 private void ConfirmDelete()
 {
     PowerPlannerUIHelper.ConfirmDeleteQuick(this, NavItem.RightBarButtonItems.First(), ViewModel.Delete, "Yes, delete");
 }
        public ConfigureClassGradeScaleViewController()
        {
            Title = "Grade Scale";

            var cancelButton = new UIBarButtonItem()
            {
                Title = "Cancel"
            };

            cancelButton.Clicked            += new WeakEventHandler <EventArgs>(CancelButton_Clicked).Handler;
            NavigationItem.LeftBarButtonItem = cancelButton;

            var saveButton = new UIBarButtonItem()
            {
                Title = "Save"
            };

            saveButton.Clicked += new WeakEventHandler <EventArgs>(SaveButton_Clicked).Handler;
            NavigationItem.RightBarButtonItem = saveButton;

            PowerPlannerUIHelper.ConfigureForInputsStyle(this);

            StackView.AddTopSectionDivider();

            var savedScalesContainer = new UIView()
            {
                TranslatesAutoresizingMaskIntoConstraints = false
            };

            {
                var pickerSavedScales = new BareUIInlinePickerView(this, left: 16, right: 16)
                {
                    TranslatesAutoresizingMaskIntoConstraints = false,
                    HeaderText = "Scale"
                };
                BindingHost.SetItemsSourceBinding(pickerSavedScales, nameof(ViewModel.SavedGradeScales));
                BindingHost.SetSelectedItemBinding(pickerSavedScales, nameof(ViewModel.SelectedSavedGradeScale));
                savedScalesContainer.AddSubview(pickerSavedScales);
                pickerSavedScales.StretchHeight(savedScalesContainer);

                var buttonSaveScale = new UIButton(UIButtonType.Custom)
                {
                    TranslatesAutoresizingMaskIntoConstraints = false,
                    //TintColor = UIColor.
                };
                buttonSaveScale.SetImage(UIImage.FromBundle("SaveAsIcon").ImageWithRenderingMode(UIImageRenderingMode.AlwaysTemplate), UIControlState.Normal);
                buttonSaveScale.TouchUpInside += new WeakEventHandler(ButtonSaveScale_TouchUpInside).Handler;
                savedScalesContainer.Add(buttonSaveScale);
                buttonSaveScale.StretchHeight(savedScalesContainer, bottom: 1);

                savedScalesContainer.AddConstraints(NSLayoutConstraint.FromVisualFormat("H:|[picker][save(44)]-16-|", NSLayoutFormatOptions.DirectionLeadingToTrailing,
                                                                                        "picker", pickerSavedScales,
                                                                                        "save", buttonSaveScale));

                savedScalesContainer.SetHeight(44);
            }
            StackView.AddArrangedSubview(savedScalesContainer);
            savedScalesContainer.StretchWidth(StackView);

            StackView.AddSectionDivider();

            var headerView = new UIView()
            {
                TranslatesAutoresizingMaskIntoConstraints = false
            };

            {
                var labelStartingGrade = new UILabel()
                {
                    TranslatesAutoresizingMaskIntoConstraints = false,
                    Text = "Starting Grade",
                    Font = UIFont.PreferredBody.Bold()
                };
                headerView.Add(labelStartingGrade);
                labelStartingGrade.StretchHeight(headerView, top: 8, bottom: 8);

                var labelGpa = new UILabel()
                {
                    TranslatesAutoresizingMaskIntoConstraints = false,
                    Text = "GPA",
                    Font = UIFont.PreferredBody.Bold()
                };
                headerView.Add(labelGpa);
                labelGpa.StretchHeight(headerView, top: 8, bottom: 8);

                headerView.AddConstraints(NSLayoutConstraint.FromVisualFormat("H:|[startingGrade][gpa(==startingGrade)]-52-|", NSLayoutFormatOptions.DirectionLeadingToTrailing,
                                                                              "startingGrade", labelStartingGrade,
                                                                              "gpa", labelGpa));
            }
            StackView.AddArrangedSubview(headerView);
            headerView.StretchWidth(StackView, left: 16, right: 16);

            StackView.AddDivider();

            var scalesView = new UIView()
            {
                TranslatesAutoresizingMaskIntoConstraints = false
            };

            {
                _itemsSourceGradeScales = new BareUIViewItemsSourceAdapterAsStackPanel(scalesView, (w) => { return(new UIEditingGradeScaleView(this)
                    {
                        DataContext = w
                    }); });
            }
            StackView.AddArrangedSubview(scalesView);
            scalesView.StretchWidth(StackView, left: 16);

            var buttonAdd = new UIButton(UIButtonType.System)
            {
                TranslatesAutoresizingMaskIntoConstraints = false
            };

            buttonAdd.SetTitle("Add Grade Scale", UIControlState.Normal);
            buttonAdd.TouchUpInside += new WeakEventHandler(delegate { ViewModel.AddGradeScale(); }).Handler;
            StackView.AddArrangedSubview(buttonAdd);
            buttonAdd.StretchWidth(StackView);
            buttonAdd.SetHeight(44);

            StackView.AddBottomSectionDivider();
        }