Exemplo n.º 1
0
        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);
        }
Exemplo n.º 2
0
        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;
            //}
        }
Exemplo n.º 3
0
        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();
        }
Exemplo n.º 4
0
        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;
        }