private void InitMenuItems() { _cutInNewMemo = new ToolStripMenuItem("切り出す(&C)"); _cutInNewMemo.Click += (sender, e) => { using (var form = new CreateMemoForm()) { form.Font = _app.Theme.CaptionFont; form.MemoTitle = "新しいノート"; if (form.ShowDialog() == DialogResult.OK) { var copied = Owner.Referer.Target.CopyBlocksAndInlines(Owner.Referer.Selection.Range); _app.ShowMainForm(); _app.ActivateMainForm(); var info = _app.CreateMemo(form.MemoTitle); if (form.OriginalModification == CreateMemoForm.OriginalModificationKind.Remove) { Owner.RemoveForward(); } else if (form.OriginalModification == CreateMemoForm.OriginalModificationKind.ReplaceWithLink) { Owner.RemoveForward(); Owner.InsertLink(info.Title, new Link(UriUtil.GetUri(info))); if (copied.Last() is BlockBreak) { Owner.InsertBlockBreak(); } } var pageContent = _app.MainForm.FindPageContent(info); var canvas = pageContent.EditorCanvas; var caret = canvas.Caret; var loc = CaretUtil.GetExpectedMemoTextPosition(caret.Position); MemoEditorHelper.AddBlocksAndInlines(canvas.RootEditor.Children.First(), loc, copied, false); } } }; _splitThisParagraph = new ToolStripMenuItem("この行で分割(&S)"); _splitThisParagraph.Click += (sender, e) => { using (_editor.Site.CommandExecutor.BeginChain()) { var referer = Owner.Referer; var stext = referer.Target; var lineIndex = stext.GetLineIndex(referer.CaretIndex); var lineStart = stext.GetLineStartCharIndex(lineIndex); var flows = stext.CopyBlocksAndInlines(lineStart); var rect = Rectangle.Empty; rect = _focus.Figure.GetCharRect(lineStart); Owner.Selection.Range = Range.FromStartAndEnd(lineStart - 1, stext.Length - 2); Owner.RemoveForward(); _editor.RequestFocus(FocusKind.Commit, null); var loc = new Point(_editor.Figure.Left, rect.Bottom + 16); var memoEditor = _editor.Parent; var created = MemoEditorHelper.AddBlocksAndInlines(memoEditor, loc, flows, true); created.RequestFocusCommit(true); } }; _splitParagraphs = new ToolStripMenuItem("段落ごとに分割(&P)"); _splitParagraphs.Click += (sender, e) => { using (_editor.Figure.Root.DirtManager.BeginDirty()) using (_editor.Site.CommandExecutor.BeginChain()) { var referer = Owner.Referer; var stext = referer.Target; var memoEditor = _editor.Parent; var created = default(IEditor); var createds = new List <IEditor>(); var cTop = _editor.Figure.Top; foreach (var block in stext.Blocks) { var flows = new Flow[] { block.CloneDeeply() as Block, }; var loc = new Point(_editor.Figure.Left, cTop); created = MemoEditorHelper.AddBlocksAndInlines(memoEditor, loc, flows, true); createds.Add(created); cTop += created.Figure.Height + 16; } created.RequestFocusCommit(true); _editor.RequestRemove(); var cmd = new SelectMultiCommand(createds, SelectKind.True, true); cmd.Execute(); } }; _openLink = new ToolStripMenuItem("リンクを開く(&O)"); _openLink.Click += (sender, e) => { var run = Owner.GetInlineAtCaretIndex() as Run; if (run != null && run.HasLink) { LinkUtil.GoLink(run.Link); } }; _removeLink = new ToolStripMenuItem("リンクを削除(&R)"); _removeLink.Click += (sender, e) => { Owner.UnsetLink(); }; _setLink = new ToolStripMenuItem("リンクを設定(&L)"); _setLink.Click += (sender, e) => { if (Owner.Selection.IsEmpty) { var run = Owner.GetInlineAtCaretIndex() as Run; if (run != null) { var oldUri = default(string); if (run != null && run.HasLink) { oldUri = run.Link.Uri; } var oldText = run.Text; var dialog = new LinkSelectForm(); if (dialog.ShowDialog(_app.MainForm, oldUri, run.Text) == DialogResult.OK) { var uri = dialog.Uri; var newText = dialog.TitleText; if (newText != oldText) { Owner.SetRunText(run, newText); } if (uri != oldUri) { Owner.SetLink(uri, null); } } } } else { var range = Owner.Selection.Range; var oldText = Owner.Referer.Target.Text.Substring(range.Offset, range.Length); var dialog = new LinkSelectForm(); dialog.TitleTextTextBoxEnabled = false; if (dialog.ShowDialog(_app.MainForm, null, oldText) == DialogResult.OK) { Owner.SetLink(dialog.Uri, null); } } }; _addComment = new ToolStripMenuItem("コメントを追加(&C)"); _addComment.Click += (sender, e) => { MemoEditorHelper.AddCommentForMemoText(Owner); }; }
// ------------------------------ // private // ------------------------------ private IDragTarget CreateDragTarget() { var ret = MouseOperatableFactory.CreateDragTarget(); var app = MemopadApplication.Instance; ret.DragOver += (sender, e) => { e.Effect = DragDropEffects.None; var data = e.Data; if (data.GetDataPresent(typeof(MemoInfo[]))) { if (DragDropUtil.IsLinkAllowed(e)) { e.Effect = DragDropEffects.Link; } } else if (data.GetDataPresent(DataFormats.FileDrop)) { if (DragDropUtil.IsControlPressed(e)) { if (DragDropUtil.IsCopyAllowed(e)) { e.Effect = DragDropEffects.Copy; } } else { if (DragDropUtil.IsLinkAllowed(e)) { e.Effect = DragDropEffects.Link; } } } else if (data.GetDataPresent(StyledTextConsts.BlocksAndInlinesFormat.Name)) { if (DragDropUtil.IsControlPressed(e)) { if (DragDropUtil.IsCopyAllowed(e)) { e.Effect = DragDropEffects.Copy; } else if (DragDropUtil.IsMoveAllowed(e)) { e.Effect = DragDropEffects.Move; } } else { if (DragDropUtil.IsMoveAllowed(e)) { e.Effect = DragDropEffects.Move; } else if (DragDropUtil.IsCopyAllowed(e)) { e.Effect = DragDropEffects.Copy; } } } else if (data.GetDataPresent(DataFormats.Html)) { if (DragDropUtil.IsControlPressed(e)) { if (DragDropUtil.IsCopyAllowed(e)) { e.Effect = DragDropEffects.Copy; } else if (DragDropUtil.IsMoveAllowed(e)) { e.Effect = DragDropEffects.Move; } } else { if (DragDropUtil.IsMoveAllowed(e)) { e.Effect = DragDropEffects.Move; } else if (DragDropUtil.IsCopyAllowed(e)) { e.Effect = DragDropEffects.Copy; } } } else if (data.GetDataPresent("UniformResourceLocator") && data.GetDataPresent(DataFormats.UnicodeText)) { if (DragDropUtil.IsLinkAllowed(e)) { e.Effect = DragDropEffects.Link; } } else if (data.GetDataPresent(DataFormats.UnicodeText)) { if (DragDropUtil.IsControlPressed(e)) { if (DragDropUtil.IsCopyAllowed(e)) { e.Effect = DragDropEffects.Copy; } else if (DragDropUtil.IsMoveAllowed(e)) { e.Effect = DragDropEffects.Move; } } else { if (DragDropUtil.IsMoveAllowed(e)) { e.Effect = DragDropEffects.Move; } else if (DragDropUtil.IsCopyAllowed(e)) { e.Effect = DragDropEffects.Copy; } } } }; ret.DragDrop += (sender, e) => { if (DragDropUtil.IsNone(e)) { return; } var oldCursor = Host.Site.EditorCanvas.Cursor; Host.Site.EditorCanvas.Cursor = Cursors.WaitCursor; try { var data = e.Data; var loc = Host.Site.GridService.GetAdjustedPoint(new Point(e.X, e.Y)); if (data.GetDataPresent(typeof(MemoInfo[]))) { /// MemoInfo[] if (DragDropUtil.IsLink(e)) { var infos = (MemoInfo[])data.GetData(typeof(MemoInfo[])); foreach (var info in infos) { var text = info.Title; var uri = UriUtil.GetUri(info); var created = MemoEditorHelper.AddTextAsLink(Host, loc, text, uri, null); } Host.Site.EditorCanvas.Select(); } } else if (data.GetDataPresent(DataFormats.FileDrop)) { /// FileDrop if (DragDropUtil.IsCopy(e) || DragDropUtil.IsLink(e)) { MemoEditorHelper.AddFileDrops( Host, loc, (string[])data.GetData(DataFormats.FileDrop), e.Effect == DragDropEffects.Copy, true, false ); Host.Site.EditorCanvas.Select(); } } else if (data.GetDataPresent(StyledTextConsts.BlocksAndInlinesFormat.Name)) { /// StyledText flows if (DragDropUtil.IsCopy(e) || DragDropUtil.IsMove(e)) { MemoEditorHelper.AddBlocksAndInlines( Host, loc, data.GetData(StyledTextConsts.BlocksAndInlinesFormat.Name) as IEnumerable <Flow>, true ); Host.Site.EditorCanvas.Select(); } } else if (data.GetDataPresent(DataFormats.Html)) { /// Html if (DragDropUtil.IsCopy(e) || DragDropUtil.IsMove(e)) { var html = Common.Forms.Clipboard.ClipboardUtil.GetCFHtmlFromDataObject(data); MemoEditorHelper.AddHtml( Host, loc, html, true ); Host.Site.EditorCanvas.Select(); } } else if (data.GetDataPresent("UniformResourceLocator") && data.GetDataPresent(DataFormats.UnicodeText)) { /// URL if (DragDropUtil.IsLink(e)) { var url = (string)data.GetData(DataFormats.UnicodeText); var created = MemoEditorHelper.AddTextAsLink(Host, loc, url, url, null); Host.Site.EditorCanvas.Select(); } } else if (data.GetDataPresent(DataFormats.UnicodeText)) { /// text if (DragDropUtil.IsCopy(e) || DragDropUtil.IsMove(e)) { MemoEditorHelper.AddText(Host, loc, (string)data.GetData(DataFormats.UnicodeText), false); Host.Site.EditorCanvas.Select(); } } } finally { Host.Site.EditorCanvas.Cursor = oldCursor; } }; return(ret); }