Ejemplo n.º 1
0
        private async void CodeBoxRunButton_Click(object sender, RoutedEventArgs e)
        {
            Encoding encoding = Encoding.UTF8;

            if (File.Exists(m.CodeFile))
            {
                encoding = FileHelper.DetectTextEncoding(m.CodeFile);
            }

            using (StreamWriter writer = new StreamWriter(m.CodeFile, false, encoding))
            {
                writer.Write(m.CodeBox_Input);
                writer.Close();
            }

            if (Engine.WorkingLock == 0)  // Start Build
            {
                Interlocked.Increment(ref Engine.WorkingLock);

                Project project = m.CodeBox_CurrentProject;
                Script  p       = project.LoadScriptMonkeyPatch(m.CodeFile);

                Logger           logger    = null;
                SettingViewModel setting   = null;
                MainViewModel    mainModel = null;
                Application.Current.Dispatcher.Invoke(() =>
                {
                    MainWindow w = (Application.Current.MainWindow as MainWindow);
                    logger       = w.Logger;
                    setting      = w.Setting;
                    mainModel    = w.Model;
                });

                mainModel.SwitchNormalBuildInterface = false;
                mainModel.WorkInProgress             = true;

                EngineState s = new EngineState(p.Project, logger, mainModel, EngineMode.RunMainAndOne, p);
                s.SetOption(setting);

                Engine.WorkingEngine = new Engine(s);

                await Engine.WorkingEngine.Run($"CodeBox - {project.ProjectName}");

                mainModel.WorkInProgress             = false;
                mainModel.SwitchNormalBuildInterface = true;

                Application.Current.Dispatcher.Invoke(() =>
                {
                    MainWindow w = Application.Current.MainWindow as MainWindow;

                    w.DrawScript(w.CurMainTree.Script);

                    if (w.Setting.General_ShowLogAfterBuild && LogWindow.Count == 0)
                    { // Open BuildLogWindow
                        w.LogDialog = new LogWindow(1);
                        w.LogDialog.Show();
                    }
                });

                Engine.WorkingEngine = null;
                Interlocked.Decrement(ref Engine.WorkingLock);
            }
            else
            {
                MessageBox.Show("Engine is already running", "Build Error", MessageBoxButton.OK, MessageBoxImage.Error);
            }
        }
Ejemplo n.º 2
0
        private static async void RunOneSection(SectionAddress addr, string logMsg, bool hideProgress)
        {
            if (Engine.WorkingLock == 0)
            {
                Interlocked.Increment(ref Engine.WorkingLock);

                Logger           logger    = null;
                SettingViewModel setting   = null;
                MainViewModel    mainModel = null;

                Application.Current.Dispatcher.Invoke(() =>
                {
                    MainWindow w = Application.Current.MainWindow as MainWindow;

                    logger    = w.Logger;
                    mainModel = w.Model;
                    setting   = w.Setting;

                    // Populate BuildTree
                    if (!hideProgress)
                    {
                        w.Model.BuildTree.Children.Clear();
                        w.PopulateOneTreeView(addr.Script, w.Model.BuildTree, w.Model.BuildTree);
                        w.CurBuildTree = null;
                    }
                });

                mainModel.WorkInProgress = true;

                EngineState s = new EngineState(addr.Script.Project, logger, mainModel, EngineMode.RunMainAndOne, addr.Script, addr.Section.SectionName);
                s.SetOption(setting);
                s.DisableLogger = setting.Log_DisableInInterface;

                Engine.WorkingEngine = new Engine(s);

                // Build Start, Switch to Build View
                if (!hideProgress)
                {
                    mainModel.SwitchNormalBuildInterface = false;
                }

                // Run
                long buildId = await Engine.WorkingEngine.Run(logMsg);

                // Build Ended, Switch to Normal View
                if (!hideProgress)
                {
                    mainModel.SwitchNormalBuildInterface = true;
                }

                // Turn off ProgressRing
                mainModel.WorkInProgress = false;

                Engine.WorkingEngine = null;
                Interlocked.Decrement(ref Engine.WorkingLock);

                if (!hideProgress)
                {
                    Application.Current.Dispatcher.Invoke(() =>
                    {
                        MainWindow w = Application.Current.MainWindow as MainWindow;
                        w.DrawScript(w.CurMainTree.Script);
                    });
                }
            }
        }