Exemple #1
0
            bool ShowTooltipEvent()
            {
                tipShowTimeoutId = 0;

                if (!mouseOver)
                {
                    return(false);
                }

                int remainingMs = (int)(scheduledTipTime - DateTime.Now).TotalMilliseconds;

                if (remainingMs > 50)
                {
                    // Still some significant time left. Re-schedule the timer
                    tipShowTimeoutId = GLib.Timeout.Add((uint)remainingMs, ShowTooltipEvent);
                    return(false);
                }

                if (!string.IsNullOrEmpty(tip))
                {
                    HideTooltip();
                    tooltipWindow           = TooltipPopoverWindow.Create();
                    tooltipWindow.ShowArrow = true;
                    tooltipWindow.Text      = tip;
                    tooltipWindow.ShowPopup(box, PopupPosition.Top);
                }
                return(false);
            }
        void ShowTooltipWindow(int x, int y)
        {
            tooltipTimeout = 0;
            if (x >= Allocation.Width)
            {
                return;
            }
            var row = GetAllRows(true).FirstOrDefault(r => !r.IsCategory && y >= r.EditorBounds.Y && y <= r.EditorBounds.Bottom);

            if (row != null)
            {
                if (tooltipWindow == null)
                {
                    tooltipWindow           = TooltipPopoverWindow.Create();
                    tooltipWindow.ShowArrow = true;
                }
                var s = new System.Text.StringBuilder("<b>" + row.Property.DisplayName + "</b>");
                s.AppendLine();
                s.AppendLine();
                s.Append(GLib.Markup.EscapeText(row.Property.Description));
                if (row.Property.Converter.CanConvertTo(row, typeof(string)))
                {
                    var value = Convert.ToString(row.Property.GetValue(row.Instance));
                    if (!string.IsNullOrEmpty(value))
                    {
                        const int chunkLength    = 200;
                        var       multiLineValue = string.Join(Environment.NewLine, Enumerable.Range(0, (int)Math.Ceiling((double)value.Length / chunkLength)).Select(n => string.Concat(value.Skip(n * chunkLength).Take(chunkLength))));
                        s.AppendLine();
                        s.AppendLine();
                        s.Append("Value: ").Append(multiLineValue);
                    }
                }
                tooltipWindow.Markup = s.ToString();
                tooltipWindow.ShowPopup(this, new Gdk.Rectangle(0, row.EditorBounds.Y, Allocation.Width, row.EditorBounds.Height), PopupPosition.Right);
            }
        }
            void HandleKeyTreeMotion(double mouseX, double mouseY)
            {
                if (keyBindingsPanel.duplicates?.Count <= 0)
                {
                    return;
                }

                var hit = HitTest(mouseX, mouseY);

                if (hit.ButtonBounds.IsEmpty)
                {
                    HideConflictTooltip();
                    return;
                }

                if (hit.AllKeys.Count == 0)
                {
                    return;
                }

                HashSet <Command> keyDuplicates = null;

                if (keyBindingsPanel.duplicates.TryGetValue(hit.AllKeys [hit.SelectedKey], out keyDuplicates))
                {
                    var cmdDuplicates = keyDuplicates.Where(cmd => cmd != hit.Command);
                    if (tooltipWindow == null)
                    {
                        tooltipWindow           = TooltipPopoverWindow.Create();
                        tooltipWindow.ShowArrow = true;
                        //tooltipWindow.LeaveNotifyEvent += delegate { HideConflictTooltip (); };
                    }

                    var text = string.Empty;
                    HashSet <Command> cmdConflicts = null;
                    bool hasConflict = false;
                    if (keyBindingsPanel.conflicts != null && keyBindingsPanel.conflicts.TryGetValue(hit.AllKeys [hit.SelectedKey], out cmdConflicts))
                    {
                        hasConflict = cmdConflicts.Contains(hit.Command);
                    }

                    if (hasConflict)
                    {
                        var acmdConflicts = cmdConflicts.Where(cmd => cmd != hit.Command).ToArray();
                        text += GettextCatalog.GetPluralString(
                            "This shortcut is assigned to another command that is available\nin the same context. Please set a different shortcut.",
                            "This shortcut is assigned to other commands that are available\nin the same context. Please set a different shortcut.",
                            acmdConflicts.Length) + "\n\n";
                        text += GettextCatalog.GetString("Conflicts:");
                        foreach (var conflict in acmdConflicts)
                        {
                            text += "\n\u2022 " + conflict.Category + " \u2013 " + conflict.DisplayName;
                        }
                        cmdDuplicates = cmdDuplicates.Except(acmdConflicts);
                    }
                    if (cmdDuplicates.Count() > 0)
                    {
                        if (hasConflict)
                        {
                            text += "\n\n";
                        }
                        text += GettextCatalog.GetString("Duplicates:");

                        foreach (var cmd in cmdDuplicates)
                        {
                            text += "\n\u2022 " + cmd.Category + " \u2013 " + cmd.DisplayName;
                        }
                    }

                    tooltipWindow.Markup   = text;
                    tooltipWindow.Severity = hasConflict ? Tasks.TaskSeverity.Error : Tasks.TaskSeverity.Warning;

                    tooltipWindow.ShowPopup(keyBindingsTree, hit.ButtonBounds, PopupPosition.Top);
                }
                else
                {
                    HideConflictTooltip();
                }
            }