Example #1
0
        public MainForm(string[] CmdLineArgs)
        {
            InitializeComponent();

            Panel1.Dock = DockStyle.Fill;
            Panel2.Dock = DockStyle.Fill;

            m_CmdLineArgs = CmdLineArgs;
            m_Font = ScriptTextbox.Font;

            Globals.prepare_application_data_dir();
            LoadConfig();

            // New, empty document
            m_Document = new Document(ScriptTextbox, ListView1);
            ApplyDocumentNameToGui();

            m_CompilationData = null;
            m_State = State.ScriptTab;
            SetState(State.ScriptTab);
        }
Example #2
0
        // Timer tick during compilation process
        private void CompilationTimer_Tick(object sender, EventArgs e)
        {
            if (m_CompilationData == null) return; // !!!

            // Show progress
            int ItemCount = m_CompilationData.GetItemCount();
            int DoneCount = m_CompilationData.GetProgress();

            MainStatusStrip.Items[1].Text = string.Format("{0}/{1}", DoneCount, ItemCount);
            ((ToolStripProgressBar)MainStatusStrip.Items[2]).Value = DoneCount;

            bool UpdateBegun = false;

            // New finished tasks
            int[] FinishedIndices = m_CompilationData.LoadFinishedIndices();
            if (FinishedIndices.Length > 0)
            {
                UpdateBegun = true;
                ListView1.BeginUpdate();
            }
            foreach (int FinishedIndex in FinishedIndices)
            {
                string Output, s1, s2; bool Succeeded; int NumErrors, NumWarnings, ListViewItemIndex;
                m_CompilationData.GetTaskOutput(FinishedIndex, out ListViewItemIndex, out Output, out Succeeded, out NumErrors, out NumWarnings);

                if (Succeeded)
                    s1 = "Succeeded";
                else
                    s1 = "Failed";

                if (NumErrors > 0 && NumWarnings > 0)
                    s2 = string.Format(" ({0} errors, {1} warnings)", NumErrors, NumWarnings);
                else if (NumErrors > 0)
                    s2 = string.Format(" ({0} errors)", NumErrors);
                else if (NumWarnings > 0)
                    s2 = string.Format(" ({0} warnings)", NumWarnings);
                else
                    s2 = "";

                ListView1.Items[ListViewItemIndex].SubItems[2].Text = s1;
                ListView1.Items[ListViewItemIndex].SubItems[3].Text = s1 + s2;
                Task t = (Task)(ListView1.Items[ListViewItemIndex].Tag);
                t.Output = Output;

                // Update output textbox if this item is selected
                if (ListView1.Items[ListViewItemIndex].Selected && ListView1.SelectedItems.Count == 1)
                    OutputTextBox.Text = Output;
            }

            // Work done
            if (m_CompilationData.IsAllDone())
            {
                SetState(State.BuildTab);

                int[] UnfinishedTaskIndices = m_CompilationData.GetUnfinishedIndices();
                if (UnfinishedTaskIndices.Length > 0 && !UpdateBegun)
                {
                    UpdateBegun = true;
                    ListView1.BeginUpdate();
                }
                foreach (int UnfinishedIndex in UnfinishedTaskIndices)
                    ListView1.Items[m_CompilationData.GetTaskListViewIndex(UnfinishedIndex)].SubItems[2].Text = "Aborted";

                if (m_CompilationData.IsAborting())
                    MainStatusStrip.Items[0].Text = "Compilation aborted.";
                else
                {
                    int Succeeded, Failed;
                    m_CompilationData.GetStats(out Succeeded, out Failed);
                    MainStatusStrip.Items[0].Text = string.Format("Build: {0} succeeded, {1} failed, {2} up-to-date", Succeeded, Failed, m_UpToDateTaskCount);
                }

                if (!m_CompilationData.IsAborting())
                    UpdateTaskFileTime();

                m_CompilationData = null;
            }

            if (UpdateBegun)
                ListView1.EndUpdate();
        }
Example #3
0
        // Begin build process
        private void Build(WhatToBuild What, bool Rebuild)
        {
            if (m_State != State.BuildTab) return;
            string FxcPath;
            if (!EnsureFxcPath(out FxcPath)) return;
            if (!EnsureDocumentHasFileName()) return;

            m_CompilationData = new CompilationData(FxcPath, m_Document.GetFileDirectory());
            m_UpToDateTaskCount = 0;

            ListView1.BeginUpdate();
            foreach (ListViewItem Item in ListView1.Items)
            {
                if (What == WhatToBuild.All ||
                    (What == WhatToBuild.Selected && Item.Selected) ||
                    (What == WhatToBuild.Checked && Item.Checked))
                {
                    Task t = (Task)Item.Tag;
                    if (Rebuild || TaskShouldBeBuilt(t))
                    {
                        Item.SubItems[2].Text = "Compiling...";
                        m_CompilationData.AddItem(new CompilationDataItem(t.Parameters, Item.Index));
                    }
                    else if (!Rebuild)
                    {
                        Item.SubItems[2].Text = "Up-To-Date";
                        m_UpToDateTaskCount++;
                    }
                }
                else
                    Item.SubItems[2].Text = "";
            }
            ListView1.EndUpdate();

            if (m_CompilationData.GetItemCount() > 0)
            {
                int NumThreads = Math.Min(m_NumCompilationThreads, m_CompilationData.GetItemCount());
                m_CompilationData.SetThreadCount(NumThreads);

                for (int i = 0; i < NumThreads; i++)
                {
                    Thread th = new Thread(new ParameterizedThreadStart(CompilationThreadProc));
                    th.Start(m_CompilationData);
                }

                SetState(State.Compilation);
                MainStatusStrip.Items[0].Text = "Compilation in progres...";

                MainStatusStrip.Items[1].Text = string.Format("0/{0}", m_CompilationData.GetItemCount());
                ((ToolStripProgressBar)MainStatusStrip.Items[2]).Maximum = m_CompilationData.GetItemCount();
                ((ToolStripProgressBar)MainStatusStrip.Items[2]).Value = 0;
                MainStatusStrip.Items[2].Visible = true;

                // Yield to start threads
                Thread.Sleep(0);
            }
            else
                MainStatusStrip.Items[0].Text = "Nothing to build.";
        }