Exemplo n.º 1
0
            public override NSView GetViewForItem(NSTableView tableView, NSTableColumn tableColumn, nint row)
            {
                var item = owner.messagesDataSource.Items[(int)row];

                if (tableColumn == owner.textColumn)
                {
                    var lbl = new NSLinkLabel();
                    lbl.StringValue = item.Text;
                    lbl.Links       = item.Links.Select(l => new NSLinkLabel.Link(l.Item1, l.Item2, l.Item3)).ToList();
                    lbl.LinkClicked = async(sender, e) =>
                    {
                        // await below is to "re-post" click handling to the end of UI messages queue.
                        // Without this workaround currently handled mouse click
                        // de-facto fails SelectLayoutTextRange() that is a part of this link's behavior.
                        // The failure is that templateTextBox fails to become first responder
                        // which in turn makes it impossible to change TextBox's SelectedRange.
                        await Task.Yield();

                        (e.Link.Tag as Action)?.Invoke();
                    };
                    return(lbl);
                }
                else if (tableColumn == owner.iconColumn)
                {
                    return(new NSImageView()
                    {
                        Image = owner.GetIcon(item.Icon),
                    });
                }
                return(null);
            }
            public override NSView GetViewForItem(NSTableView tableView, NSTableColumn tableColumn, nint row)
            {
                var item = owner.capturesDataSource.items[(int)row];
                var lbl  = NSLinkLabel.CreateLabel(item.Text);

                lbl.BackgroundColor = item.Color.ToNSColor();
                return(lbl);
            }
Exemplo n.º 3
0
        public static void SetAttributedContents(this NSLinkLabel lbl, string value)
        {
            var parsed = Presenters.LinkLabelUtils.ParseLinkLabelString(value);

            lbl.StringValue = parsed.Text;
            lbl.Links       = parsed.Links.Select(
                l => new NSLinkLabel.Link(l.Item1, l.Item2, l.Item3)).ToList();
        }
            public override NSView GetViewForItem(NSTableView tableView, NSTableColumn tableColumn, nint row)
            {
                var lnk = NSLinkLabel.CreateLabel(owner.patternsDataSource.Items[(int)row]);

                lnk.LinkClicked = (sender, e) =>
                {
                    if (e.NativeEvent.ClickCount == 2)
                    {
                        owner.eventsHandler.OnSelectedAvailablePatternDoubleClicked();
                    }
                };
                return(lnk);
            }
            public override NSView GetViewForItem(NSTableView tableView, NSTableColumn tableColumn, nint row)
            {
                var ret = NSLinkLabel.CreateLabel();

                ret.StringValue = owner.dataSource.items[(int)row];
                ret.LinkClicked = (sender, e) =>
                {
                    if (e.NativeEvent.ClickCount >= 2)
                    {
                        owner.eventsHandler.OnControlDblClicked();
                    }
                };
                return(ret);
            }
Exemplo n.º 6
0
        public static NSLinkLabel CreateLabel(string text = "")
        {
            var view = new NSLinkLabel
            {
                BackgroundColor = NSColor.Clear,
                LinksColor      = NSColor.ControlText,
                UnderlineLinks  = false,
                Cursor          = NSCursor.ArrowCursor,
                RespectInteriorBackgroundStyle = true,
                StringValue = text,
            };

            return(view);
        }
Exemplo n.º 7
0
            public override NSView GetViewForItem(NSTableView tableView, NSTableColumn tableColumn, nint row)
            {
                // todo: represent item.Data.IsEnabled

                var item = owner.dataSource.items[(int)row];

                if (tableColumn == owner.timeDeltaColumn)
                {
                    var view = (NSTextField )tableView.MakeView(timeDeltaCellId, this);
                    if (view == null)
                    {
                        view = new NSTextField()
                        {
                            Identifier      = timeDeltaCellId,
                            BackgroundColor = NSColor.Clear,
                            Bordered        = false,
                            Selectable      = false,
                            Editable        = false,
                        };
                        view.Cell.LineBreakMode = NSLineBreakMode.Clipping;
                    }

                    view.StringValue = item.Data.Delta;

                    return(view);
                }
                else if (tableColumn == owner.currentPositionIndicatorColumn)
                {
                    return(null);
                }
                else if (tableColumn == owner.textColumn)
                {
                    var view = (NSLinkLabel)tableView.MakeView(textCellId, this);
                    if (view == null)
                    {
                        view = new NSLinkLabel();
                    }

                    view.StringValue = item.Data.Text;
                    view.LinkClicked = (s, e) => owner.OnItemClicked(item, e.NativeEvent);
                    if (owner.viewModel.Theme == Presenters.ColorThemeMode.Dark && item.Data.ContextColor.HasValue)
                    {
                        view.LinksColor = item.Data.ContextColor.Value.ToNSColor();
                    }

                    return(view);
                }
                return(null);
            }
            public override NSView GetView(NSOutlineView outlineView, NSTableColumn tableColumn, NSObject item)
            {
                var presentationItem = (item as Item)?.PresentationObject;

                var view = NSLinkLabel.CreateLabel();

                view.LinkClicked = (sender, e) =>
                {
                    if (e.NativeEvent.ClickCount == 2)
                    {
                        owner.eventsHandler.OnEditClicked();
                    }
                };
                view.StringValue = presentationItem?.Caption ?? "";
                return(view);
            }
