public Composer () : base (null, null) { Title = "New Comment"; EdgesForExtendedLayout = UIRectEdge.None; var close = new UIBarButtonItem { Image = Images.Buttons.CancelButton }; NavigationItem.LeftBarButtonItem = close; SendItem = new UIBarButtonItem { Image = Images.Buttons.SaveButton }; NavigationItem.RightBarButtonItem = SendItem; TextView = new UITextView(ComputeComposerSize(CGRect.Empty)); TextView.Font = UIFont.PreferredBody; TextView.AutoresizingMask = UIViewAutoresizing.FlexibleHeight | UIViewAutoresizing.FlexibleWidth; // Work around an Apple bug in the UITextView that crashes if (ObjCRuntime.Runtime.Arch == ObjCRuntime.Arch.SIMULATOR) TextView.AutocorrectionType = UITextAutocorrectionType.No; View.AddSubview (TextView); _normalButtonImage = ImageFromColor(UIColor.White); _pressedButtonImage = ImageFromColor(UIColor.FromWhiteAlpha(0.0f, 0.4f)); OnActivation(d => { d(close.GetClickedObservable().Subscribe(_ => CloseComposer())); d(SendItem.GetClickedObservable().Subscribe(_ => PostCallback())); }); }
public Composer () : base (null, null) { Title = "New Comment"; EdgesForExtendedLayout = UIRectEdge.None; var close = new UIBarButtonItem { Image = Images.Buttons.Cancel }; NavigationItem.LeftBarButtonItem = close; SendItem = new UIBarButtonItem { Image = Images.Buttons.Save }; NavigationItem.RightBarButtonItem = SendItem; TextView = new UITextView(ComputeComposerSize(CGRect.Empty)); TextView.Font = UIFont.PreferredBody; TextView.AutoresizingMask = UIViewAutoresizing.FlexibleHeight | UIViewAutoresizing.FlexibleWidth; // Work around an Apple bug in the UITextView that crashes if (ObjCRuntime.Runtime.Arch == ObjCRuntime.Arch.SIMULATOR) TextView.AutocorrectionType = UITextAutocorrectionType.No; View.AddSubview (TextView); _normalButtonImage = ImageFromColor(UIColor.White); _pressedButtonImage = ImageFromColor(UIColor.FromWhiteAlpha(0.0f, 0.4f)); OnActivation(d => { d(close.GetClickedObservable().Subscribe(_ => CloseComposer())); d(SendItem.GetClickedObservable().Subscribe(_ => PostCallback())); }); }
public override void ViewDidLoad() { base.ViewDidLoad(); TableView.RowHeight = UITableView.AutomaticDimension; TableView.EstimatedRowHeight = 44f; var actionButton = new UIBarButtonItem(UIBarButtonSystemItem.Action); HeaderView.SetImage(null, Images.Avatar); HeaderView.Text = Title; TableView.RowHeight = UITableView.AutomaticDimension; TableView.EstimatedRowHeight = 44f; ViewModel.Bind(x => x.Changeset).Subscribe(x => { var msg = x.Commit.Message ?? string.Empty; msg = msg.Split('\n')[0]; HeaderView.Text = msg.Split('\n')[0]; HeaderView.SubText = "Commited " + (ViewModel.Changeset?.Commit?.Committer?.Date ?? DateTimeOffset.Now).Humanize(); HeaderView.SetImage(x.Author?.AvatarUrl, Images.Avatar); RefreshHeaderView(); }); ViewModel.Bind(x => x.Changeset).Subscribe(_ => Render()); ViewModel.BindCollection(x => x.Comments).Subscribe(_ => Render()); ViewModel.Bind(x => x.ShouldShowPro).Where(x => x).Subscribe(_ => this.ShowPrivateView()); OnActivation(d => { d(HeaderView.Clicked.BindCommand(ViewModel.GoToOwner)); d(ViewModel.Bind(x => x.Title).Subscribe(x => Title = x)); d(actionButton.GetClickedObservable().Subscribe(_ => ShowExtraMenu())); }); }
public static GistsViewController CreateUserGistsViewController(string username) { var applicationService = Locator.Current.GetService <IApplicationService>(); var mine = applicationService.Account.Username.ToLower().Equals(username.ToLower()); if (mine) { var viewModel = new CurrentUserGistsViewModel(username); var vc = new GistsViewController(viewModel) { Title = "My Gists" }; var button = new UIBarButtonItem(UIBarButtonSystemItem.Add); vc.NavigationItem.RightBarButtonItem = button; vc.WhenActivated(d => { d(button.GetClickedObservable() .Subscribe(_ => GistCreateViewController.Show(vc))); }); return(vc); } else { var viewModel = GistsViewModel.CreateUserGistsViewModel(username); var vc = new GistsViewController(viewModel) { Title = $"{username}'s Gists" }; return(vc); } }
public override void ViewDidLoad() { base.ViewDidLoad(); var filterBarButtonItem = new UIBarButtonItem { Image = Images.Filter }; var addBarButtonItem = new UIBarButtonItem(UIBarButtonSystemItem.Add); OnActivation(d => { d(filterBarButtonItem.GetClickedObservable().InvokeCommand(ViewModel.GoToFilterCommand)); d(addBarButtonItem.GetClickedObservable().InvokeCommand(ViewModel.GoToNewIssueCommand)); d(_viewSegment.GetChangedObservable().Subscribe(x => ViewModel.FilterSelection = (IssuesViewModel.IssueFilterSelection)x)); d(this.WhenAnyValue(x => x.ViewModel.FilterSelection) .Select(x => x == IssuesViewModel.IssueFilterSelection.Custom) .Subscribe(x => { filterBarButtonItem.Image = x ? Images.FilterFilled : Images.Filter; if (x) { _viewSegment.SelectedSegment = -1; } })); }); NavigationItem.TitleView = _viewSegment; TableView.Source = new IssueTableViewSource(TableView, ViewModel.Items); }
protected BaseWebViewController(bool navigationToolbar, bool showPageAsTitle = false) { NavigationItem.BackBarButtonItem = new UIBarButtonItem { Title = "" }; _navigationToolbar = navigationToolbar; _showPageAsTitle = showPageAsTitle; if (_navigationToolbar) { BackButton = new UIBarButtonItem { Image = Images.Web.BackButton, Enabled = false }; ForwardButton = new UIBarButtonItem { Image = Images.Web.FowardButton, Enabled = false }; RefreshButton = new UIBarButtonItem(UIBarButtonSystemItem.Refresh) { Enabled = false }; BackButton.TintColor = Theme.CurrentTheme.WebButtonTint; ForwardButton.TintColor = Theme.CurrentTheme.WebButtonTint; RefreshButton.TintColor = Theme.CurrentTheme.WebButtonTint; OnActivation(d => { d(BackButton.GetClickedObservable().Subscribe(_ => GoBack())); d(ForwardButton.GetClickedObservable().Subscribe(_ => GoForward())); d(RefreshButton.GetClickedObservable().Subscribe(_ => Refresh())); }); } EdgesForExtendedLayout = UIRectEdge.None; }
public NewCommentViewController(Func <string, Task> saveAction) { ViewModel = new NewCommentViewModel(saveAction); Title = "New Comment"; EdgesForExtendedLayout = UIRectEdge.None; var discardButton = new UIBarButtonItem { Image = Images.Buttons.Cancel }; var doneButton = new UIBarButtonItem(UIBarButtonSystemItem.Save); NavigationItem.RightBarButtonItem = doneButton; NavigationItem.LeftBarButtonItem = discardButton; _textView = new UITextView(); _textView.Font = UIFont.PreferredBody; _textView.AutoresizingMask = UIViewAutoresizing.FlexibleHeight | UIViewAutoresizing.FlexibleWidth; // Work around an Apple bug in the UITextView that crashes if (ObjCRuntime.Runtime.Arch == ObjCRuntime.Arch.SIMULATOR) { _textView.AutocorrectionType = UITextAutocorrectionType.No; } OnActivation(d => { discardButton .GetClickedObservable() .SelectUnit() .BindCommand(ViewModel.DiscardCommand) .AddTo(d); this.WhenAnyValue(x => x.ViewModel.DoneCommand.CanExecute) .Switch() .Subscribe(x => doneButton.Enabled = x) .AddTo(d); doneButton .GetClickedObservable() .Do(_ => _textView.ResignFirstResponder()) .SelectUnit() .BindCommand(ViewModel.DoneCommand) .AddTo(d); _textView .GetChangedObservable() .Subscribe(x => ViewModel.Text = x) .AddTo(d); this.WhenAnyValue(x => x.ViewModel.Text) .Subscribe(x => _textView.Text = x) .AddTo(d); this.WhenAnyObservable(x => x.ViewModel.DismissCommand) .Select(_ => Unit.Default) .Subscribe(_dismissSubject) .AddTo(d); }); }
private void PromptForCommitMessage() { var confirmButton = new UIBarButtonItem { Title = "Confirm" }; var cancelButton = new UIBarButtonItem { Image = Images.Cancel }; var viewController = new MessageComposerViewController(); viewController.Title = "Message"; viewController.TextView.Placeholder = "Merge Message (Optional)"; viewController.OnActivation(d => { d(ViewModel.WhenAnyValue(x => x.MergeComment).Subscribe(x => viewController.TextView.Text = x)); d(viewController.TextView.GetChangedObservable().Subscribe(x => ViewModel.MergeComment = x)); viewController.NavigationItem.RightBarButtonItem = confirmButton; d(ViewModel.MergeCommand.CanExecuteObservable.Subscribe(x => confirmButton.Enabled = x)); d(confirmButton.GetClickedObservable().InvokeCommand(ViewModel.MergeCommand)); d(ViewModel.MergeCommand.Subscribe(_ => viewController.DismissViewController(true, null))); d(Disposable.Create(() => viewController.NavigationItem.RightBarButtonItem = null)); viewController.NavigationItem.LeftBarButtonItem = cancelButton; d(cancelButton.GetClickedObservable().Subscribe(_ => viewController.DismissViewController(true, null))); d(Disposable.Create(() => viewController.NavigationItem.LeftBarButtonItem = null)); }); PresentViewController(new ThemedNavigationController(viewController), true, null); }
public override void ViewDidLoad() { base.ViewDidLoad(); var descriptionElement = new ExpandingInputElement("Description"); descriptionElement.AccessoryView = x => new MarkdownAccessoryView(x); var titleElement = new DummyInputElement("Title"); var saveButton = new UIBarButtonItem(UIBarButtonSystemItem.Save); var cancelButton = new UIBarButtonItem(UIBarButtonSystemItem.Cancel); NavigationItem.LeftBarButtonItem = cancelButton; NavigationItem.RightBarButtonItem = saveButton; var source = new DialogTableViewSource(TableView); source.Root.Add(new Section { titleElement, descriptionElement }); TableView.Source = source; TableView.TableFooterView = new UIView(); OnActivation(d => { d(descriptionElement.Changed .Subscribe(x => ViewModel.Description = x)); d(this.WhenAnyValue(x => x.ViewModel.Title) .Subscribe(title => Title = title)); d(this.WhenAnyValue(x => x.ViewModel.Subject) .Subscribe(x => titleElement.Value = x)); d(this.WhenAnyValue(x => x.ViewModel.Description) .Subscribe(x => descriptionElement.Value = x)); d(titleElement.Changed.Subscribe(x => ViewModel.Subject = x)); d(cancelButton.GetClickedObservable() .Select(_ => Unit.Default) .InvokeReactiveCommand(ViewModel.DismissCommand)); d(this.WhenAnyObservable(x => x.ViewModel.DismissCommand) .Where(x => x) .Subscribe(_ => DismissViewController(true, null))); d(saveButton.GetClickedObservable() .Do(x => ResignFirstResponder()) .InvokeReactiveCommand(ViewModel.SubmitCommand)); d(ViewModel.SubmitCommand .Subscribe(_ => DismissViewController(true, null))); d(this.WhenAnyObservable(x => x.ViewModel.SubmitCommand.CanExecute) .Subscribe(x => saveButton.Enabled = x)); d(this.WhenAnyObservable(x => x.ViewModel.SubmitCommand.IsExecuting) .SubscribeStatus("Submitting feedback")); }); }
public LiteComposer() : base(null, null) { Title = "New Comment"; EdgesForExtendedLayout = UIRectEdge.None; _textView = new UITextView() { Font = UIFont.PreferredBody }; var close = new UIBarButtonItem { Image = Images.Buttons.BackButton }; NavigationItem.LeftBarButtonItem = close; _sendButton = new UIBarButtonItem { Image = Images.Buttons.SaveButton }; NavigationItem.RightBarButtonItem = _sendButton; OnActivation(d => { d(close.GetClickedObservable().Subscribe(_ => CloseComposer())); d(_sendButton.GetClickedObservable().Subscribe(_ => PostCallback())); }); }
public override void ViewDidLoad() { base.ViewDidLoad(); TableView.RowHeight = UITableView.AutomaticDimension; TableView.EstimatedRowHeight = 44f; var cancelButton = new UIBarButtonItem { Image = Images.Buttons.CancelButton }; var saveButton = new UIBarButtonItem { Image = Images.Buttons.SaveButton }; NavigationItem.LeftBarButtonItem = cancelButton; NavigationItem.RightBarButtonItem = saveButton; OnActivation(d => { d(cancelButton.GetClickedObservable().Subscribe(_ => Discard())); d(saveButton.GetClickedObservable().Subscribe(_ => Save())); d(_descriptionElement.Clicked.Subscribe(_ => ChangeDescription())); d(_addFileElement.Clicked.Subscribe(_ => AddFile())); }); }
public override void ViewDidLoad() { base.ViewDidLoad(); var actionButton = new UIBarButtonItem(UIBarButtonSystemItem.Action); NavigationItem.RightBarButtonItem = actionButton; this.WhenAnyValue(x => x.ContentText) .Select(x => new DescriptionModel(x, (int)UIFont.PreferredSubheadline.PointSize)) .Select(x => new MarkdownView { Model = x }.GenerateString()) .Subscribe(LoadContent); OnActivation(disposable => { actionButton .GetClickedObservable() .SelectUnit() .BindCommand(this, x => x.ViewModel.ShowMenuCommand) .AddTo(disposable); this.WhenAnyValue(x => x.ViewModel.ContentText) .Subscribe(x => ContentText = x) .AddTo(disposable); }); }
public PullRequestApproveViewController(string username, string repository, int pullRequestId, IApplicationService applicationService = null) : base(UITableViewStyle.Plain) { _root = new Lazy <RootElement>(() => new RootElement(TableView)); applicationService = applicationService ?? Locator.Current.GetService <IApplicationService>(); Title = "Approve"; MergeCommand = ReactiveCommand.CreateFromTask(t => { return(applicationService.Client.PullRequests.Merge( username, repository, pullRequestId, Message, DeleteSourceBranch)); }); MergeCommand.IsExecuting.SubscribeStatus("Merging..."); var merge = new UIBarButtonItem(UIBarButtonSystemItem.Done); NavigationItem.RightBarButtonItem = merge; OnActivation(d => { this.WhenAnyObservable(x => x.MergeCommand.CanExecute) .Subscribe(x => merge.Enabled = x) .AddTo(d); merge.GetClickedObservable() .SelectUnit() .BindCommand(this, x => x.MergeCommand) .AddTo(d); }); }
public WebBrowserViewController(bool navigationToolbar, bool showPageAsTitle = false) { NavigationItem.BackBarButtonItem = new UIBarButtonItem { Title = "" }; NavigationItem.LeftBarButtonItem = _closeButton; _web = new UIWebView { ScalesPageToFit = true }; _web.ShouldStartLoad = (w, r, n) => true; _web.LoadStarted += (sender, e) => { NetworkActivityService.Instance.PushNetworkActive(); _refreshButton.Enabled = false; }; _web.LoadError += (sender, e) => { _refreshButton.Enabled = true; }; _web.LoadFinished += (sender, e) => { NetworkActivityService.Instance.PopNetworkActive(); _backButton.Enabled = _web.CanGoBack; _forwardButton.Enabled = _web.CanGoForward; _refreshButton.Enabled = true; if (showPageAsTitle) { Title = _web.EvaluateJavascript("document.title"); } }; if (navigationToolbar) { ToolbarItems = new [] { _backButton, new UIBarButtonItem(UIBarButtonSystemItem.FixedSpace) { Width = 40f }, _forwardButton, new UIBarButtonItem(UIBarButtonSystemItem.FlexibleSpace), _refreshButton }; } EdgesForExtendedLayout = UIRectEdge.None; this.WhenAnyValue(x => x.ViewModel.Uri) .SubscribeSafe(x => _web.LoadRequest(new NSUrlRequest(new NSUrl(x.AbsoluteUri)))); OnActivation(d => { d(_backButton.GetClickedObservable().Subscribe(_ => _web.GoBack())); d(_forwardButton.GetClickedObservable().Subscribe(_ => _web.GoForward())); d(_refreshButton.GetClickedObservable().Subscribe(_ => _web.Reload())); d(_closeButton.GetClickedObservable().Subscribe(_ => DismissViewController(true, null))); }); }
public AccountsViewController() : base(UITableViewStyle.Plain) { Title = "Accounts"; var addButton = new UIBarButtonItem(UIBarButtonSystemItem.Add); NavigationItem.RightBarButtonItem = addButton; OnActivation(d => d(addButton.GetClickedObservable().Subscribe(_ => AddAccount()))); }
public AccountsViewController() : base(UITableViewStyle.Plain) { Title = "Accounts"; var addButton = new UIBarButtonItem(UIBarButtonSystemItem.Add); NavigationItem.RightBarButtonItem = addButton; OnActivation(d => d(addButton.GetClickedObservable().Subscribe(_ => AddAccount()))); }
public ReadmeViewController( string owner, string repository, Octokit.Readme readme = null, IApplicationService applicationService = null, IMarkdownService markdownService = null) : base(false, false) { _owner = owner; _repository = repository; _applicationService = applicationService ?? Locator.Current.GetService <IApplicationService>(); _markdownService = markdownService ?? Locator.Current.GetService <IMarkdownService>(); Title = "Readme"; var loadCommand = ReactiveCommand.CreateFromTask(() => { if (readme != null) { return(Task.FromResult(readme)); } return(_applicationService.GitHubClient.Repository.Content.GetReadme(owner, repository)); }); loadCommand .ThrownExceptions .Do(_ => SetErrorView()) .Select(error => new UserError(LoadErrorMessage, error)) .SelectMany(Interactions.Errors.Handle) .Subscribe(); loadCommand .ToProperty(this, x => x.Readme, out _readme); Appearing .Take(1) .Select(_ => Unit.Default) .InvokeReactiveCommand(loadCommand); this.WhenAnyValue(x => x.Readme) .Where(x => x != null) .SelectMany(ConvertToWebView) .Subscribe(LoadContent); this.WhenAnyValue(x => x.Readme) .Select(x => x != null) .Subscribe(x => _actionButton.Enabled = x); NavigationItem.RightBarButtonItem = _actionButton; this.WhenActivated(d => { d(_actionButton.GetClickedObservable() .Subscribe(ShareButtonPress)); }); }
public override void ViewDidLoad() { base.ViewDidLoad(); TableView.RowHeight = UITableView.AutomaticDimension; TableView.EstimatedRowHeight = 44f; var vm = (IssueAddViewModel)ViewModel; var saveButton = new UIBarButtonItem { Image = Images.Buttons.SaveButton }; NavigationItem.RightBarButtonItem = saveButton; var title = new EntryElement("Title", string.Empty, string.Empty); var assignedTo = new StringElement("Responsible", "Unassigned", UITableViewCellStyle.Value1); var milestone = new StringElement("Milestone", "None", UITableViewCellStyle.Value1); var labels = new StringElement("Labels", "None", UITableViewCellStyle.Value1); var content = new MultilinedElement("Description"); Root.Reset(new Section { title, assignedTo, milestone, labels }, new Section { content }); OnActivation(d => { d(vm.Bind(x => x.IssueTitle, true).Subscribe(x => title.Value = x)); d(title.Changed.Subscribe(x => vm.IssueTitle = x)); d(vm.Bind(x => x.Content, true).Subscribe(x => content.Details = x)); d(labels.Clicked.Subscribe(_ => vm.GoToLabelsCommand.Execute(null))); d(milestone.Clicked.Subscribe(_ => vm.GoToMilestonesCommand.Execute(null))); d(assignedTo.Clicked.Subscribe(_ => vm.GoToAssigneeCommand.Execute(null))); d(vm.Bind(x => x.IsSaving).SubscribeStatus("Saving...")); d(vm.Bind(x => x.AssignedTo, true).Subscribe(x => { assignedTo.Value = x == null ? "Unassigned" : x.Login; })); d(vm.Bind(x => x.Milestone, true).Subscribe(x => { milestone.Value = x == null ? "None" : x.Title; })); d(vm.BindCollection(x => x.Labels, true).Subscribe(_ => { labels.Value = vm.Labels.Items.Count == 0 ? "None" : string.Join(", ", vm.Labels.Items.Select(i => i.Name)); })); d(saveButton.GetClickedObservable().Subscribe(_ => { View.EndEditing(true); vm.SaveCommand.Execute(null); })); d(content.Clicked.Subscribe(_ => { var composer = new MarkdownComposerViewController { Title = "Issue Description", Text = content.Details }; composer.NewComment(this, (text) => { vm.Content = text; composer.CloseComposer(); }); })); }); }
public override void ViewDidLoad() { base.ViewDidLoad(); var button = new UIBarButtonItem(UIBarButtonSystemItem.Add); if (ViewModel.IsMine) NavigationItem.RightBarButtonItem = button; OnActivation(d => d(button.GetClickedObservable().Subscribe(_ => GoToCreateGist()))); }
public GistFileViewController( string gistId, string filename, Octokit.Gist gist = null, IApplicationService applicationService = null, IAlertDialogService alertDialogService = null, IMessageService messageService = null) : base(false) { _gistId = gistId; _filename = filename; _gist = gist; _applicationService = applicationService ?? Locator.Current.GetService <IApplicationService>(); _alertDialogService = alertDialogService ?? Locator.Current.GetService <IAlertDialogService>(); messageService = messageService ?? Locator.Current.GetService <IMessageService>(); Title = System.IO.Path.GetFileName(filename); var actionButton = new UIBarButtonItem(UIBarButtonSystemItem.Action) { Enabled = false }; NavigationItem.RightBarButtonItem = actionButton; var loadCommand = ReactiveCommand.CreateFromTask(Load); loadCommand .ThrownExceptions .Select(HandleLoadError) .SelectMany(Interactions.Errors.Handle) .Subscribe(); this.OnActivation(d => { d(this.WhenAnyValue(x => x.Gist) .Select(x => x != null) .Subscribe(x => actionButton.Enabled = x)); d(actionButton .GetClickedObservable() .Subscribe(CreateActionSheet)); d(loadCommand .IsExecuting .Subscribe(x => actionButton.Enabled = !x)); }); Appearing .Take(1) .Select(_ => Unit.Default) .InvokeReactiveCommand(loadCommand); }
public override void ViewDidLoad() { base.ViewDidLoad(); var button = new UIBarButtonItem(UIBarButtonSystemItem.Add); if (ViewModel.IsMine) { NavigationItem.RightBarButtonItem = button; } OnActivation(d => d(button.GetClickedObservable().Subscribe(_ => GoToCreateGist()))); }
public static UIViewController PresentUpgradeViewController(this UIViewController @this) { var vc = new UpgradeViewController(); var nav = new ThemedNavigationController(vc); var navObj = new UIBarButtonItem { Image = Images.Buttons.Cancel }; vc.OnActivation(disposble => navObj.GetClickedObservable().Subscribe(_ => @this.DismissViewController(true, null)).AddTo(disposble)); vc.NavigationItem.LeftBarButtonItem = navObj; @this.PresentViewController(nav, true, null); return(vc); }
public WikiViewController() { var actionButton = new UIBarButtonItem(UIBarButtonSystemItem.Action); NavigationItem.RightBarButtonItem = actionButton; OnActivation(disposable => { actionButton .GetClickedObservable() .SelectUnit() .BindCommand(this, x => x.ViewModel.ShowMenuCommand) .AddTo(disposable); }); }
public static void Show(UIViewController parent, IssueLabelsViewModel viewModel) { var viewController = new IssueLabelsViewController { Title = "Labels", ViewModel = viewModel }; var backButton = new UIBarButtonItem { Image = Images.BackButton }; viewController.NavigationItem.LeftBarButtonItem = backButton; viewController.WhenActivated(d => d(backButton.GetClickedObservable().Subscribe(_ => { viewController.ViewModel.SaveCommand.ExecuteIfCan(); viewController.NavigationController.PopToViewController(parent, true); }))); parent.NavigationController.PushViewController(viewController, true); }
public NotificationsViewController() { EmptyView = new Lazy <UIView>(() => new EmptyListView(Octicon.Inbox.ToEmptyListImage(), "No new notifications.")); _markButton = new UIBarButtonItem(); _markToolbar = new [] { new UIBarButtonItem(UIBarButtonSystemItem.FlexibleSpace), _markButton, new UIBarButtonItem(UIBarButtonSystemItem.FlexibleSpace) }; _editButton = new UIBarButtonItem(UIBarButtonSystemItem.Edit); _cancelButton = new UIBarButtonItem(UIBarButtonSystemItem.Cancel); if (UIDevice.CurrentDevice.UserInterfaceIdiom == UIUserInterfaceIdiom.Pad) { NavigationItem.TitleView = _viewSegment; _segmentToolbar = new [] { new UIBarButtonItem(UIBarButtonSystemItem.FlexibleSpace) }; } else { _segmentToolbar = new [] { new UIBarButtonItem(UIBarButtonSystemItem.FlexibleSpace), new UIBarButtonItem(_viewSegment), new UIBarButtonItem(UIBarButtonSystemItem.FlexibleSpace) }; ToolbarItems = _segmentToolbar; } OnActivation(d => { d(_editButton.GetClickedObservable().Subscribe(_ => StartEditing())); d(_cancelButton.GetClickedObservable().Subscribe(_ => StopEditing())); d(_markButton.GetClickedObservable().InvokeCommand(ViewModel.ReadSelectedCommand)); d(_viewSegment.GetChangedObservable().Subscribe(x => ViewModel.ActiveFilter = x)); d(this.WhenAnyValue(x => x.ViewModel.ShowEditButton) .Subscribe(x => NavigationItem.SetRightBarButtonItem(x ? _editButton : null, true))); d(this.WhenAnyValue(x => x.ViewModel.ActiveFilter) .Subscribe(x => _viewSegment.SelectedSegment = x)); d(this.WhenAnyValue(x => x.ViewModel.IsAnyItemsSelected) .Subscribe(x => _markButton.Title = x ? "Mark Selected as Read" : "Mark All as Read")); d(this.WhenAnyObservable(x => x.ViewModel.Notifications.ItemChanged) .Select(_ => ViewModel.Notifications.Count) .Subscribe(x => { _editButton.Enabled = x > 0; if (x == 0 && TableView.Editing) { StopEditing(); } })); }); }
public override void ViewDidLoad() { Title = "Notifications"; base.ViewDidLoad(); _segmentBarButton.Width = View.Frame.Width - 10f; ToolbarItems = new [] { new UIBarButtonItem(UIBarButtonSystemItem.FlexibleSpace), _segmentBarButton, new UIBarButtonItem(UIBarButtonSystemItem.FlexibleSpace) }; var checkButton = new UIBarButtonItem { Image = Images.Buttons.CheckButton }; NavigationItem.RightBarButtonItem = checkButton; var vm = (NotificationsViewModel)ViewModel; var weakVm = new WeakReference<NotificationsViewModel>(vm); BindCollection(vm.Notifications, x => { var el = new StringElement(x.Subject.Title, x.UpdatedAt.Humanize(), UITableViewCellStyle.Subtitle) { Accessory = UITableViewCellAccessory.DisclosureIndicator }; var subject = x.Subject.Type.ToLower(); if (subject.Equals("issue")) el.Image = Octicon.IssueOpened.ToImage(); else if (subject.Equals("pullrequest")) el.Image = Octicon.GitPullRequest.ToImage(); else if (subject.Equals("commit")) el.Image = Octicon.GitCommit.ToImage(); else if (subject.Equals("release")) el.Image = Octicon.Tag.ToImage(); else el.Image = Octicon.Alert.ToImage(); el.Clicked.Subscribe(MakeCallback(weakVm, x)); return el; }); var o = Observable.FromEventPattern(t => vm.ReadAllCommand.CanExecuteChanged += t, t => vm.ReadAllCommand.CanExecuteChanged -= t); OnActivation(d => { d(checkButton.GetClickedObservable().BindCommand(vm.ReadAllCommand)); d(vm.Bind(x => x.IsMarking).SubscribeStatus("Marking...")); d(vm.Bind(x => x.ShownIndex, true).Subscribe(x => _viewSegment.SelectedSegment = (nint)x)); d(_viewSegment.GetChangedObservable().Subscribe(x => vm.ShownIndex = x)); d(o.Subscribe(_ => NavigationItem.RightBarButtonItem.Enabled = vm.ReadAllCommand.CanExecute(null))); }); }
public static void PresentModal(this UIViewController presenter, UIViewController presentee) { if (presentee is WebBrowserViewController) { presenter.PresentViewController(presentee, true, null); } else { var cancelButton = new UIBarButtonItem { Image = Images.Buttons.Cancel }; cancelButton.GetClickedObservable().Subscribe(_ => presenter.DismissViewController(true, null)); presentee.NavigationItem.LeftBarButtonItem = cancelButton; var nav = new ThemedNavigationController(presentee); presenter.PresentViewController(nav, true, null); } }
public AddSourceViewController( string username, string repository, string path, string branch, IApplicationService applicationService = null) : base(UITableViewStyle.Plain) { _username = username; _repository = repository; _path = path; _branch = branch; _applicationService = applicationService ?? Locator.Current.GetService <IApplicationService>(); _titleElement = new DummyInputElement("Name") { SpellChecking = false }; _descriptionElement = new ExpandingInputElement("Content") { SpellChecking = false, Font = UIFont.FromName("Courier", UIFont.PreferredBody.PointSize) }; EdgesForExtendedLayout = UIRectEdge.None; Title = "Add File"; var commitButton = new UIBarButtonItem { Title = "Commit" }; NavigationItem.RightBarButtonItem = commitButton; this.OnActivation(d => { d(commitButton .GetClickedObservable() .Subscribe(_ => Commit())); d(_titleElement .Changed .Select(x => x.Length != 0) .Subscribe(x => commitButton.Enabled = x)); }); }
public override void ViewDidLoad() { base.ViewDidLoad(); var titleElement = new DummyInputElement("Title") { SpellChecking = false }; var contentElement = new ExpandingInputElement("Content"); Root.Add(new Section { titleElement, contentElement }); TableView.TableFooterView = new UIView(); var saveButton = new UIBarButtonItem { Image = Images.Buttons.SaveButton }; NavigationItem.RightBarButtonItem = saveButton; OnActivation(d => { d(this.Bind(x => x.Filename, true).Subscribe(x => { Title = string.IsNullOrEmpty(x) ? "Gist File" : x; titleElement.Value = x; })); d(titleElement.Changed.Subscribe(x => Filename = x)); d(this.Bind(x => x.Content, true).Subscribe(x => contentElement.Value = x)); d(contentElement.Changed.Subscribe(x => Content = x)); d(SaveCommand.Subscribe(_ => ResignFirstResponder())); d(saveButton.GetClickedObservable() .Select(_ => Unit.Default) .InvokeCommand(SaveCommand)); d(SaveCommand.IsExecuting .Subscribe(x => saveButton.Enabled = !x)); }); }
public override void ViewDidLoad() { var addButton = new UIBarButtonItem(UIBarButtonSystemItem.Add); NavigationItem.RightBarButtonItem = addButton; base.ViewDidLoad(); _viewSegment = new CustomUISegmentedControl(new [] { "Open", "Closed", "Mine", "Custom" }, 3); _segmentBarButton = new UIBarButtonItem(_viewSegment); _segmentBarButton.Width = View.Frame.Width - 10f; ToolbarItems = new [] { new UIBarButtonItem(UIBarButtonSystemItem.FlexibleSpace), _segmentBarButton, new UIBarButtonItem(UIBarButtonSystemItem.FlexibleSpace) }; BindCollection(ViewModel.Issues, CreateElement); OnActivation(d => { d(addButton.GetClickedObservable().BindCommand(ViewModel.GoToNewIssueCommand)); }); }
public SourceViewController() { NavigationItem.RightBarButtonItem = _actionButton; OnActivation(disposable => { _actionButton .GetClickedObservable() .Select(x => (object)x) .BindCommand(ViewModel.ShowMenuCommand) .AddTo(disposable); this.WhenAnyValue(x => x.ViewModel.FilePath) .Where(x => x != null) .Subscribe(Load) .AddTo(disposable); }); }
public override void ViewDidLoad() { var addButton = new UIBarButtonItem(UIBarButtonSystemItem.Add); NavigationItem.RightBarButtonItem = addButton; base.ViewDidLoad(); _viewSegment = new CustomUISegmentedControl(new [] { "Open", "Closed", "Mine", "Custom" }, 3); _segmentBarButton = new UIBarButtonItem(_viewSegment); _segmentBarButton.Width = View.Frame.Width - 10f; ToolbarItems = new [] { new UIBarButtonItem(UIBarButtonSystemItem.FlexibleSpace), _segmentBarButton, new UIBarButtonItem(UIBarButtonSystemItem.FlexibleSpace) }; BindCollection(ViewModel.Issues, CreateElement); OnActivation(d => { d(addButton.GetClickedObservable().BindCommand(ViewModel.GoToNewIssueCommand)); }); }
public override void ViewDidLoad() { base.ViewDidLoad(); TableView.Source = new AccountTableViewSource(TableView, ViewModel.Items); var add = NavigationItem.RightBarButtonItem = new UIBarButtonItem(UIBarButtonSystemItem.Add); var cancel = new UIBarButtonItem { Image = Images.Buttons.Cancel }; if (_backButton) { NavigationItem.LeftBarButtonItem = cancel; } OnActivation(disposable => { add.GetClickedObservable() .SelectUnit() .BindCommand(ViewModel.AddAccountCommand) .AddTo(disposable); cancel.GetClickedObservable() .SelectUnit() .BindCommand(ViewModel.DismissCommand) .AddTo(disposable); ViewModel.AddAccountCommand .Subscribe(_ => NavigationController.PushViewController(new LoginViewController(), true)) .AddTo(disposable); ViewModel.DismissCommand .Subscribe(_ => DismissViewController(true, null)) .AddTo(disposable); ViewModel.DismissCommand.CanExecute .Subscribe(x => cancel.Enabled = x) .AddTo(disposable); }); }
public override void ViewDidLoad() { base.ViewDidLoad(); var descriptionElement = new ExpandingInputElement("Description"); descriptionElement.AccessoryView = x => new MarkdownAccessoryView(x); var titleElement = new DummyInputElement("Title"); var saveButton = new UIBarButtonItem(UIBarButtonSystemItem.Save); var cancelButton = new UIBarButtonItem { Image = Images.Cancel }; NavigationItem.LeftBarButtonItem = cancelButton; NavigationItem.RightBarButtonItem = saveButton; var source = new DialogTableViewSource(TableView); source.Root.Add(new Section { titleElement, descriptionElement }); TableView.Source = source; TableView.TableFooterView = new UIView(); OnActivation(d => { d(descriptionElement.Changed.Subscribe(x => ViewModel.Description = x)); d(this.WhenAnyValue(x => x.ViewModel.Subject).Subscribe(x => titleElement.Value = x)); d(this.WhenAnyValue(x => x.ViewModel.Description).Subscribe(x => descriptionElement.Value = x)); d(titleElement.Changed.Subscribe(x => ViewModel.Subject = x)); d(this.WhenAnyValue(x => x.ViewModel.DismissCommand) .ToBarButtonItem(Images.Cancel, x => NavigationItem.LeftBarButtonItem = x)); d(saveButton.GetClickedObservable() .Do <Unit>(x => ResignFirstResponder()) .InvokeCommand(ViewModel.SubmitCommand)); d(this.WhenAnyObservable(x => x.ViewModel.SubmitCommand.CanExecuteObservable) .Subscribe(x => saveButton.Enabled = x)); }); }
public void PresentAsModal(UIViewController parent, Action <string> onSave, Action onClose = null) { onClose = onClose ?? new Action(() => parent.DismissViewController(true, null)); var closeButton = new UIBarButtonItem(UIBarButtonSystemItem.Cancel); NavigationItem.LeftBarButtonItem = closeButton; OnActivation(d => { d(closeButton.GetClickedObservable() .Subscribe(_ => onClose?.Invoke())); d(SendItem.GetClickedObservable() .Subscribe(_ => onSave?.Invoke(this.Text))); }); var navigationController = new UINavigationController(this); parent.PresentViewController(navigationController, true, null); }
public LiteComposer() : base(null, null) { Title = "New Comment"; EdgesForExtendedLayout = UIRectEdge.None; _textView = new UITextView() { Font = UIFont.PreferredBody }; var close = new UIBarButtonItem { Image = Images.Buttons.BackButton }; NavigationItem.LeftBarButtonItem = close; _sendButton = new UIBarButtonItem { Image = Images.Buttons.SaveButton }; NavigationItem.RightBarButtonItem = _sendButton; OnActivation(d => { d(close.GetClickedObservable().Subscribe(_ => CloseComposer())); d(_sendButton.GetClickedObservable().Subscribe(_ => PostCallback())); }); }
protected BaseWebViewController(bool navigationToolbar, bool showPageAsTitle = false) { NavigationItem.BackBarButtonItem = new UIBarButtonItem { Title = "" }; _navigationToolbar = navigationToolbar; _showPageAsTitle = showPageAsTitle; if (_navigationToolbar) { BackButton = new UIBarButtonItem { Image = Images.Web.BackButton, Enabled = false }; ForwardButton = new UIBarButtonItem { Image = Images.Web.FowardButton, Enabled = false }; RefreshButton = new UIBarButtonItem(UIBarButtonSystemItem.Refresh) { Enabled = false }; BackButton.TintColor = Theme.CurrentTheme.WebButtonTint; ForwardButton.TintColor = Theme.CurrentTheme.WebButtonTint; RefreshButton.TintColor = Theme.CurrentTheme.WebButtonTint; OnActivation(d => { d(BackButton.GetClickedObservable().Subscribe(_ => GoBack())); d(ForwardButton.GetClickedObservable().Subscribe(_ => GoForward())); d(RefreshButton.GetClickedObservable().Subscribe(_ => Refresh())); }); } EdgesForExtendedLayout = UIRectEdge.None; }
public FileSourceViewController( string username, string repository, string path, string sha, ShaType shaType, bool forceBinary = false, IApplicationService applicationService = null, IAlertDialogService alertDialogService = null, IMessageService messageService = null) : base(false) { _username = username; _repository = repository; _path = path; _sha = sha; _shaType = shaType; _forceBinary = forceBinary; _applicationService = applicationService ?? Locator.Current.GetService <IApplicationService>(); _alertDialogService = alertDialogService ?? Locator.Current.GetService <IAlertDialogService>(); messageService = messageService ?? Locator.Current.GetService <IMessageService>(); Title = System.IO.Path.GetFileName(path); var extension = System.IO.Path.GetExtension(path); _isMarkdown = MarkdownExtensions.Contains(extension); var actionButton = new UIBarButtonItem(UIBarButtonSystemItem.Action) { Enabled = false }; NavigationItem.RightBarButtonItem = actionButton; var loadCommand = ReactiveCommand.CreateFromTask(Load); loadCommand .ThrownExceptions .Select(HandleLoadError) .SelectMany(Interactions.Errors.Handle) .Subscribe(); this.OnActivation(d => { d(this.WhenAnyValue(x => x.Content) .Select(x => x != null) .Subscribe(x => actionButton.Enabled = x)); d(actionButton .GetClickedObservable() .Subscribe(_ => CreateActionSheet(actionButton))); d(loadCommand .IsExecuting .Subscribe(x => actionButton.Enabled = !x)); }); Appearing .Take(1) .Select(_ => Unit.Default) .InvokeReactiveCommand(loadCommand); _messageBus = messageService.Listen <Core.Messages.SourceEditMessage>(_ => { Content = null; loadCommand.ExecuteNow(); }); }
public override void ViewDidLoad() { base.ViewDidLoad(); _splitButton1 = _split.AddButton("Comments", "-"); _splitButton2 = _split.AddButton("Participants", "-"); Title = "Issue #" + ViewModel.Id; HeaderView.SetImage(null, Images.Avatar); HeaderView.Text = Title; Appeared.Take(1) .Select(_ => Observable.Timer(TimeSpan.FromSeconds(0.2f))) .Switch() .ObserveOn(RxApp.MainThreadScheduler) .Select(_ => ViewModel.Bind(x => x.IsClosed, true).Where(x => x.HasValue).Select(x => x.Value)) .Switch() .Subscribe(x => { HeaderView.SubImageView.TintColor = x ? UIColor.FromRGB(0xbd, 0x2c, 0) : UIColor.FromRGB(0x6c, 0xc6, 0x44); HeaderView.SetSubImage((x ? Octicon.IssueClosed :Octicon.IssueOpened).ToImage()); }); _milestoneElement = new StringElement("Milestone", "No Milestone", UITableViewCellStyle.Value1) {Image = Octicon.Milestone.ToImage() }; _assigneeElement = new StringElement("Assigned", "Unassigned", UITableViewCellStyle.Value1) {Image = Octicon.Person.ToImage() }; _labelsElement = new StringElement("Labels", "None", UITableViewCellStyle.Value1) {Image = Octicon.Tag.ToImage() }; _addCommentElement = new StringElement("Add Comment") { Image = Octicon.Pencil.ToImage() }; var actionButton = new UIBarButtonItem(UIBarButtonSystemItem.Action) { Enabled = false }; NavigationItem.RightBarButtonItem = actionButton; ViewModel.Bind(x => x.IsModifying).SubscribeStatus("Loading..."); ViewModel.Bind(x => x.Issue).Subscribe(x => { _assigneeElement.Value = x.Assignee != null ? x.Assignee.Login : "******"; _milestoneElement.Value = x.Milestone != null ? x.Milestone.Title : "No Milestone"; _labelsElement.Value = x.Labels.Count == 0 ? "None" : string.Join(", ", x.Labels.Select(i => i.Name)); var model = new DescriptionModel(ViewModel.MarkdownDescription, (int)UIFont.PreferredSubheadline.PointSize, true); var markdown = new MarkdownView { Model = model }; var html = markdown.GenerateString(); _descriptionElement.SetValue(string.IsNullOrEmpty(ViewModel.MarkdownDescription) ? null : html); HeaderView.Text = x.Title; HeaderView.SubText = "Updated " + x.UpdatedAt.Humanize(); HeaderView.SetImage(x.User?.AvatarUrl, Images.Avatar); RefreshHeaderView(); Render(); }); ViewModel.BindCollection(x => x.Comments).Subscribe(_ => RenderComments()); ViewModel.BindCollection(x => x.Events).Subscribe(_ => RenderComments()); ViewModel.Bind(x => x.ShouldShowPro).Subscribe(x => { if (x) this.ShowPrivateView(); }); OnActivation(d => { d(_milestoneElement.Clicked.BindCommand(ViewModel.GoToMilestoneCommand)); d(_assigneeElement.Clicked.BindCommand(ViewModel.GoToAssigneeCommand)); d(_labelsElement.Clicked.BindCommand(ViewModel.GoToLabelsCommand)); d(_addCommentElement.Clicked.Subscribe(_ => AddCommentTapped())); d(_descriptionElement.UrlRequested.BindCommand(ViewModel.GoToUrlCommand)); d(_commentsElement.UrlRequested.BindCommand(ViewModel.GoToUrlCommand)); d(actionButton.GetClickedObservable().Subscribe(ShowExtraMenu)); d(HeaderView.Clicked.BindCommand(ViewModel.GoToOwner)); d(ViewModel.Bind(x => x.IsCollaborator, true).Subscribe(x => { foreach (var i in new [] { _assigneeElement, _milestoneElement, _labelsElement }) i.Accessory = x ? UITableViewCellAccessory.DisclosureIndicator : UITableViewCellAccessory.None; })); d(ViewModel.Bind(x => x.IsLoading).Subscribe(x => actionButton.Enabled = !x)); }); }