public static O2DockContent addAscxControlToO2GuiWithDockPanelWithDockState(Type ascxControlToLoad, DockState dockState, String name, bool showControl) { if (O2AscxGUI.o2GuiWithDockPanel == null) { PublicDI.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)) { PublicDI.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) { PublicDI.log.error("in launchO2DockContentAsStandAloneForm typeOfControlToLoad was null"); } else { try { var sync = new AutoResetEvent(false); O2Thread.staThread(() => { try { O2AscxGUI.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 (O2AscxGUI.dO2LoadedO2DockContent.Count == 0) // if there are no more controls trigger the end of the GUI session { O2AscxGUI.guiClosed.Set(); } }; o2DockContent.dockContent.ShowDialog(); } else { PublicDI.log.error( "in launchO2DockContentAsStandAloneForm, could not create instance of controlToLoad: {0}", typeOfControlToLoad.ToString()); } } catch (Exception ex) { PublicDI.log.ex(ex, "in launchO2DockContentAsStandAloneForm"); } sync.Set(); }); sync.WaitOne(); } catch (Exception ex) { PublicDI.log.ex(ex); } } }
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 //O2AscxGUI.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 (O2AscxGUI.o2GuiWithDockPanel.Width < controlToAdd.desiredWidth) { O2AscxGUI.o2GuiWithDockPanel.Width = controlToAdd.desiredWidth + 10; } if (O2AscxGUI.o2GuiWithDockPanel.Height < controlToAdd.desiredHeight + 100) { O2AscxGUI.o2GuiWithDockPanel.Height = controlToAdd.desiredHeight + 100; } } O2DockUtils.addO2DockContentToDIGlobalVar(controlToAdd); } } catch (Exception ex) { PublicDI.log.ex(ex, "in addControlToO2GuiWithDockPanelSync"); } controlAdded.Set(); // })); //} //controlAdded.WaitOne(); }