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; }
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)); } } }
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); } }
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); }); } }