Exemplo n.º 9
0
        public static void SetAttributedContents(this NSLinkLabel lbl, string value)
        {
            var text  = new StringBuilder(value ?? "");
            var links = new List <NSLinkLabel.Link>();

            for (; ;)
            {
                var m = linkRe.Match(text.ToString());
                if (!m.Success)
                {
                    break;
                }
                var g = m.Groups[2];
                text.Remove(m.Index + m.Length - 1, 1);                 // remove trailing '*'
                text.Remove(m.Index, 2 + m.Groups[1].Length);           // remove leading '*', action id and space following action id
                links.Add(new NSLinkLabel.Link(g.Index - 2 - m.Groups[1].Length, g.Length, m.Groups[1].Value));
            }

            lbl.StringValue = text.ToString();
            lbl.Links       = links;
        }
Exemplo n.º 10
0
        NSView GetView(NSTableColumn tableColumn, IViewItem sourceItem)
        {
            if (tableColumn == sourceCheckedColumn)
            {
                if (sourceItem.Checked == null)
                {
                    return(null);
                }

                var cellIdentifier = "checked_cell";
                var view           = (NSButton)outlineView.MakeView(cellIdentifier, this);

                if (view == null)
                {
                    view            = new NSButton();
                    view.Identifier = cellIdentifier;
                    view.SetButtonType(NSButtonType.Switch);
                    view.BezelStyle    = 0;
                    view.ImagePosition = NSCellImagePosition.ImageOnly;
                    view.Action        = new ObjCRuntime.Selector("ItemChecked:");
                }

                view.Target = new CheckTarget {
                    item      = sourceItem,
                    viewModel = viewModel
                };
                view.State = sourceItem.Checked.GetValueOrDefault(false) ?
                             NSCellStateValue.On : NSCellStateValue.Off;
                return(view);
            }
            else if (tableColumn == sourceDescriptionColumn)
            {
                var cellIdentifier = "description_cell";
                var view           = (NSLinkLabel)outlineView.MakeView(cellIdentifier, this);

                if (view == null)
                {
                    view             = NSLinkLabel.CreateLabel();
                    view.Identifier  = cellIdentifier;
                    view.LinkClicked = (sender, e) => {
                        if (e.NativeEvent.ClickCount == 2)
                        {
                            viewModel.OnEnterKeyPressed();
                        }
                    };
                }

                view.BackgroundColor = sourceItem.Color.isFailureColor ? sourceItem.Color.value.ToNSColor() : NSColor.Clear;
                view.StringValue     = sourceItem.ToString();
                view.Menu            = outlineView.Menu;
                return(view);
            }
            else if (tableColumn == currentSourceColumn)
            {
                var cellIdentifier = "current_source_mark_cell";
                var view           = (NSCustomizableView)outlineView.MakeView(cellIdentifier, this);

                if (view == null)
                {
                    view            = new NSCustomizableView();
                    view.Identifier = cellIdentifier;
                }

                view.OnPaint = (ditryRect) => {
                    var focusedItem = viewModel.FocusedMessageItem;
                    if (focusedItem == null)
                    {
                        return;
                    }
                    if (!(focusedItem == sourceItem || focusedItem.Parent == sourceItem))
                    {
                        return;
                    }
                    using (var g = new LJD.Graphics()) {
                        var s = currentSourceImage.GetSize(height: 9);
                        var r = view.Bounds;
                        r = new CoreGraphics.CGRect((r.Left + r.Right - s.Width) / 2,
                                                    (r.Top + r.Bottom - s.Height) / 2, s.Width, s.Height);
                        g.DrawImage(currentSourceImage, r.ToRectangleF());
                    }
                };
                return(view);
            }


            return(null);
        }
