예제 #1
0
        public static WinForms.Panel    create_WinForms_Window(this string title, VSFRAMEMODE frameMode)
        {
            var visualStudio = new VisualStudio_2010();
            var _panel       = visualStudio.invokeOnThread(
                () =>
            {
                var type   = typeof(O2.FluentSharp.VisualStudio.WindowPane_WinForms);
                var window = (ToolWindowPane)visualStudio.package().invoke("CreateToolWindow", type, 64000.random());

                window.Caption             = title;
                IVsWindowFrame windowFrame = (IVsWindowFrame)window.Frame;
                //if(floating)
                //    windowFrame.SetProperty((int)__VSFPROPID.VSFPROPID_FrameMode, VSFRAMEMODE.VSFM_Float);
                windowFrame.SetProperty((int)__VSFPROPID.VSFPROPID_FrameMode, frameMode);
                windowFrame.Show();
                var content         = (Control_WinForms)window.Content;
                var windowsFormHost = (System.Windows.Forms.Integration.WindowsFormsHost)content.Content;
                var panel           = new WinForms.Panel();
                panel.backColor("Control");
                windowsFormHost.Child = panel;
                return(panel);
            });

            return(_panel);
        }
예제 #2
0
 // Hides the tool window, except when docked.
 public void HideToolWindow()
 {
     if (null != Frame)
     {
         IVsWindowFrame parentWindowFrame = (IVsWindowFrame)Frame;
         object         frameMode;
         parentWindowFrame.GetProperty((int)__VSFPROPID.VSFPROPID_FrameMode, out frameMode);
         VSFRAMEMODE frameModeEnum = (VSFRAMEMODE)frameMode;
         if (frameModeEnum == VSFRAMEMODE.VSFM_Float || frameModeEnum == VSFRAMEMODE.VSFM_FloatOnly)
         {
             parentWindowFrame.Hide();
         }
     }
 }
예제 #3
0
        private void HandlePossibleFrameModeChange()
        {
            object      frameModeObj;
            VSFRAMEMODE frameMode;

            if (VSConstants.S_OK == myFrame.GetProperty((int)__VSFPROPID.VSFPROPID_FrameMode, out frameModeObj) &&
                myLastFrameMode != (frameMode = (VSFRAMEMODE)frameModeObj))
            {
                myLastFrameMode = frameMode;
                FrameVisibilityFlags flags = myFrameVisibility;
                if ((flags & FrameVisibilityFlags.FrameVisibilityMask) == FrameVisibilityFlags.Covered &&
                    0 != (flags & FrameVisibilityFlags.HasBeenVisible))
                {
                    OnShow((int)__FRAMESHOW.FRAMESHOW_WinShown);
                }
            }
        }
예제 #4
0
        private static FrameMode FromVsframemode(VSFRAMEMODE frameMode)
        {
            switch (frameMode)
            {
            case VSFRAMEMODE.VSFM_Dock:
                return(FrameMode.Docked);

            case VSFRAMEMODE.VSFM_Float:
            case VSFRAMEMODE.VSFM_FloatOnly:
                return(FrameMode.Floating);

            case VSFRAMEMODE.VSFM_MdiChild:
                return(FrameMode.MdiChild);

            default:
                return(FrameMode.Unknown);
            }
        }
