public static O2DockContent addAscxControlToO2GuiWithDockPanelWithDockState(Type ascxControlToLoad,
                                                                                    DockState dockState,
                                                                                    String name, bool showControl)
        {
            if (DI.o2GuiWithDockPanel == null)
            {
                DI.log.error(" in addAscxControlToO2GuiWithDockPanelWithDockState o2GuiWithDockPanel was null, so aborting load of {0}", ascxControlToLoad.FullName);
                return(null);
            }
            var o2DocContent = new O2DockContent(ascxControlToLoad, dockState, name);

            // add it as soon as possible to this list (in case there is a request for it from another thread)
            O2DockUtils.addO2DockContentToDIGlobalVar(o2DocContent);

            if (showControl)
            {
                //add content to DockPanel (in a thread safe way)
                showO2DockContentInDockPanel(o2DocContent);


                // wait for control to be loaded
                if (false == DebugMsg.IsDebuggerAttached())
                {
                    o2DocContent.controlLoadedIntoGui.WaitOne();
                }
                else if (false == o2DocContent.controlLoadedIntoGui.WaitOne(10000))
                {
                    DI.log.error("Failed to load control {0} in 10 sec", o2DocContent.name);
                }
            }
            return(o2DocContent);
        }
        public static void launchO2DockContentAsStandAloneForm(Type typeOfControlToLoad, string controlName)
        {
            if (typeOfControlToLoad == null)
            {
                DI.log.error("in launchO2DockContentAsStandAloneForm typeOfControlToLoad was null");
            }
            else
            {
                try
                {
                    var sync = new AutoResetEvent(false);
                    O2Thread.staThread(() =>
                    {
                        try
                        {
                            DI.o2GuiStandAloneFormMode = true;
                            //var controlToLoad = (Control) Activator.CreateInstance(typeOfControlToLoad);
                            // if (typeOfControlToLoad != null)
                            // {
                            var o2DockContent = new O2DockContent(typeOfControlToLoad, DockState.Float, controlName);
                            o2DockContent.dockContent.HandleCreated += (sender, e) => sync.Set();
                            // as soons as the control HandleCreated is created, we can let this function (launchO2DockContentAsStandAloneForm end)
                            if (o2DockContent.createControlFromType())
                            {
                                o2DockContent.dockContent.Width  = o2DockContent.desiredWidth;
                                o2DockContent.dockContent.Height = o2DockContent.desiredHeight;
                                O2DockUtils.addO2DockContentToDIGlobalVar(o2DockContent);
                                o2DockContent.dockContent.Closed += (sender, e) =>
                                {
                                    if (DI.dO2LoadedO2DockContent.Count == 0)                                                                 // if there are no more controls trigger the end of the GUI session
                                    {
                                        O2AscxGUI.guiClosed.Set();
                                    }
                                };

                                o2DockContent.dockContent.ShowDialog();
                            }
                            else
                            {
                                DI.log.error(
                                    "in launchO2DockContentAsStandAloneForm, could not create instance of controlToLoad: {0}",
                                    typeOfControlToLoad.ToString());
                            }
                        }
                        catch (Exception ex)
                        {
                            DI.log.ex(ex, "in launchO2DockContentAsStandAloneForm");
                        }
                        sync.Set();
                    });
                    sync.WaitOne();
                }
                catch (Exception ex)
                {
                    DI.log.ex(ex);
                }
            }
        }
        public static Control loadControl(Type ascxControlToLoad, O2DockState dockState, String name)
        {
            var o2DockContent = addAscxControlToO2GuiWithDockPanelWithDockState(
                ascxControlToLoad, O2DockUtils.getDockStateFromO2DockState(dockState), name);

            if (o2DockContent != null)
            {
                return(o2DockContent.control);
            }

            return(null);
        }
 public static Control getAscx(string name, bool logErrorOnFail)
 {
     if (DI.dO2LoadedO2DockContent.ContainsKey(name))
     {
         var o2DockContent = O2DockUtils.getO2DockContent(name);
         o2DockContent.dockContent.invokeOnThread(() => o2DockContent.dockContent.Activate());
         return(o2DockContent.control);
     }
     if (logErrorOnFail)
     {
         DI.log.error("in O2DockUtils.getAscx, could not find registed Ascx: {0}", name);
     }
     return(null);
 }
        private static void addControlToO2GuiWithDockPanelSync(O2GuiWithDockPanel o2GuiWithDockPanel, O2DockContent controlToAdd, EventWaitHandle controlAdded)
        {
            //if (controlToAdd.dockContent != null && controlToAdd.dockContent.okThread(
            //    delegate { addControlToO2GuiWithDockPanelSync(controlToAdd, controlAdded); }))
            //{

            //var sync = new AutoResetEvent(false);

            // add the control on the o2GuiThread
            //DI.o2GuiWithDockPanel.Invoke(new EventHandler(delegate {
            try
            {
                if (controlToAdd.createControlFromType())
                {
                    controlToAdd.dockContent.Show(o2GuiWithDockPanel.getDockPanel(), controlToAdd.dockState);

                    if (controlToAdd.dockState == DockState.Float && controlToAdd.dockContent.TopLevelControl != null)
                    {
                        controlToAdd.dockContent.TopLevelControl.Width  = controlToAdd.desiredWidth;
                        controlToAdd.dockContent.TopLevelControl.Height = controlToAdd.desiredHeight;
                    }
                    if (controlToAdd.dockState == DockState.Document)
                    {
                        if (DI.o2GuiWithDockPanel.Width < controlToAdd.desiredWidth)
                        {
                            DI.o2GuiWithDockPanel.Width = controlToAdd.desiredWidth + 10;
                        }
                        if (DI.o2GuiWithDockPanel.Height < controlToAdd.desiredHeight + 100)
                        {
                            DI.o2GuiWithDockPanel.Height = controlToAdd.desiredHeight + 100;
                        }
                    }
                    O2DockUtils.addO2DockContentToDIGlobalVar(controlToAdd);
                }
            }
            catch (Exception ex)
            {
                DI.log.ex(ex, "in addControlToO2GuiWithDockPanelSync");
            }

            controlAdded.Set();
            //                                                 }));
            //}
            //controlAdded.WaitOne();
        }
