protected virtual bool OnSave(string saveAsFileName) { //event { bool handled = false; bool result = false; SaveEvent?.Invoke(this, saveAsFileName, ref handled, ref result); if (handled) { return(result); } } //!!!!? if (LoadedResource != null && LoadedResource.ResultComponent != null && LoadedResource.Owner.LoadFromFile) { string realPathWithoutAddFileExtension; string realPath; if (!string.IsNullOrEmpty(saveAsFileName)) { realPathWithoutAddFileExtension = saveAsFileName; realPath = saveAsFileName; } else { realPathWithoutAddFileExtension = VirtualPathUtility.GetRealPathByVirtual(LoadedResource.Owner.Name); realPath = realPathWithoutAddFileExtension + LoadedResource.Owner.GetSaveAddFileExtension(); //string name = LoadedResource.Owner.Name + LoadedResource.Owner.GetSaveAddFileExtension(); //realPath = VirtualPathUtility.GetRealPathByVirtual( name ); } //!!!!new var formWorkspaceController = (WorkspaceControllerForForm)EditorForm.instance.WorkspaceController; UpdateEditorDocumentConfiguration(formWorkspaceController); string error; if (!ComponentUtility.SaveComponentToFile(LoadedResource.ResultComponent, realPath, null, out error)) { //!!!! Log.Error(error); return(false); } PreviewImagesManager.AddResourceToProcess(realPathWithoutAddFileExtension); return(true); } else { //!!!!! Log.Warning("impl"); } return(false); }
public void RenderViewports(out bool existActiveViewports) { existActiveViewports = false; //!!!! //!!!!каким-то не нужно часто обновляться if (Visible && WindowState != FormWindowState.Minimized) { //get available controls List <EngineViewportControl> toRender = new List <EngineViewportControl>(); List <EngineViewportControl> unvisible = new List <EngineViewportControl>(); foreach (var control in EngineViewportControl.AllInstances) { if (control.IsAllowRender()) { if (control.AutomaticUpdateFPS != 0) { toRender.Add(control); } } else { unvisible.Add(control); } } bool callFrame = false; //destroy render targets for unvisible controls foreach (var control in unvisible) { var context = control.Viewport?.RenderingContext; if (context != null) { if (context.DynamicTexturesAreExists()) { context.MultiRenderTarget_DestroyAll(); context.DynamicTexture_DestroyAll(); callFrame = true; } } } if (callFrame) { RenderingSystem.CallBgfxFrame(); RenderingSystem.CallBgfxFrame(); } //preview images if (EngineApp.Instance != null && EngineApp.Created) { PreviewImagesManager.Update(); if (PreviewImagesManager.ExistsWorkingProcessors()) { existActiveViewports = true; } } //render if (toRender.Count != 0) { existActiveViewports = true; foreach (var control in toRender) { control.TryRender(); } } } //bool allowRender = MainForm.Instance.Visible && // MainForm.Instance.WindowState != FormWindowState.Minimized && // MainForm.Instance.IsAllowRenderScene(); //internal bool IsAllowRenderScene() //{ // if( runMapProcess != null ) // return false; // if( !timer1.Enabled ) // return false; // Form activeForm = ActiveForm; // if( activeForm == null ) // return false; // string fullName = activeForm.GetType().FullName; // if( fullName == "System.Windows.Forms.PropertyGridInternal.PropertyGridView+DropDownHolder" ) // return true; // if( fullName == "WeifenLuo.WinFormsUI.Docking.FloatWindow" ) // return true; // //MapCompositorManager form // { // string helper = activeForm.Tag as string; // if( helper != null && helper == "MapCompositorManagerForm" ) // return true; // } // Form form = activeForm; // while( form != null ) // { // if( form == this ) // return true; // if( form.Modal ) // return false; // form = form.Owner; // } // return false; //} }
private void EditorForm_FormClosing(object sender, FormClosingEventArgs e) { if (ShowDialogAndSaveDocuments(workspaceController.GetDockWindows())) { e.Cancel = true; return; } //save docking state if (canSaveConfig) //if( !forceCloseForm ) { string configFile = VirtualPathUtility.GetRealPathByVirtual(dockingConfigFileName); EditorAPI.GetRestartApplication(out _, out var resetWindowsSettings); if (resetWindowsSettings) { if (File.Exists(configFile)) { File.Delete(configFile); } } else { if (!Directory.Exists(Path.GetDirectoryName(configFile))) { Directory.CreateDirectory(Path.GetDirectoryName(configFile)); } workspaceController.SaveLayoutToFile(configFile); // temp experimental: //foreach (var wnd in workspaceController.OfType<WorkspaceWindow>()) //{ // string configFileName = string.Format(workspaceConfigFileName, wnd.Name); // string workspaceConfigFile = VirtualPathUtils.GetRealPathByVirtual(configFileName); // var controller = wnd.WorkspaceController; // controller.SaveLayoutToFile(workspaceConfigFile); //} } //save part to Editor.config workspaceController.SaveAdditionalConfig(); } EditorAPI.ClosingApplication = true; EditorLocalization.Shutdown(); //destroy all documents { //!!!!может окна документов сначала удалить? foreach (var document in Documents.ToArray()) { document.Destroy(); } } //destroy all viewport controls foreach (var control in EngineViewportControl.AllInstances.ToArray()) { control.Dispose(); } PreviewImagesManager.Shutdown(); if (!canSaveConfig) { EngineApp.NeedSaveConfig = false; } EngineApp.Shutdown(); }
private void EditorForm_Load(object sender, EventArgs e) { if (WinFormsUtility.IsDesignerHosted(this)) { return; } //hide ribbon to avoid redrawing kryptonRibbon.Visible = false; // create cover coverControl = new Control(); coverControl.BackColor = Color.FromArgb(40, 40, 40); coverControl.Dock = DockStyle.Fill; Controls.Add(coverControl); coverControl.BringToFront(); Application.DoEvents(); ////dpi //try //{ // using( Graphics graphics = CreateGraphics() ) // { // dpi = graphics.DpiX; // } //} //catch( Exception ex ) //{ // dpi = 96; // Log.Warning( "EditorForm: CreateGraphics: Call failed. " + ex.Message ); //} kryptonRibbon.RibbonTabs.Clear(); { EngineApp.InitSettings.UseApplicationWindowHandle = Handle; if (!EngineApp.Create()) { Log.Fatal("EngineApp.Create() failed."); Close(); return; } //эксепшен не генегируется, просто падает //bool created = false; //if( Debugger.IsAttached ) // created = EngineApp.Create(); //else //{ // try // { // //!!!! // Log.Info( "dd" ); // created = EngineApp.Create(); // //!!!! // Log.Info( "tt" ); // } // catch( Exception e2 ) // { // //!!!! // Log.Info( "ee" ); // Log.FatalAsException( e2.ToString() ); // } //} //if( !created ) //{ // Log.Fatal( "EngineApp.Create() failed." ); // Close(); // return; //} } EngineApp.DefaultSoundChannelGroup.Volume = 0; EnableLocalization(); PreviewImagesManager.Init(); //set theme if (ProjectSettings.Get.Theme.Value == Component_ProjectSettings.ThemeEnum.Dark) { kryptonManager.GlobalPaletteMode = PaletteModeManager.NeoAxisBlack; } else { kryptonManager.GlobalPaletteMode = PaletteModeManager.NeoAxisBlue; } KryptonDarkThemeUtility.DarkTheme = EditorAPI.DarkTheme; if (EditorAPI.DarkTheme) { EditorAssemblyInterface.Instance.SetDarkTheme(); } Aga.Controls.Tree.NodeControls.BaseTextControl.DarkTheme = EditorAPI.DarkTheme; BackColor = EditorAPI.DarkTheme ? Color.FromArgb(40, 40, 40) : Color.FromArgb(240, 240, 240); //app button kryptonRibbon.RibbonAppButton.AppButtonText = EditorLocalization.Translate("AppButton", kryptonRibbon.RibbonAppButton.AppButtonText); if (DarkTheme) { kryptonRibbon.RibbonAppButton.AppButtonBaseColorDark = Color.FromArgb(40, 40, 40); kryptonRibbon.RibbonAppButton.AppButtonBaseColorLight = Color.FromArgb(54, 54, 54); } //!!!! default editor layout: // IsSystemWindow = true for this: // для этих "системных" окон используется отдельная логика сериализации (окна создаются до загрузки конфига) // и отдельная логика закрытия (hide/remove) workspaceController.AddToDockspaceStack(new DockWindow[] { new ObjectsWindow(), new SettingsWindow() }, DockingEdge.Right); //workspaceController.AddDockspace(new MembersWindow(), "Members", DockingEdge.Right, new Size(300, 300)); workspaceController.AddToDockspaceStack(new DockWindow[] { new ResourcesWindow(), new SolutionExplorer(), new PreviewWindow() }, DockingEdge.Left); workspaceController.AddToDockspace(new DockWindow[] { new MessageLogWindow(), new OutputWindow(), new DebugInfoWindow() }, DockingEdge.Bottom); Log.Info("Use Log.Info(), Log.Warning() methods to write to the window. These methods can be used in the Player. Press '~' to open console of the Player."); OutputWindow.Print("Use OutputWindow.Print() method to write to the window. Unlike Message Log window, this window is not a list. Here you can add text in arbitrary format.\n"); //!!!!эвент чтобы свои добавлять. и пример //load docking state { string configFile = VirtualPathUtility.GetRealPathByVirtual(dockingConfigFileName); //default settings if (!File.Exists(configFile)) { configFile = VirtualPathUtility.GetRealPathByVirtual(dockingConfigFileNameDefault); } if (File.Exists(configFile)) { //no try catch to save the ability to work with debugger. in case when error happens during loading one of documents //try //{ workspaceController.LoadLayoutFromFile(configFile); //!!!! //hack. unhide the page to load it correctly. after loading the page will hided foreach (var page in workspaceController.DockingManager.Pages) { if (page.needHideAfterLoading) { page.needHideAfterLoading = false; var window = page.GetDockWindow(); if (window != null) { workspaceController.SetDockWindowVisibility(window, false); } } } //} //catch( Exception e2 ) //{ // var text = $"Error loading docking settings.\n\n" + e2.Message; // Log.Warning( text ); // EditorMessageBox.ShowWarning( text ); //} } } InitQAT(); InitRibbon(); UpdateText(); //apply editor settings EditorSettingsSerialization.InitAfterFormLoad(); XmlDocumentationFiles.PreloadBaseAssemblies(); EditorAPI.SelectedDocumentWindowChanged += EditorAPI_SelectedDocumentWindowChanged; UpdateRecentProjectsInRegistry(); LoginUtility.RequestFullLicenseInfo(); kryptonRibbon.BeforeMinimizedModeChanged += KryptonRibbon_BeforeMinimizedModeChanged; kryptonRibbon.MinimizedModeChanged += KryptonRibbon_MinimizedModeChanged; KryptonWinFormsUtility.editorFormStartTemporaryLockUpdateAction = delegate() { if (IsHandleCreated && !EditorAPI.ClosingApplication) { KryptonWinFormsUtility.LockFormUpdate(this); unlockFormUpdateInTimer = DateTime.Now + TimeSpan.FromSeconds(0.1); } }; loaded = true; }