Exemplo n.º 11
0
        public static IDialogView CreateDialog(
            NSWindow parentWindow,
            IChangeNotification changeNotification,
            IDialogViewModel viewModel,
            IEnumerable <string> tags,
            string initiallyFocusedTag
            )
        {
            var dlg = new TagsSelectionSheetController(parentWindow, viewModel);

            dlg.Window.GetHashCode();

            int focusedRow = -1;

            foreach (var t in tags)
            {
                var b = new NSButton()
                {
                    Title = t,
                    State = NSCellStateValue.Off
                };
                b.SetButtonType(NSButtonType.Switch);
                if (initiallyFocusedTag == t)
                {
                    focusedRow = dlg.views.Count;
                }
                b.Action = new ObjCRuntime.Selector("OnTagChecked:");
                b.Target = dlg;
                dlg.views.Add(b);
            }
            dlg.table.Delegate = new Delegate()
            {
                owner = dlg
            };
            dlg.table.DataSource = new DataSource()
            {
                owner = dlg
            };
            if (focusedRow >= 0)
            {
                dlg.table.SelectRow(focusedRow, byExtendingSelection: false);
                dlg.table.ScrollRowToVisible(focusedRow);
            }
            dlg.linkLabel.StringValue = "select: all   none";
            dlg.linkLabel.Links       = new [] {
                new NSLinkLabel.Link(8, 3, ""),
                new NSLinkLabel.Link(14, 4, null),
            };
            dlg.formulaTextView.Delegate = new TextViewDelegate()
            {
                view               = dlg.formulaTextView,
                viewModel          = viewModel,
                changeNotification = changeNotification
            };

            dlg.linkLabel.LinkClicked = (s, e) => {
                if (e.Link.Tag != null)
                {
                    viewModel.OnUseAllClicked();
                }
                else
                {
                    viewModel.OnUnuseAllClicked();
                }
            };

            var updateCheckboxes = Updaters.Create(
                () => viewModel.SelectedTags,
                () => viewModel.IsEditingFormula,
                (selected, editing) => {
                dlg.views.ForEach(b => {
                    b.State   = selected.Contains(b.Title) ? NSCellStateValue.On : NSCellStateValue.Off;
                    b.Enabled = !editing;
                });
            }
                );

            NSColor getLinkColor(MessageSeverity sev) =>
            sev == MessageSeverity.Error ? NSColor.Red :
            sev == MessageSeverity.Warning ? NSColor.Orange :
            NSColor.Text;

            var updateFormula = Updaters.Create(
                () => viewModel.Formula,
                () => viewModel.IsEditingFormula,
                () => viewModel.FormulaStatus,
                (formula, editing, status) => {
                if (dlg.formulaTextView.Value != formula)
                {
                    dlg.formulaTextView.Value = formula;
                }
                dlg.formulaTextView.Editable        = editing;
                dlg.formulaTextView.BackgroundColor = editing ? NSColor.TextBackground : NSColor.ControlBackground;
                dlg.formulaTextView.TextColor       = editing ? NSColor.Text : NSColor.PlaceholderTextColor;
                dlg.linkLabel.IsEnabled             = !editing;
                dlg.okButton.Enabled = !editing;
                dlg.formulaEditLinkLabel.StringValue = editing ? "done" : "edit";
                var(statusText, statusSeverity)      = status;
                dlg.formulaLinkLabel.SetAttributedContents(statusText);
                dlg.formulaEditLinkLabel.IsEnabled = statusSeverity != MessageSeverity.Error;
                dlg.formulaLinkLabel.TextColor     = getLinkColor(statusSeverity);
            }
                );

            var formulaFocusSideEffect = Updaters.Create(
                () => viewModel.IsEditingFormula,
                editing =>
            {
                if (editing)
                {
                    dlg.Window.MakeFirstResponder(dlg.formulaTextView);
                }
            }
                );

            var updateSuggestions = Updaters.Create(
                () => viewModel.FormulaSuggesions,
                value =>
            {
                var(list, selectedItem)         = value;
                dlg.suggestionsContainer.Hidden = list.IsEmpty;
                dlg.suggestionsLabel.Hidden     = list.IsEmpty;
                dlg.suggestionsView.Subviews.ToList().ForEach(v => v.RemoveFromSuperview());
                var itemHeight  = 17;
                nfloat maxRight = 0;
                var views       = list.Select((str, idx) =>
                {
                    var lbl             = NSLinkLabel.CreateLabel(str);
                    lbl.BackgroundColor = idx == selectedItem ? NSColor.SelectedTextBackground : NSColor.Clear;
                    lbl.TextColor       = idx == selectedItem ? NSColor.SelectedText : NSColor.Text;
                    lbl.LinkClicked     = (s, e) => viewModel.OnSuggestionClicked(idx);
                    lbl.SetFrameOrigin(new CoreGraphics.CGPoint(5, idx * itemHeight));
                    lbl.SetFrameSize(lbl.IntrinsicContentSize);
                    return(lbl);
                }).ToList();
                foreach (var subView in views)
                {
                    dlg.suggestionsView.AddSubview(subView);
                    maxRight = (nfloat)Math.Max(maxRight, subView.Frame.Right);
                }
                dlg.suggestionsView.SetFrameSize(new CoreGraphics.CGSize(maxRight, list.Length * itemHeight));
                if (selectedItem != null)
                {
                    dlg.suggestionsView.ScrollRectToVisible(views[selectedItem.Value].Frame);
                }
            }
                );

            var listStatusUpdater = Updaters.Create(
                () => viewModel.TagsListStatus,
                (status) =>
            {
                var(statusText, statusSeverity) = status;
                dlg.tagsStatusLinkLabel.SetAttributedContents(statusText);
                dlg.tagsStatusLinkLabel.TextColor = getLinkColor(statusSeverity);
            }
                );

            dlg.subscription = changeNotification.CreateSubscription(() => {
                updateCheckboxes();
                updateFormula();
                formulaFocusSideEffect();
                updateSuggestions();
                listStatusUpdater();
            }, initiallyActive: false);

            dlg.formulaEditLinkLabel.LinkClicked = (sender, e) => {
                if (viewModel.IsEditingFormula)
                {
                    viewModel.OnStopEditingFormulaClicked();
                }
                else
                {
                    viewModel.OnEditFormulaClicked();
                }
            };

            dlg.formulaLinkLabel.LinkClicked = (sender, e) =>
                                               viewModel.OnFormulaLinkClicked(e.Link.Tag as string);

            dlg.tagsStatusLinkLabel.LinkClicked = (sender, e) =>
                                                  viewModel.OnTagsStatusLinkClicked(e.Link.Tag as string);


            return(dlg);
        }
            public override NSView GetView(NSOutlineView outlineView, NSTableColumn tableColumn, NSObject item)
            {
                var sourceItem = item as Item;

                if (tableColumn == owner.displayNameColumn)
                {
                    var cellIdentifier = "text_cell";
                    var view           = (NSLinkLabel)outlineView.MakeView(cellIdentifier, this);

                    if (view == null)
                    {
                        view                = new NSLinkLabel();
                        view.Identifier     = cellIdentifier;
                        view.UnderlineLinks = false;
                    }

                    view.LinkClicked = (sender, e) =>
                    {
                        e.SuppressDefault = true;
                        owner.owner.viewModel.OnSuggestionClicked(sourceItem.Index);
                    };
                    view.StringValue = sourceItem.PresenationItem.Text;
                    if (sourceItem.PresenationItem.IsSelectable)
                    {
                        view.LinksColor = NSColor.ControlText;
                        view.Cursor     = NSCursor.PointingHandCursor;
                        view.FontSize   = NSFont.SystemFontSize;
                    }
                    else
                    {
                        view.LinksColor = NSColor.Gray;
                        view.Cursor     = NSCursor.ArrowCursor;
                        view.FontSize   = NSFont.SmallSystemFontSize;
                    }
                    return(view);
                }
                else if (tableColumn == owner.linkColumn)
                {
                    if (sourceItem.PresenationItem.LinkText == null)
                    {
                        return(null);
                    }

                    var cellIdentifier = "link_cell";
                    var view           = (NSLinkLabel)outlineView.MakeView(cellIdentifier, this);

                    if (view == null)
                    {
                        view            = new NSLinkLabel();
                        view.Identifier = cellIdentifier;
                    }

                    view.LinkClicked = (sender, e) =>
                    {
                        e.SuppressDefault = true;
                        owner.owner.viewModel.OnSuggestionLinkClicked(sourceItem.Index);
                    };
                    view.StringValue = sourceItem.PresenationItem.LinkText;
                    return(view);
                }

                return(null);
            }