예제 #5
0
 /// <summary>
 /// Create a new <see cref="T:ToolWindowActivationHelper"/>
 /// </summary>
 /// <param name="unfilteredServiceProvider">An <see cref="IServiceProvider"/> that is not filtered by
 /// the containing toolwindow implementation.</param>
 /// <param name="frame">The <see cref="IVsWindowFrame"/> to provide notifications for</param>
 /// <param name="coveredFrameActions">The default <see cref="CoveredFrameContentActions"/></param>
 /// <param name="notifyCallback">Thee <see cref="T:INotifyToolWindowActivation"/> callback used to communicate
 /// with the consuming class</param>
 public ToolWindowActivationHelper(IServiceProvider unfilteredServiceProvider, IVsWindowFrame frame, CoveredFrameContentActions coveredFrameActions, INotifyToolWindowActivation <DocDataType, DocViewType, SelectionContainerType> notifyCallback)
 {
     if (unfilteredServiceProvider == null)
     {
         throw new ArgumentNullException("unfilteredServiceProvider");
     }
     if (frame == null)
     {
         throw new ArgumentNullException("frame");
     }
     if (notifyCallback == null)
     {
         throw new ArgumentNullException("notifyCallback");
     }
     myLastFrameMode           = (VSFRAMEMODE)(-1);
     myMonitorSelectionService = (IMonitorSelectionService)unfilteredServiceProvider.GetService(typeof(IMonitorSelectionService));
     myFrame = frame;
     myCoveredFrameActions = coveredFrameActions;
     myNotifyCallback      = notifyCallback;
     frame.SetProperty((int)__VSFPROPID.VSFPROPID_ViewHelper, this);
 }
예제 #6
0
        /// <summary>
        /// Implements <see cref="IVsWindowFrameNotify3.OnShow"/>
        /// </summary>
        protected int OnShow(int fShow)
        {
            FrameVisibilityFlags flags      = myFrameVisibility;
            FrameVisibilityFlags startFlags = flags & ~(FrameVisibilityFlags.FrameVisibilityMask | FrameVisibilityFlags.PersistentFlagsMask);

            myFrameVisibility &= FrameVisibilityFlags.FrameVisibilityMask | FrameVisibilityFlags.PersistentFlagsMask;
            switch ((__FRAMESHOW)fShow)
            {
            case (__FRAMESHOW)__FRAMESHOW2.FRAMESHOW_BeforeWinHidden:
                myFrameVisibility |= FrameVisibilityFlags.PendingHiddenMeansClosed;
                break;

            case __FRAMESHOW.FRAMESHOW_WinMinimized:
            case __FRAMESHOW.FRAMESHOW_TabDeactivated:
                // VS2010 is sending a BeforeWinHidden/TabDeactivated/Hidden, which results in a covered state
                // with a closed window. If closed is already pending, don't degrade to cover pending instead.
                myFrameVisibility |= 0 != (startFlags & FrameVisibilityFlags.PendingHiddenMeansClosed) ? FrameVisibilityFlags.PendingHiddenMeansClosed : FrameVisibilityFlags.PendingHiddenMeansCovered;
                break;

            case __FRAMESHOW.FRAMESHOW_DestroyMultInst:
            case __FRAMESHOW.FRAMESHOW_WinClosed:
                ClearContents();
                break;

            case __FRAMESHOW.FRAMESHOW_WinHidden:
                bool           cover = false;
                object         frameModeObj;
                VSFRAMEMODE    frameMode = (VSFRAMEMODE)(-1);
                IVsWindowFrame frame     = myFrame;
                if (frame != null &&
                    VSConstants.S_OK == frame.GetProperty((int)__VSFPROPID.VSFPROPID_FrameMode, out frameModeObj))
                {
                    // VS is changing the framemode during a hide request without telling us, always check and reset
                    // at this point so that a move on a hidden window does not reshow it.
                    myLastFrameMode = frameMode = (VSFRAMEMODE)frameModeObj;
                }
                if (0 != (startFlags & FrameVisibilityFlags.PendingHiddenMeansCovered))
                {
                    cover = true;
                }
                else if (0 == (startFlags & FrameVisibilityFlags.PendingHiddenMeansClosed))
                {
                    cover = frameMode == VSFRAMEMODE.VSFM_MdiChild;
                }
                if (cover)
                {
                    myFrameVisibility = FrameVisibilityFlags.Covered | (flags & FrameVisibilityFlags.PersistentFlagsMask);
                }
                else
                {
                    ClearContents();
                }
                break;

            case __FRAMESHOW.FRAMESHOW_AutoHideSlideBegin:
            case __FRAMESHOW.FRAMESHOW_WinMaximized:
            case __FRAMESHOW.FRAMESHOW_WinRestored:
            case __FRAMESHOW.FRAMESHOW_WinShown:
                ShowContents();
                break;
            }
            return(VSConstants.S_OK);
        }