Example #6
0
        private static void o2MessageQueue_onMessages(IO2Message o2Message)
        {
            try
            {
                if (o2Message is IM_GUIAction)
                {
                    var mGuiAction = (IM_GUIAction)o2Message;
                    DI.log.info("O2GuiWithDockPanel received IM_GUIAction of action: {0}", mGuiAction.GuiAction);
                    switch (mGuiAction.GuiAction)
                    {
                    case IM_GUIActions.isAscxGuiAvailable:
                        isAscxGuiAvailable();
                        break;

                    //   case (IM_GUIActions.openControlInGui): // don't handle these here
                    case IM_GUIActions.getGuiAscx:
                        if (mGuiAction.returnDataCallback != null)
                        {
                            mGuiAction.returnDataCallback(O2DockUtils.getAscx(mGuiAction.controlName));
                        }
                        break;

                    case IM_GUIActions.executeOnAscx:
                        if (mGuiAction.controlName == null || mGuiAction.targetMethod == null ||
                            mGuiAction.methodParameters == null)
                        {
                            DI.log.error(
                                "in O2Environment.O2MessagesHandler.o2MessageQueue_onMessages received a O2Message for IM_GUIActions.executeOnAscx, but either the targetMethod or methodParameters are null");
                        }
                        else
                        {
                            var ascxControlToExecute = O2AscxGUI.getAscx(mGuiAction.controlName);
                            if (ascxControlToExecute == null)
                            {
                                DI.log.error(
                                    "in O2MessagesHandler...IM_GUIActions.executeOnAscx, could not get control: {0}",
                                    mGuiAction.controlName);
                            }
                            else
                            {
                                o2Message.returnData = DI.reflection.invoke(ascxControlToExecute,
                                                                            mGuiAction.targetMethod,
                                                                            mGuiAction.methodParameters);
                            }
                        }
                        break;

                    case IM_GUIActions.closeAscxParent:
                        O2AscxGUI.closeAscxParent(mGuiAction.controlName);
                        break;

                    case IM_GUIActions.openControlInGui:                // this is a special case since we should only handle this if the main GUI is not loaded
                        if (false == O2AscxGUI.isGuiLoaded())           // this tends to happen on Unit tests where we only have one control loaded
                        {
                            // and if the Gui is not loaded open this control as a stand alone FORM
                            O2AscxGUI.openAscxAsForm(mGuiAction.controlType, mGuiAction.controlName);
                        }
                        break;
                    }
                }
            }
            catch (Exception ex)
            {
                DI.log.ex(ex, " in O2MessagesHandler.o2MessageQueue_onMessages");
            }
        }