public static void MoveOutRight(IEditor editor) { var bounds = editor.Figure.Bounds; editor.Parent.RequestSelect(SelectKind.True, true); editor.Site.Caret.Position = CaretUtil.GetExpectedCaretPosition( new Point(bounds.Right - 1, bounds.Top), editor.Site.GridService ); }
public static void Remove(IEditor editor) { var parent = editor.Parent; var loc = CaretUtil.GetExpectedCaretPosition(editor.Figure.Location, editor.Site.GridService); var caret = editor.Site.Caret; editor.RequestRemove(); caret.Position = loc; parent.RequestSelect(SelectKind.True, true); }
public static void MoveCaretLeft(IEditor editor) { var caret = editor.Site.EditorCanvas.Caret; var expectedMemoPos = CaretUtil.GetExpectedMemoTextPosition(caret.Position); var newExpectedMemoPos = new Point(expectedMemoPos.X - MemopadConsts.CaretMoveDelta, expectedMemoPos.Y); caret.Position = CaretUtil.GetExpectedCaretPosition( newExpectedMemoPos, editor.Site.GridService ); FocusMemoText(editor, caret.Position); }
// ======================================== // static method // ======================================== public static void Paste(IEditor editor, bool inBlock) { if (editor.CanUnderstand(new PasteRequest())) { var caret = editor.Site.Caret; var loc = CaretUtil.GetExpectedMemoTextPosition(caret.Position); var cmd = editor.RequestPaste(loc, inBlock? EditorConsts.InBlockPasteDescription: null) as PasteCommand; cmd.MergeJudge = next => next is FocusCommand; if (cmd != null && cmd.PastedEditors != null) { editor.Site.SelectionManager.DeselectAll(); foreach (var pasted in cmd.PastedEditors) { pasted.RequestSelect(SelectKind.True, false); } } } }
protected virtual void HandleMouseDown(object sender, MouseEventArgs e) { /// 他のEditorがFocusされていたらCommitしておく var prevFocused = Handle.Host.Site.FocusManager.FocusedEditor; if (prevFocused != null && prevFocused != Handle.Host) { prevFocused.RequestFocusCommit(true); } _toggle = KeyUtil.IsControlPressed(); if (!_toggle) { Handle.Host.RequestSelect(SelectKind.True, true); } if (_Caret != null) { var expectedTextPos = CaretUtil.GetExpectedMemoTextPosition(new Point(e.X, e.Y - _Caret.Height / 2)); _Caret.Position = CaretUtil.GetExpectedCaretPosition(expectedTextPos, Handle.Host.Site.GridService); } }
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); }; }
/// KeyDownで処理するとIME ONで入力したときに, /// IMEウィンドウが開く前にMemoTextが生成される. //protected virtual void HandleKeyDown(object sender, KeyEventArgs e) { // /// IMEの状態が変わるキーならばreturn // var curImeOn = Handle.Host.Site.EditorCanvas.IsImeOpen(); // if (curImeOn != _isImeOn) { // _isImeOn = curImeOn; // return; // } // _isImeOn = curImeOn; // /// なんらかの処理(KeyMapの処理など)がされていたら何もしない // if (e.SuppressKeyPress) { // return; // } // /// 制御用のキーならば何もしない // if (char.IsControl((char)e.KeyValue)) { // return; // } // /// 文字入力用のキー入力でない場合は何もしない // var mod = e.KeyData & Keys.Modifiers; // if (mod != Keys.None && !(mod == Keys.Shift && e.KeyCode != Keys.ShiftKey)) { // return; // } // /// caret位置にテキストを作成 // CreateMemoText(); //} // ------------------------------ // private // ------------------------------ private void CreateMemoText(string s) { var loc = CaretUtil.GetExpectedMemoTextPosition(_Caret.Position); MemoEditorHelper.AddString(Handle.Host, loc, s); }