protected void SetFontBase(Func <FontDescription, FontDescription> fontProvider, FontModificationKinds kind) { if (_EditorCanvas == null) { return; } if (_EditorCanvas.FocusManager.IsEditorFocused) { /// Focusがある場合はその内容を変更する var focus = _EditorCanvas.FocusManager.Focus as StyledTextFocus; if (focus != null) { focus.SetFont((flow) => fontProvider(flow.Font)); } // todo: PlainTextのときの処理 } else { /// Focusがない場合はRequestを送る var selecteds = _EditorCanvas.SelectionManager.SelectedEditors; if (selecteds.Any()) { var bundle = new EditorBundle(_EditorCanvas.SelectionManager.SelectedEditors); var executor = _EditorCanvas.CommandExecutor; var nodeFig = selecteds.First().Figure as INode; if (nodeFig != null) { var req = new SetPlainTextFontRequest() { Font = fontProvider(nodeFig.Font), }; bundle.PerformCompositeRequest(req, executor); } var node = selecteds.First().Model as MemoStyledText; if (node != null) { var stext = node.StyledText; var stfont = stext.Inlines.First().Font; var req = new SetStyledTextFontRequest() { FontProvider = (flow) => fontProvider(stfont), }; bundle.PerformCompositeRequest(req, executor); } } } }
public virtual void HandleDragFinish(object sender, MouseEventArgs e) { using (Handle.Host.Figure.DirtManager.BeginDirty()) { var moveDelta = (Size)e.Location - (Size)_startPoint; if (KeyUtil.IsControlPressed()) { _targets.HideFeedback(_moveRequest); if (_targets.Editors.Any()) { var target = _targets.Editors.First().Parent; var cloneRequest = new CloneRequest(_targets.Editors); cloneRequest.MoveDelta = moveDelta; var cmd = target.PerformRequest(cloneRequest) as CloneCommand; if (cmd != null && cmd.ClonedEditors != null) { var select = new SelectMultiCommand(cmd.ClonedEditors, SelectKind.True, true); select.Execute(); } } } else { _moveRequest.MoveDelta = moveDelta; _targets.HideFeedback(_moveRequest); _targets.PerformCompositeRequest(_moveRequest, Handle.Host.Site.CommandExecutor); } Handle.Host.ShowFeedback(new HighlightRequest()); } }
public override bool HandleDragFinish(MouseEventArgs e) { using (_Host.RootFigure.DirtManager.BeginDirty()) { var delta = (Size)e.Location - (Size)_startPoint; var horizontal = Math.Abs(delta.Width) > Math.Abs(delta.Height); var content = _Host.RootEditor.Content; if (horizontal) { _moveRequest.MovingEditors = content.Children.Where(edi => edi.Figure.Left > _startPoint.X).ToArray(); } else { _moveRequest.MovingEditors = content.Children.Where(edi => edi.Figure.Top > _startPoint.Y).ToArray(); } _targets = new EditorBundle(_moveRequest.MovingEditors); var moveDelta = horizontal ? new Size(delta.Width, 0) : new Size(0, delta.Height); _moveRequest.MoveDelta = moveDelta; _targets.HideFeedback(_moveRequest); _targets.PerformCompositeRequest(_moveRequest, _Host.CommandExecutor); _Host.RootEditor.Content.HideFeedback(_spaceRequest); } _canvas.Tool = _toolOnFinished; return(true); }
protected void SetStyledTextAlignmentBase( AlignmentModificationKinds kinds, Mkamo.Common.DataType.HorizontalAlignment horizontaliAlign, VerticalAlignment verticalAlign ) { if (_EditorCanvas.FocusManager.IsEditorFocused) { /// Focusがある場合はその内容を変更する var focus = _EditorCanvas.FocusManager.Focus as StyledTextFocus; if (focus != null) { if ((kinds & AlignmentModificationKinds.Horizontal) == AlignmentModificationKinds.Horizontal) { focus.SetHorizontalAlignment(horizontaliAlign); } if ((kinds & AlignmentModificationKinds.Vertical) == AlignmentModificationKinds.Vertical) { focus.SetVerticalAlignment(verticalAlign); } } return; } var selecteds = _EditorCanvas.SelectionManager.SelectedEditors; if (selecteds.Any()) { var bundle = new EditorBundle(_EditorCanvas.SelectionManager.SelectedEditors); var executor = _EditorCanvas.CommandExecutor; //var nodeFig = selecteds.First().Figure as INode; //if (nodeFig != null) { // var req = new SetPlainTextFontRequest() { // Font = fontProvider(nodeFig.Font), // }; // bundle.PerformCompositeRequest(req, executor); //} var node = selecteds.First().Model as MemoStyledText; if (node != null) { var req = new SetStyledTextAlignmentRequest() { Kinds = kinds, HorizontalAlignment = horizontaliAlign, VerticalAlignment = verticalAlign, }; bundle.PerformCompositeRequest(req, executor); } } }
protected void SetTextColorBase(Color color) { if (_EditorCanvas == null) { return; } if (_EditorCanvas.FocusManager.IsEditorFocused) { /// Focusがある場合はその内容を変更する var focus = _EditorCanvas.FocusManager.Focus as StyledTextFocus; if (focus != null) { focus.SetColor(color); } // todo: PlainTextのときの処理 } else { /// Focusがない場合はRequestを送る var selecteds = _EditorCanvas.SelectionManager.SelectedEditors; if (selecteds.Any()) { var bundle = new EditorBundle(_EditorCanvas.SelectionManager.SelectedEditors); var executor = _EditorCanvas.CommandExecutor; //var nodeFig = selecteds.First().Figure as INode; //if (nodeFig != null) { // var req = new SetPlainTextFontRequest() { // Font = fontProvider(nodeFig.Font), // }; // bundle.PerformCompositeRequest(req, executor); //} var node = selecteds.First().Model as MemoStyledText; if (node != null) { var stext = node.StyledText; var req = new SetStyledTextColorRequest(color); bundle.PerformCompositeRequest(req, executor); } } } }
public void DoDelete(EditorCanvas editorCanvas) { if (editorCanvas == null) { return; } if (editorCanvas.FocusManager.IsEditorFocused) { var focus = editorCanvas.FocusManager.Focus as StyledTextFocus; if (focus != null) { focus.RemoveForward(); } } else if (editorCanvas.CanDelete()) { var selecteds = editorCanvas.SelectionManager.SelectedEditors; var bundle = new EditorBundle(selecteds); var req = new RemoveRequest(); bundle.PerformCompositeRequest(req, editorCanvas.CommandExecutor); } }
public void DoPaste(EditorCanvas editorCanvas) { if (editorCanvas == null) { return; } if (editorCanvas.FocusManager.IsEditorFocused) { var focus = editorCanvas.FocusManager.Focus as StyledTextFocus; if (focus != null) { focus.PasteInlinesOrText(false); } } else if (editorCanvas.CanPaste()) { var selecteds = editorCanvas.SelectionManager.SelectedEditors; var bundle = new EditorBundle(selecteds); var req = new PasteRequest(); req.Location = editorCanvas.Caret.Position; bundle.PerformCompositeRequest(req, editorCanvas.CommandExecutor); } }
protected internal void SetParagraphListKind(ListKind listKind) { if (_EditorCanvas == null) { return; } if (_EditorCanvas.FocusManager.IsEditorFocused) { var focus = _EditorCanvas.FocusManager.Focus as StyledTextFocus; focus.ToggleList(listKind); UpdateToolStrip(); return; } var selecteds = _EditorCanvas.SelectionManager.SelectedEditors; if (selecteds.Any()) { var bundle = new EditorBundle(_EditorCanvas.SelectionManager.SelectedEditors); var executor = _EditorCanvas.CommandExecutor; /// listKindでないParagraphがひとつでもあればon == true。そうでなければon == false。 var on = false; var node = default(MemoStyledText); foreach (var selected in selecteds) { var memoSText = selected.Model as MemoStyledText; if (memoSText != null) { var stext = memoSText.StyledText; foreach (var block in stext.Blocks) { var para = block as Paragraph; if (para != null && para.ListKind != listKind) { on = true; break; } } if (node == null) { node = memoSText; } } if (on) { break; } } if (node != null) { var req = new SetStyledTextListKindRequest() { ListKind = listKind, On = on, }; bundle.PerformCompositeRequest(req, executor); } } }