public UIEditClassScheduleTimeView() { _labelDayOfWeeks = new UILabel() { TranslatesAutoresizingMaskIntoConstraints = false, Font = UIFont.PreferredHeadline }; this.Add(_labelDayOfWeeks); _labelDayOfWeeks.StretchWidth(this, left: 8, right: 8); _labelTime = new UILabel() { TranslatesAutoresizingMaskIntoConstraints = false, Font = UIFont.PreferredCaption1 }; this.Add(_labelTime); _labelTime.StretchWidth(this, left: 8, right: 8); _labelRoom = new UILabel() { TranslatesAutoresizingMaskIntoConstraints = false, Font = UIFont.PreferredCaption1, TextColor = UIColor.DarkGray }; _visibilityRoom = new BareUIVisibilityContainer() { Child = _labelRoom }; this.Add(_visibilityRoom); _visibilityRoom.StretchWidth(this, left: 8, right: 8); _labelWeek = new UILabel() { TranslatesAutoresizingMaskIntoConstraints = false, Font = UIFont.PreferredCaption1, TextColor = UIColor.DarkGray }; _visibilityWeek = new BareUIVisibilityContainer() { Child = _labelWeek }; this.Add(_visibilityWeek); _visibilityWeek.StretchWidth(this, left: 8, right: 8); this.AddConstraints(NSLayoutConstraint.FromVisualFormat($"V:|[labelDayOfWeeks][labelTime][visibilityRoom][visibilityWeek]|", NSLayoutFormatOptions.DirectionLeadingToTrailing, null, new NSDictionary( "labelDayOfWeeks", _labelDayOfWeeks, "labelTime", _labelTime, "visibilityRoom", _visibilityRoom, "visibilityWeek", _visibilityWeek))); var touchContainer = new UIControl() { TranslatesAutoresizingMaskIntoConstraints = false }; this.Add(touchContainer); touchContainer.StretchWidth(this); touchContainer.StretchHeight(this); touchContainer.TouchUpInside += new WeakEventHandler <EventArgs>(TouchContainer_TouchUpInside).Handler; }
public void SetVisibilityBinding(BareUIVisibilityContainer visibilityContainer, string propertyPath, bool invert = false) { SetBinding(propertyPath, value => { bool boolean; if (value is bool b) { boolean = b; } else if (value is string s) { boolean = !string.IsNullOrWhiteSpace(s); } else { boolean = value != null; } if (invert) { boolean = !boolean; } visibilityContainer.IsVisible = boolean; }); }
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 override void OnViewModelLoadedOverride() { AddTopSectionDivider(); _errorContainer = new BareUIVisibilityContainer() { TranslatesAutoresizingMaskIntoConstraints = false, IsVisible = false }; { var stackViewIncorrect = new UIStackView() { Axis = UILayoutConstraintAxis.Vertical }; stackViewIncorrect.AddArrangedSubview(new UIView() { TranslatesAutoresizingMaskIntoConstraints = false }.SetHeight(8)); _labelError = new UILabel() { TranslatesAutoresizingMaskIntoConstraints = false, Text = "Error", Lines = 0, TextColor = UIColor.Red }; stackViewIncorrect.AddArrangedSubview(_labelError); _labelError.StretchWidth(stackViewIncorrect, left: 16, right: 16); stackViewIncorrect.AddArrangedSubview(new UIView() { TranslatesAutoresizingMaskIntoConstraints = false }.SetHeight(8)); AddDivider(stackViewIncorrect); _errorContainer.Child = stackViewIncorrect; } StackView.AddArrangedSubview(_errorContainer); _errorContainer.StretchWidth(StackView); var textField = new UITextField() { Placeholder = "New username", AutocapitalizationType = UITextAutocapitalizationType.None, AutocorrectionType = UITextAutocorrectionType.No, KeyboardType = UIKeyboardType.ASCIICapable, ReturnKeyType = UIReturnKeyType.Done }; textField.AddTarget(new WeakEventHandler <EventArgs>(delegate { _errorContainer.IsVisible = false; }).Handler, UIControlEvent.EditingChanged); AddTextField(textField, nameof(ViewModel.Username), firstResponder: true); AddSectionDivider(); var buttonContinue = new UIButton(UIButtonType.System) { TranslatesAutoresizingMaskIntoConstraints = false }; buttonContinue.TouchUpInside += new WeakEventHandler <EventArgs>(delegate { ViewModel.Update(); }).Handler; buttonContinue.SetTitle("Update Username", UIControlState.Normal); StackView.AddArrangedSubview(buttonContinue); buttonContinue.StretchWidth(StackView); buttonContinue.SetHeight(44); AddBottomSectionDivider(); ViewModel.ActionError += new WeakEventHandler <string>(ViewModel_ActionError).Handler; BindingHost.SetBinding(nameof(ViewModel.IsUpdatingUsername), delegate { IsLoadingOverlayVisible = ViewModel.IsUpdatingUsername; }); base.OnViewModelLoadedOverride(); }
public override void OnViewModelLoadedOverride() { bool isTask = ViewModel.Item.Type == TaskOrEventType.Task; BindingHost.SetBinding <string>(nameof(ViewModel.PageTitle), (t) => Title = StringWithCapitals(t)); var buttonEdit = new UIBarButtonItem(UIBarButtonSystemItem.Edit); buttonEdit.Clicked += new WeakEventHandler(delegate { ViewModel.Edit(); }).Handler; var buttonMore = new UIBarButtonItem(UIImage.FromBundle("MenuVerticalIcon").ImageWithRenderingMode(UIImageRenderingMode.AlwaysTemplate), UIBarButtonItemStyle.Plain, new WeakEventHandler(ButtonMore_Clicked).Handler); NavItem.RightBarButtonItems = new UIBarButtonItem[] { buttonMore, buttonEdit }; int bottomSliderHeight = isTask ? CIRCLE_BUTTON_HEIGHT + 16 + 16 : 0; _scrollView = new UIScrollView() { TranslatesAutoresizingMaskIntoConstraints = false, ShowsHorizontalScrollIndicator = false }; base.ContentView.AddSubview(_scrollView); _scrollView.StretchWidthAndHeight(base.ContentView, bottom: bottomSliderHeight); _stackView = new UIStackView() { TranslatesAutoresizingMaskIntoConstraints = false, Axis = UILayoutConstraintAxis.Vertical }; _scrollView.AddSubview(_stackView); _stackView.ConfigureForVerticalScrolling(_scrollView, top: 16, bottom: 16, left: 16, right: 16); _itemBindingHost = new BindingHost() { BindingObject = ViewModel.Item }; _classBindingHost = new BindingHost(); _itemBindingHost.SetBinding(nameof(ViewItemTaskOrEvent.Class), delegate { _classBindingHost.BindingObject = ViewModel.Item.Class; }); var labelTitle = new UILabel() { TranslatesAutoresizingMaskIntoConstraints = false, Font = UIFont.PreferredTitle3, Lines = 0 }; _itemBindingHost.SetLabelTextBinding(labelTitle, nameof(ViewModel.Item.Name)); _stackView.AddArrangedSubview(labelTitle); labelTitle.StretchWidth(_stackView); _stackView.AddArrangedSubview(new UIView().SetHeight(4)); var labelSubtitle = new UILabel() { TranslatesAutoresizingMaskIntoConstraints = false, Font = UIFont.PreferredSubheadline, Lines = 0 }; _itemBindingHost.SetLabelTextBinding(labelSubtitle, nameof(ViewItemTaskOrEvent.Subtitle)); _classBindingHost.SetBinding <byte[]>(nameof(ViewItemClass.Color), (color) => { labelSubtitle.TextColor = BareUIHelper.ToColor(color); }); _stackView.AddArrangedSubview(labelSubtitle); labelSubtitle.StretchWidth(_stackView); _stackView.AddArrangedSubview(new UIView().SetHeight(4)); _stackView.AddSpacing(12); var textViewDetails = new UITextView() { TranslatesAutoresizingMaskIntoConstraints = false, Font = UIFont.PreferredBody, TextColor = UIColorCompat.SecondaryLabelColor, Editable = false, ScrollEnabled = false, // Link detection: http://iosdevelopertips.com/user-interface/creating-clickable-hyperlinks-from-a-url-phone-number-or-address.html DataDetectorTypes = UIDataDetectorType.All }; // Lose the padding: https://stackoverflow.com/questions/746670/how-to-lose-margin-padding-in-uitextview textViewDetails.TextContainerInset = UIEdgeInsets.Zero; textViewDetails.TextContainer.LineFragmentPadding = 0; _itemBindingHost.SetTextViewTextBinding(textViewDetails, nameof(ViewItemTaskOrEvent.Details)); _stackView.AddArrangedSubview(textViewDetails); textViewDetails.StretchWidth(_stackView); if (ViewModel.IsUnassigedMode) { var buttonAddGrade = new UIButton(UIButtonType.System) { TranslatesAutoresizingMaskIntoConstraints = false }; buttonAddGrade.SetTitle("Add Grade", UIControlState.Normal); buttonAddGrade.SetTitleColor(new UIColor(1, 1), UIControlState.Normal); buttonAddGrade.BackgroundColor = ColorResources.PowerPlannerAccentBlue; buttonAddGrade.TouchUpInside += new WeakEventHandler <EventArgs>(delegate { ViewModel.AddGrade(); }).Handler; base.ContentView.Add(buttonAddGrade); // https://stackoverflow.com/questions/46344381/ios-11-layout-guidance-about-safe-area-for-iphone-x if (UIDevice.CurrentDevice.CheckSystemVersion(11, 0)) { NSLayoutConstraint.ActivateConstraints(new NSLayoutConstraint[] { buttonAddGrade.LeftAnchor.ConstraintEqualTo(base.ContentView.SafeAreaLayoutGuide.LeftAnchor, 16), buttonAddGrade.RightAnchor.ConstraintEqualTo(base.ContentView.SafeAreaLayoutGuide.RightAnchor, -16), buttonAddGrade.BottomAnchor.ConstraintEqualTo(base.ContentView.SafeAreaLayoutGuide.BottomAnchor, -16) }); } else { buttonAddGrade.StretchWidth(base.ContentView, left: 16, right: 16); buttonAddGrade.PinToBottom(base.ContentView, bottom: 16); } } else { var completionSliderVisibilityContainer = new BareUIVisibilityContainer() { TranslatesAutoresizingMaskIntoConstraints = false }; { var completionSliderContainer = new UIView() { TranslatesAutoresizingMaskIntoConstraints = false }; { _completionSlider = new UISlider() { TranslatesAutoresizingMaskIntoConstraints = false, MaxValue = 1, MinValue = 0, MinimumTrackTintColor = UIColor.FromRGB(42 / 255f, 222 / 255f, 42 / 255f), ThumbTintColor = UIColor.FromRGB(42 / 255f, 222 / 255f, 42 / 255f) }; _itemBindingHost.SetSliderBinding(_completionSlider, nameof(ViewItemTaskOrEvent.PercentComplete)); _completionSlider.TouchUpInside += new WeakEventHandler(CompletionSlider_ValueCommitted).Handler; _completionSlider.TouchUpOutside += new WeakEventHandler(CompletionSlider_ValueCommitted).Handler; completionSliderContainer.Add(_completionSlider); _completionSlider.StretchHeight(completionSliderContainer); _completionSlider.StretchWidth(completionSliderContainer, left: CIRCLE_BUTTON_HEIGHT + 8, right: CIRCLE_BUTTON_HEIGHT + 8); var incompleteImageContainer = new UIControl() { TranslatesAutoresizingMaskIntoConstraints = false }; { _incompleteImageView = new UIImageView() { TranslatesAutoresizingMaskIntoConstraints = false, ContentMode = UIViewContentMode.ScaleAspectFit, TintColor = UIColor.LightGray }; incompleteImageContainer.Add(_incompleteImageView); _incompleteImageView.StretchHeight(incompleteImageContainer); _incompleteImageView.SetWidth(CIRCLE_BUTTON_HEIGHT); _incompleteImageView.PinToLeft(incompleteImageContainer); } incompleteImageContainer.TouchUpInside += new WeakEventHandler(delegate { _completionSlider.Value = 0; ViewModel.SetPercentComplete(0); UpdateSliderImages(); }).Handler; completionSliderContainer.Add(incompleteImageContainer); incompleteImageContainer.StretchHeight(completionSliderContainer); incompleteImageContainer.PinToLeft(completionSliderContainer); incompleteImageContainer.SetWidth(CIRCLE_BUTTON_HEIGHT); var completeImageContainer = new UIControl() { TranslatesAutoresizingMaskIntoConstraints = false }; { _completeImageView = new UIImageView() { TranslatesAutoresizingMaskIntoConstraints = false, ContentMode = UIViewContentMode.ScaleAspectFit, TintColor = UIColor.LightGray }; completeImageContainer.Add(_completeImageView); _completeImageView.StretchHeight(completeImageContainer); _completeImageView.SetWidth(CIRCLE_BUTTON_HEIGHT); _completeImageView.PinToRight(completeImageContainer); } completeImageContainer.TouchUpInside += new WeakEventHandler(delegate { _completionSlider.Value = 1; ViewModel.SetPercentComplete(1); UpdateSliderImages(); }).Handler; completionSliderContainer.Add(completeImageContainer); completeImageContainer.StretchHeight(completionSliderContainer); completeImageContainer.PinToRight(completionSliderContainer); completeImageContainer.SetWidth(CIRCLE_BUTTON_HEIGHT); _completionSlider.ValueChanged += new WeakEventHandler(delegate { UpdateSliderImages(); }).Handler; } completionSliderContainer.SetHeight(CIRCLE_BUTTON_HEIGHT); completionSliderVisibilityContainer.Child = completionSliderContainer; } BindingHost.SetVisibilityBinding(completionSliderVisibilityContainer, nameof(ViewModel.IsCompletionSliderVisible)); base.ContentView.Add(completionSliderVisibilityContainer); // https://stackoverflow.com/questions/46344381/ios-11-layout-guidance-about-safe-area-for-iphone-x if (UIDevice.CurrentDevice.CheckSystemVersion(11, 0)) { NSLayoutConstraint.ActivateConstraints(new NSLayoutConstraint[] { completionSliderVisibilityContainer.LeftAnchor.ConstraintEqualTo(base.ContentView.SafeAreaLayoutGuide.LeftAnchor, 16), completionSliderVisibilityContainer.RightAnchor.ConstraintEqualTo(base.ContentView.SafeAreaLayoutGuide.RightAnchor, -16), completionSliderVisibilityContainer.BottomAnchor.ConstraintEqualTo(base.ContentView.SafeAreaLayoutGuide.BottomAnchor, -16) }); } else { completionSliderVisibilityContainer.StretchWidth(base.ContentView, left: 16, right: 16); completionSliderVisibilityContainer.PinToBottom(base.ContentView, bottom: 16); } _itemBindingHost.SetBinding(nameof(ViewItemTaskOrEvent.PercentComplete), UpdateSliderImages); } base.OnViewModelLoadedOverride(); }
public override async void OnViewModelLoadedOverride() { if (ViewModel.ContextualMessage != null) { var labelContextualMessage = new UILabel() { TranslatesAutoresizingMaskIntoConstraints = false, Text = ViewModel.ContextualMessage, Font = UIFont.PreferredBody.Bold(), Lines = 0 }; StackView.AddArrangedSubview(labelContextualMessage); labelContextualMessage.StretchWidth(StackView); AddSpacing(16); } var labelDescription = new UILabel() { TranslatesAutoresizingMaskIntoConstraints = false, Text = @"The premium version of Power Planner unlocks a number of useful features. The free version is limited to... - 1 semester - 5 grades per class - 1 repeating bulk entry of a task/event Once you purchase the premium version, you own the premium version on all your devices.", Lines = 0 }; StackView.AddArrangedSubview(labelDescription); labelDescription.StretchWidth(StackView); AddSpacing(16); _errorVisibilityContainer = new BareUIVisibilityContainer() { TranslatesAutoresizingMaskIntoConstraints = false, IsVisible = false }; { _labelError = new UILabel() { TextColor = UIColor.Red, Font = UIFont.PreferredBody.Bold(), Lines = 0 }; _errorVisibilityContainer.Child = _labelError; } StackView.AddArrangedSubview(_errorVisibilityContainer); _errorVisibilityContainer.StretchWidth(StackView); _buttonUpgrade = new UIButton(UIButtonType.System) { TranslatesAutoresizingMaskIntoConstraints = false }; _buttonUpgrade.SetTitle("UPGRADE TO PREMIUM", UIControlState.Normal); _buttonUpgrade.SetTitleColor(new UIColor(1, 1), UIControlState.Normal); _buttonUpgrade.BackgroundColor = ColorResources.PowerPlannerAccentBlue; _buttonUpgrade.TouchUpInside += new WeakEventHandler(ButtonUpgrade_TouchUpInside).Handler; StackView.AddArrangedSubview(_buttonUpgrade); _buttonUpgrade.StretchWidth(StackView); AddSpacing(16); var buttonRestore = new UIButton(UIButtonType.System) { TranslatesAutoresizingMaskIntoConstraints = false }; buttonRestore.SetTitle("Restore Previous Purchase", UIControlState.Normal); buttonRestore.SetTitleColor(new UIColor(1, 1), UIControlState.Normal); buttonRestore.BackgroundColor = ColorResources.PowerPlannerAccentBlue; buttonRestore.TouchUpInside += new WeakEventHandler(ButtonRestore_TouchUpInside).Handler; StackView.AddArrangedSubview(buttonRestore); buttonRestore.StretchWidth(StackView); if (!InAppPurchaseHelper.CanMakePayments) { _buttonUpgrade.Enabled = false; buttonRestore.Enabled = false; _labelError.Text = "App Store purchases not supported."; _errorVisibilityContainer.IsVisible = true; } else { iOSInAppPurchaseExtension.ResponseReceived += new WeakEventHandler <InAppPurchaseHelper.PurchaseResponse>(IOSInAppPurchaseExtension_ResponseReceived).Handler; string price = await InAppPurchaseHelper.GetPriceAsync(); if (price != null) { _buttonUpgrade.SetTitle("UPGRADE TO PREMIUM - " + price, UIControlState.Normal); } } base.OnViewModelLoadedOverride(); }
public override void OnViewModelLoadedOverride() { AddTopSectionDivider(); AddSpacing(8); var label = new UILabel() { TranslatesAutoresizingMaskIntoConstraints = false, Text = "Please confirm your identity by entering your Power Planner account password.", Lines = 0 }; StackView.AddArrangedSubview(label); label.StretchWidth(StackView, left: 16, right: 16); AddSpacing(8); AddDivider(); _incorrectViewContainer = new BareUIVisibilityContainer() { TranslatesAutoresizingMaskIntoConstraints = false, IsVisible = false }; { var stackViewIncorrect = new UIStackView() { Axis = UILayoutConstraintAxis.Vertical }; stackViewIncorrect.AddArrangedSubview(new UIView() { TranslatesAutoresizingMaskIntoConstraints = false }.SetHeight(8)); var labelIncorrect = new UILabel() { TranslatesAutoresizingMaskIntoConstraints = false, Text = "Incorrect password. Please try again.", Lines = 0, TextColor = UIColor.Red }; stackViewIncorrect.AddArrangedSubview(labelIncorrect); labelIncorrect.StretchWidth(stackViewIncorrect, left: 16, right: 16); stackViewIncorrect.AddArrangedSubview(new UIView() { TranslatesAutoresizingMaskIntoConstraints = false }.SetHeight(8)); AddDivider(stackViewIncorrect); _incorrectViewContainer.Child = stackViewIncorrect; } StackView.AddArrangedSubview(_incorrectViewContainer); _incorrectViewContainer.StretchWidth(StackView); var textField = new UITextField() { Placeholder = "Current password", SecureTextEntry = true, ReturnKeyType = UIReturnKeyType.Done }; textField.AddTarget(new WeakEventHandler <EventArgs>(delegate { _incorrectViewContainer.IsVisible = false; }).Handler, UIControlEvent.EditingChanged); AddTextField(textField, nameof(ViewModel.Password), firstResponder: true); AddSectionDivider(); var buttonContinue = new UIButton(UIButtonType.System) { TranslatesAutoresizingMaskIntoConstraints = false }; buttonContinue.TouchUpInside += new WeakEventHandler <EventArgs>(delegate { ViewModel.Continue(); }).Handler; buttonContinue.SetTitle("Continue", UIControlState.Normal); StackView.AddArrangedSubview(buttonContinue); buttonContinue.StretchWidth(StackView); buttonContinue.SetHeight(44); if (ViewModel.ShowForgotPassword) { AddDivider(fullWidth: true); var forgotViews = new UIView() { TranslatesAutoresizingMaskIntoConstraints = false, BackgroundColor = ColorResources.InputSectionDividers }; { var buttonForgotPassword = new UIButton(UIButtonType.System) { TranslatesAutoresizingMaskIntoConstraints = false, HorizontalAlignment = UIControlContentHorizontalAlignment.Center, Font = UIFont.PreferredCaption1 }; buttonForgotPassword.TouchUpInside += new WeakEventHandler(delegate { ViewModel.ForgotPassword(); }).Handler; buttonForgotPassword.SetTitle("Forgot Password", UIControlState.Normal); forgotViews.Add(buttonForgotPassword); buttonForgotPassword.StretchWidth(forgotViews); buttonForgotPassword.StretchHeight(forgotViews, top: 16, bottom: 16); } StackView.AddArrangedSubview(forgotViews); forgotViews.StretchWidth(StackView); forgotViews.SetHeight(44); } else { AddBottomSectionDivider(); } ViewModel.ActionIncorrectPassword += new WeakEventHandler(ViewModel_ActionIncorrectPassword).Handler; base.OnViewModelLoadedOverride(); }
public override void OnViewModelLoadedOverride() { base.OnViewModelLoadedOverride(); AddTopSectionDivider(); _errorContainer = new BareUIVisibilityContainer() { TranslatesAutoresizingMaskIntoConstraints = false, IsVisible = false }; { var stackViewIncorrect = new UIStackView() { Axis = UILayoutConstraintAxis.Vertical }; stackViewIncorrect.AddArrangedSubview(new UIView() { TranslatesAutoresizingMaskIntoConstraints = false }.SetHeight(8)); _labelError = new UILabel() { TranslatesAutoresizingMaskIntoConstraints = false, Text = "Error", Lines = 0, TextColor = UIColor.Red }; stackViewIncorrect.AddArrangedSubview(_labelError); _labelError.StretchWidth(stackViewIncorrect, left: 16, right: 16); stackViewIncorrect.AddArrangedSubview(new UIView() { TranslatesAutoresizingMaskIntoConstraints = false }.SetHeight(8)); AddDivider(stackViewIncorrect); _errorContainer.Child = stackViewIncorrect; } StackView.AddArrangedSubview(_errorContainer); _errorContainer.StretchWidth(StackView); var textField = new UITextField() { Placeholder = "Provide your email", AutocapitalizationType = UITextAutocapitalizationType.None, AutocorrectionType = UITextAutocorrectionType.Yes, KeyboardType = UIKeyboardType.EmailAddress, ReturnKeyType = UIReturnKeyType.Done }; textField.AddTarget(new WeakEventHandler <EventArgs>(delegate { _errorContainer.IsVisible = false; }).Handler, UIControlEvent.EditingChanged); AddTextField(textField, nameof(ViewModel.Email), firstResponder: true); AddSectionDivider(); var buttonConvert = new UIButton(UIButtonType.System) { TranslatesAutoresizingMaskIntoConstraints = false }; buttonConvert.TouchUpInside += new WeakEventHandler <EventArgs>(async delegate { ShowLoadingOverlay(); await ViewModel.CreateOnlineAccountAsync(); HideLoadingOverlay(); }).Handler; buttonConvert.SetTitle("Convert to Online Account", UIControlState.Normal); StackView.AddArrangedSubview(buttonConvert); buttonConvert.StretchWidth(StackView); buttonConvert.SetHeight(44); var mergeExistingContainer = new UIStackView() { Axis = UILayoutConstraintAxis.Vertical }; { mergeExistingContainer.AddSectionDivider(); mergeExistingContainer.AddSpacing(16); var labelMergeExistingExplanation = new UILabel() { TranslatesAutoresizingMaskIntoConstraints = false, Text = PowerPlannerResources.GetString("Settings_ConvertToOnline_TextBlockConfirmMergeExisting.Text"), Lines = 0, TextColor = UIColor.Red }; mergeExistingContainer.AddArrangedSubview(labelMergeExistingExplanation); labelMergeExistingExplanation.StretchWidth(mergeExistingContainer, left: 16, right: 16); mergeExistingContainer.AddSpacing(16); mergeExistingContainer.AddDivider(); var buttonContinue = new UIButton(UIButtonType.System) { TranslatesAutoresizingMaskIntoConstraints = false, TintColor = UIColor.Red }; buttonContinue.TouchUpInside += new WeakEventHandler <EventArgs>(async delegate { ShowLoadingOverlay(); await ViewModel.MergeExisting(); HideLoadingOverlay(); }).Handler; buttonContinue.SetTitle(PowerPlannerResources.GetString("Settings_ConfirmIdentityPage_ButtonContinue.Content"), UIControlState.Normal); mergeExistingContainer.AddArrangedSubview(buttonContinue); buttonContinue.StretchWidth(mergeExistingContainer); buttonContinue.SetHeight(44); mergeExistingContainer.AddDivider(); var buttonCancel = new UIButton(UIButtonType.System) { TranslatesAutoresizingMaskIntoConstraints = false }; buttonCancel.TouchUpInside += new WeakEventHandler <EventArgs>(delegate { ViewModel.CancelMergeExisting(); }).Handler; buttonCancel.SetTitle(PowerPlannerResources.GetString("Buttons_Cancel.Content"), UIControlState.Normal); mergeExistingContainer.AddArrangedSubview(buttonCancel); buttonCancel.StretchWidth(mergeExistingContainer); buttonCancel.SetHeight(44); } AddUnderVisiblity(mergeExistingContainer, nameof(ViewModel.ShowConfirmMergeExisting)); AddBottomSectionDivider(); BindingHost.SetBinding(nameof(ViewModel.Error), delegate { if (string.IsNullOrWhiteSpace(ViewModel.Error)) { _errorContainer.IsVisible = false; } else { _errorContainer.IsVisible = true; _labelError.Text = ViewModel.Error; } }); base.OnViewModelLoadedOverride(); }
public override void OnViewModelLoadedOverride() { AddTopSectionDivider(); AddSpacing(8); var label = new UILabel() { TranslatesAutoresizingMaskIntoConstraints = false, Text = "Your online account's username or password has changed. Please log back in to continue using your online account.", Lines = 0 }; StackView.AddArrangedSubview(label); label.StretchWidth(StackView, left: 16, right: 16); AddSpacing(8); AddDivider(); _errorContainer = new BareUIVisibilityContainer() { TranslatesAutoresizingMaskIntoConstraints = false, IsVisible = false }; { var stackViewIncorrect = new UIStackView() { Axis = UILayoutConstraintAxis.Vertical }; stackViewIncorrect.AddArrangedSubview(new UIView() { TranslatesAutoresizingMaskIntoConstraints = false }.SetHeight(8)); _labelError = new UILabel() { TranslatesAutoresizingMaskIntoConstraints = false, Text = "Error", Lines = 0, TextColor = UIColor.Red }; stackViewIncorrect.AddArrangedSubview(_labelError); _labelError.StretchWidth(stackViewIncorrect, left: 16, right: 16); stackViewIncorrect.AddArrangedSubview(new UIView() { TranslatesAutoresizingMaskIntoConstraints = false }.SetHeight(8)); AddDivider(stackViewIncorrect); _errorContainer.Child = stackViewIncorrect; } StackView.AddArrangedSubview(_errorContainer); _errorContainer.StretchWidth(StackView); var textFieldUsername = new UITextField() { Placeholder = "Username", AutocapitalizationType = UITextAutocapitalizationType.None, AutocorrectionType = UITextAutocorrectionType.No, KeyboardType = UIKeyboardType.ASCIICapable, ReturnKeyType = UIReturnKeyType.Next }; textFieldUsername.AddTarget(new WeakEventHandler <EventArgs>(delegate { _errorContainer.IsVisible = false; }).Handler, UIControlEvent.EditingChanged); AddTextField(textFieldUsername, nameof(ViewModel.Username)); AddDivider(); var textFieldPassword = new UITextField() { Placeholder = "Password", SecureTextEntry = true, ReturnKeyType = UIReturnKeyType.Done }; textFieldPassword.AddTarget(new WeakEventHandler <EventArgs>(delegate { _errorContainer.IsVisible = false; }).Handler, UIControlEvent.EditingChanged); AddTextField(textFieldPassword, nameof(ViewModel.Password), firstResponder: true); AddSectionDivider(); var buttonLogin = new UIButton(UIButtonType.System) { TranslatesAutoresizingMaskIntoConstraints = false }; buttonLogin.TouchUpInside += new WeakEventHandler <EventArgs>(delegate { ViewModel.LogIn(); }).Handler; buttonLogin.SetTitle("Log In", UIControlState.Normal); StackView.AddArrangedSubview(buttonLogin); buttonLogin.StretchWidth(StackView); buttonLogin.SetHeight(44); AddDivider(fullWidth: true); var forgotViews = new UIView() { TranslatesAutoresizingMaskIntoConstraints = false, BackgroundColor = ColorResources.InputSectionDividers }; { var leftSpacer = new UIView() { TranslatesAutoresizingMaskIntoConstraints = false }; forgotViews.Add(leftSpacer); var rightSpacer = new UIView() { TranslatesAutoresizingMaskIntoConstraints = false }; forgotViews.Add(rightSpacer); var buttonForgotUsername = new UIButton(UIButtonType.System) { TranslatesAutoresizingMaskIntoConstraints = false, HorizontalAlignment = UIControlContentHorizontalAlignment.Right, Font = UIFont.PreferredCaption1 }; buttonForgotUsername.TouchUpInside += new WeakEventHandler(delegate { ViewModel.ForgotUsername(); }).Handler; buttonForgotUsername.SetTitle("Forgot Username", UIControlState.Normal); forgotViews.Add(buttonForgotUsername); buttonForgotUsername.StretchHeight(forgotViews); var verticalDivider = new UIView() { TranslatesAutoresizingMaskIntoConstraints = false, BackgroundColor = UIColor.FromWhiteAlpha(0.7f, 1) }; forgotViews.Add(verticalDivider); verticalDivider.StretchHeight(forgotViews, top: 16, bottom: 16); var buttonForgotPassword = new UIButton(UIButtonType.System) { TranslatesAutoresizingMaskIntoConstraints = false, HorizontalAlignment = UIControlContentHorizontalAlignment.Left, Font = UIFont.PreferredCaption1 }; buttonForgotPassword.TouchUpInside += new WeakEventHandler(delegate { ViewModel.ForgotPassword(); }).Handler; buttonForgotPassword.SetTitle("Forgot Password", UIControlState.Normal); forgotViews.Add(buttonForgotPassword); buttonForgotPassword.StretchHeight(forgotViews); forgotViews.AddConstraints(NSLayoutConstraint.FromVisualFormat("H:|[leftSpacer][forgotUsername]-8-[verticalDivider(1)]-8-[forgotPassword][rightSpacer(==leftSpacer)]|", NSLayoutFormatOptions.DirectionLeadingToTrailing, null, new NSDictionary( "forgotUsername", buttonForgotUsername, "verticalDivider", verticalDivider, "forgotPassword", buttonForgotPassword, "leftSpacer", leftSpacer, "rightSpacer", rightSpacer))); } StackView.AddArrangedSubview(forgotViews); forgotViews.StretchWidth(StackView); forgotViews.SetHeight(44); BindingHost.SetBinding(nameof(ViewModel.Error), delegate { if (string.IsNullOrWhiteSpace(ViewModel.Error)) { _errorContainer.IsVisible = false; } else { _errorContainer.IsVisible = true; _labelError.Text = ViewModel.Error; } }); BindingHost.SetBinding(nameof(ViewModel.IsLoggingIn), delegate { IsLoadingOverlayVisible = ViewModel.IsLoggingIn; }); base.OnViewModelLoadedOverride(); }