Quantcast
Channel: Visual Studio Integrate forum
Viewing all articles
Browse latest Browse all 4410

ToolWindowPane with Editor : Cut/Copy/Undo etc

$
0
0

Hello,

I have a ToolWindowPane with a toolbar and an embedded Editor (IWpfTextViewHost).
The keyboard shortcuts for insert/delete etc work fine but the VS MainMenu and Toolbar items do not work

I found that I can intercept the VSConstants.GUID_VSStandardCommandSet97

My first problem is how can I query the IWpfTextViewHost
- if text is selected (for cut / copy)
- if I can paste Clipboard contents

If I enable them always (dispite quering their real state)  the items work

The second problem is Undo / Redo works with VS Toolbar but not with keyboard or VS Menu

A related question: Do I have to tell the IWpfTextViewHost to execute actions as cut/copy/paste/undo/redo and how do I do this, if necessary ?

here my current code for QueryStatus

  int IOleCommandTarget.QueryStatus(ref Guid pguidCmdGroup, uint cCmds, OLECMD[] prgCmds, IntPtr pCmdText)
        {
            if (pguidCmdGroup == GuidList.guidiNEXTCmdSet) return VSConstants.S_OK; // own comands

            if (pguidCmdGroup == VSConstants.GUID_VSStandardCommandSet97)
            {
                OLECMDF cmdf = OLECMDF.OLECMDF_SUPPORTED;
                // validate parameters
                if (prgCmds == null || cCmds != 1) return VSConstants.E_INVALIDARG;
                // Process standard Commands
                switch (prgCmds[0].cmdID)
                {
                    case (uint)VSConstants.VSStd97CmdID.SelectAll:
                        {
                            // Always enabled
                            cmdf = OLECMDF.OLECMDF_SUPPORTED | OLECMDF.OLECMDF_ENABLED;
                            break;
                        }
                    case (uint)VSConstants.VSStd97CmdID.Copy:
                    case (uint)VSConstants.VSStd97CmdID.Cut:
                        {
                            // Enable if something is selected
                            if (viewModel.TextSelected) cmdf |= OLECMDF.OLECMDF_ENABLED;
                            break;
                        }
                    case (uint)VSConstants.VSStd97CmdID.Paste:
                        {
                            // Enable if clipboard has content we can paste

                            //   if (SQLEdit.SQLEdit.CanPaste(DataFormats.GetFormat(DataFormats.Text)))
                            {
                                cmdf |= OLECMDF.OLECMDF_ENABLED;
                            }
                            break;
                        }
                    case (uint)VSConstants.VSStd97CmdID.Redo:
                        {
                            // Enable if actions that have occurred within the RichTextBox 
                            // can be reapplied
                            if (viewModel.EditorIsRedoEnabled) cmdf |= OLECMDF.OLECMDF_ENABLED;
                            break;
                        }
                    case (uint)VSConstants.VSStd97CmdID.Undo:
                        {
                            if (viewModel.EditorIsUndoEnabled) cmdf |= OLECMDF.OLECMDF_ENABLED;
                            break;
                        }
                    default:
                        {
                            return (int)(Constants.OLECMDERR_E_NOTSUPPORTED);
                        }
                }
                prgCmds[0].cmdf = (uint)cmdf;
                return VSConstants.S_OK;
            }

in routines like viewModel.TextSelected I want to query the IWpfTextViewHost


best regards Stephan Hartmann ML-Software GmbH



Viewing all articles
Browse latest Browse all 4410

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>