예제 #1
0
        public void Show(ITextEditor editor, NSTextView text, string label, Item[] items, string stem, bool isInstance, bool isStatic)
        {
            var wind = (CompletionsWindow) window();
            NSPoint loc = editor.GetBoundingBox(text.selectedRange()).origin;
            wind.SetLoc(loc);

            m_label.Value.setStringValue(NSString.Create(label));
            m_table.Value.Open(editor, text, items, stem, m_label.Value, label);
            Log.WriteLine("AutoComplete", "took {0:0.000} secs to open the window", AutoComplete.Watch.ElapsedMilliseconds/1000.0);

            if (items.Length != 1)
                NSApplication.sharedApplication().beginSheet_modalForWindow_modalDelegate_didEndSelector_contextInfo(
                    wind, text.window(), null, null, IntPtr.Zero);
        }
예제 #2
0
        public void Init(ITextEditor editor, NSTextView text, LiveRange range, AnnotationAlignment alignment)
        {
            m_editor = editor;
            m_text = text;
            m_range = range;
            m_view = this["view"].To<AnnotateView>();
            m_alignment = alignment;

            m_parent = m_text.window();

            NSNotificationCenter.defaultCenter().addObserver_selector_name_object(
                this, "parentWillClose:", Externs.NSWindowWillCloseNotification, m_parent);

            m_text.superview().setPostsBoundsChangedNotifications(true);
            NSNotificationCenter.defaultCenter().addObserver_selector_name_object(
                this, "parentBoundsChanged:", Externs.NSViewBoundsDidChangeNotification, m_text.superview());

            m_range.Changed += this.DoRangeChanged;
        }
예제 #3
0
        public void Populate(NSMenu menu, NSTextView view, Boss window)
        {
            // ITextContextCommands expect that the main window is the one the user
            // is working with.
            view.window().makeKeyAndOrderFront(view);

            // We don't extend the default menu because it has tons of stuff that we
            // don't really want. But we should add the services...
            //			NSMenu menu = SuperCall("menuForEvent:", evt).To<NSMenu>();
            //			menu.addItem(NSMenuItem.separatorItem());

            try
            {
                // Get the selection.
                m_view = view;
                m_range = view.selectedRange();
                m_selection = null;
                if (m_range.length > 0)
                    view.string_().getCharacters_range(m_range, out m_selection);

                // Get the language.
                string language = null;
                if (window.Has<ITextEditor>())
                {
                    var editor = window.Get<ITextEditor>();
                    language = editor.Language;
                }

                // Get the commands.
                var watch = new Stopwatch();
                watch.Start();
                m_entries.Clear();
                if (window != null)
                    DoGetEntries(view, m_selection, language, window);
                DoGetEntries(view, m_selection, language, m_boss);

                if (m_entries.Count == 0)
                {
                    if (window != null)
                        DoGetEntries(view, null, language, window);
                    DoGetEntries(view, null, language, m_boss);
                }
                Log.WriteLine("ContextMenu", "took {0:0.000} secs to open the menu", watch.ElapsedMilliseconds/1000.0);

                m_entries.Sort(this.DoCompareEntry);

                // Remove duplicate separators and any at the start or end.
                for (int i = m_entries.Count - 1; i > 0; --i)
                {
                    if (m_entries[i].Command.Name == null && m_entries[i - 1].Command.Name == null)
                        m_entries.RemoveAt(i);
                }
                while (m_entries.Count > 0 && m_entries[0].Command.Name == null)
                    m_entries.RemoveAt(0);
                while (m_entries.Count > 0 && m_entries[m_entries.Count - 1].Command.Name == null)
                    m_entries.RemoveAt(m_entries.Count - 1);

                // Build the menu.
                menu.removeAllItems();
                for (int i = 0; i < m_entries.Count; ++i)
                {
                    NSMenuItem item = null;

                    if (m_entries[i].Command.Name != null)
                    {
                        if (m_entries[i].Command.Name != Constants.Ellipsis)
                        {
                            item = NSMenuItem.Create(m_entries[i].Command.Name, "dispatchTextContextMenu:");

                            if (m_entries[i].Command.Title != null)
                                item.setAttributedTitle(m_entries[i].Command.Title);
                        }
                        else
                            item = NSMenuItem.Create(Constants.Ellipsis);
                        item.setTag(i);
                    }
                    else
                    {
                        Contract.Assert(m_entries[i].Command.Handler == null, "names is null, but handlers is not");
                        item = NSMenuItem.separatorItem();
                    }

                    if (item != null)
                        menu.addItem(item);
                }
            }
            catch (DatabaseLockedException)
            {
                NSString title = NSString.Create("Database was locked.");
                NSString message = NSString.Create("Try again.");
                Unused.Value = Functions.NSRunAlertPanel(title, message);
            }
            catch (Exception e)
            {
                Log.WriteLine(TraceLevel.Error, "App", "Error building context menu:");
                Log.WriteLine(TraceLevel.Error, "App", "{0}", e);

                NSString title = NSString.Create("Error building the menu.");
                NSString message = NSString.Create(e.Message);
                Unused.Value = Functions.NSRunAlertPanel(title, message);
            }
        }