public Boss GetDirectoryEditor(Boss window)
        {
            Boss result = null;

            if (window != null)
            {
                if (window.Has<IDirectoryEditor>())
                {
                    result = window;
                }
                else if (window.Has<ITextEditor>())
                {
                    result = DoFindAssociatedBoss(window.Get<ITextEditor>());
                }
            }

            if (result == null)
            {
                result = DoFindDefaultBoss();
            }

            return result;
        }
Beispiel #2
0
 private void DoAddTitle(Boss boss)
 {
     if (boss.Has<ITextEditor>() && !boss.Has<IDocumentWindowTitle>())
     {
         var editor = boss.Get<ITextEditor>();
         if (editor.Path != null && editor.Path.StartsWith(m_timeMachineDir))
         {
             boss.ExtendWithInterface(typeof(TimeMachineWindowTitle), typeof(IDocumentWindowTitle));
         }
     }
 }
Beispiel #3
0
        private string DoGetFile(Boss boss)
        {
            var editor = boss.Get<ITextEditor>();
            string file = null;
            if (boss.Has<ICodeViewer>())
            {
                var viewer = boss.Get<ICodeViewer>();
                file = viewer.Path;
            }
            else
            {
                file = editor.Path;
            }

            return file;
        }
        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);
            }
        }
Beispiel #5
0
        public void onOpened(TextController controller)
        {
            m_boss = controller.Boss;
            m_autoComplete = m_boss.Get<IAutoComplete>();
            setTypingAttributes(CurrentStyles.DefaultAttributes);
            setAutomaticTextReplacementEnabled(false);

            if (m_boss.Has<ITooltip>())
            {
                m_tooltip = m_boss.Get<ITooltip>();
                m_timer = new System.Threading.Timer((object state) =>
                {
                    NSApplication.sharedApplication().BeginInvoke(this.DoShowTooltip);
                });
            }
        }