Пример #1
0
        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);
                    }
                }
            }
        }
Пример #2
0
        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());
            }
        }
Пример #3
0
        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);
        }
Пример #4
0
        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);
                }
            }
        }
Пример #5
0
        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);
                    }
                }
            }
        }
Пример #6
0
        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);
            }
        }
Пример #7
0
        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);
            }
        }
Пример #8
0
        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);
                }
            }
        }