コード例 #1
0
        static void LineDataFunc(Gtk.TreeViewColumn column, Gtk.CellRenderer cell, Gtk.TreeModel model, Gtk.TreeIter iter)
        {
            Gtk.CellRendererText textRenderer = (Gtk.CellRendererText)cell;
            TaskListEntry        task         = model.GetValue(iter, DataColumns.Task) as TaskListEntry;

            if (task == null)
            {
                textRenderer.Text = "";
                return;
            }
            SetText(textRenderer, model, iter, task, task.Line != 0 ? task.Line.ToString() : "");
        }
コード例 #2
0
        static void PathDataFunc(Gtk.TreeViewColumn column, Gtk.CellRenderer cell, Gtk.TreeModel model, Gtk.TreeIter iter)
        {
            Gtk.CellRendererText textRenderer = (Gtk.CellRendererText)cell;
            TaskListEntry        task         = model.GetValue(iter, DataColumns.Task) as TaskListEntry;

            if (task == null)
            {
                textRenderer.Text = "";
                return;
            }
            SetText(textRenderer, model, iter, task, GetPath(task));
        }
コード例 #3
0
        static void ToggleDataFunc(Gtk.TreeViewColumn column, Gtk.CellRenderer cell, Gtk.TreeModel model, Gtk.TreeIter iter)
        {
            Gtk.CellRendererToggle toggleRenderer = (Gtk.CellRendererToggle)cell;
            TaskListEntry          task           = model.GetValue(iter, DataColumns.Task) as TaskListEntry;

            if (task == null)
            {
                toggleRenderer.Visible = false;
                return;
            }
            toggleRenderer.Active = task.Completed;
        }
コード例 #4
0
        internal MessageBubbleTextMarker(MessageBubbleCache cache, TaskListEntry task, bool isError, string errorMessage)
        {
            if (cache == null)
            {
                throw new ArgumentNullException("cache");
            }
            this.cache   = cache;
            this.task    = task;
            this.isError = isError;
            AddError(task, isError, errorMessage);
//			cache.Changed += (sender, e) => CalculateLineFit (editor, lineSegment);
        }
コード例 #5
0
ファイル: ErrorListPad.cs プロジェクト: sim756/monodevelop
        public static string GetFile(this TaskListEntry task)
        {
            string tmpPath  = "";
            string fileName = "";

            try {
                tmpPath  = GetPath(task);
                fileName = Path.GetFileName(tmpPath);
            } catch (Exception) {
                fileName = tmpPath;
            }
            return(fileName);
        }
コード例 #6
0
        public void AddError(TaskListEntry task, bool isError, string errorMessage)
        {
            if (this.task == null)
            {
                this.task = task;
            }
            var match = mcsErrorFormat.Match(errorMessage);

            if (match.Success)
            {
                errorMessage = match.Groups [1].Value;
            }
            errors.Add(new ErrorText(task, isError, errorMessage));
            DisposeLayout();
        }
コード例 #7
0
ファイル: ErrorListPad.cs プロジェクト: sim756/monodevelop
        void AddTaskInternal(TaskListEntry t)
        {
            if (tasks.Contains(t))
            {
                return;
            }

            Xwt.Drawing.Image stock;

            switch (t.Severity)
            {
            case TaskSeverity.Error:
                stock = iconError;
                errorCount++;
                UpdateErrorsNum();
                break;

            case TaskSeverity.Warning:
                stock = iconWarning;
                warningCount++;
                UpdateWarningsNum();
                break;

            default:
                stock = iconInfo;
                infoCount++;
                UpdateMessagesNum();
                break;
            }

            tasks [t] = t;

            var indexOfNewLine = t.Description.IndexOfAny(new [] { '\n', '\r' });

            if (indexOfNewLine != -1)
            {
                var iter = store.AppendValues(stock, false, t, t.Description.Remove(indexOfNewLine));
                store.AppendValues(iter, iconEmpty, false, null, t.Description);
            }
            else
            {
                store.AppendValues(stock, false, t, t.Description);
            }

            UpdatePadIcon();
        }
コード例 #8
0
        bool GetSelectedErrorReference(out string reference)
        {
            TaskListEntry task = SelectedTask;

            if (task != null && !String.IsNullOrEmpty(task.HelpKeyword))
            {
                reference = task.HelpKeyword;
                return(true);
            }
            if (task != null && !String.IsNullOrEmpty(task.Code))
            {
                reference = task.Code;
                return(true);
            }
            reference = null;
            return(false);
        }
コード例 #9
0
        public static void AddTask(string fileName, string message, int column, int line, TaskSeverity taskType)
        {
            // HACK: Use a compiler error since we cannot add an error
            // task otherwise (task type property is read-only and
            // no constructors usable).
            BuildError error = new BuildError();

            error.Column    = column;
            error.Line      = line;
            error.ErrorText = message;
            error.FileName  = fileName;
            error.IsWarning = false;

            //Task task = new Task(fileName, message, column, line);
            TaskListEntry task = new TaskListEntry(error);

            TaskService.Errors.Add(task);
        }
コード例 #10
0
        void OnTaskCopied(object o, EventArgs args)
        {
            TaskListEntry task = SelectedTask;

            if (task != null)
            {
                StringBuilder text = new StringBuilder();
                if (!string.IsNullOrEmpty(task.FileName))
                {
                    text.Append(task.FileName);
                    if (task.Line >= 1)
                    {
                        text.Append("(").Append(task.Column);
                        if (task.Column >= 0)
                        {
                            text.Append(",").Append(task.Column);
                        }
                        text.Append(")");
                    }
                    text.Append(": ");
                }
                text.Append(task.Severity);
                if (!string.IsNullOrEmpty(task.Code))
                {
                    text.Append(" ").Append(task.Code);
                }
                text.Append(": ");
                text.Append(task.Description);
                if (task.WorkspaceObject != null)
                {
                    text.Append(" (").Append(task.WorkspaceObject.Name).Append(")");
                }

                if (!string.IsNullOrEmpty(task.Category))
                {
                    text.Append(" ").Append(task.Category);
                }

                clipboard      = Clipboard.Get(Gdk.Atom.Intern("CLIPBOARD", false));
                clipboard.Text = text.ToString();
                clipboard      = Clipboard.Get(Gdk.Atom.Intern("PRIMARY", false));
                clipboard.Text = text.ToString();
            }
        }
コード例 #11
0
ファイル: ErrorListPad.cs プロジェクト: sim756/monodevelop
        internal void SelectTaskListEntry(TaskListEntry taskListEntry)
        {
            TreeIter iter;

            if (!view.Model.GetIterFirst(out iter))
            {
                return;
            }
            do
            {
                var t = (TaskListEntry)view.Model.GetValue(iter, DataColumns.Task);
                if (t == taskListEntry)
                {
                    view.Selection.SelectIter(iter);
                    view.ScrollToCell(view.Model.GetPath(iter), view.Columns [0], false, 0, 0);
                    return;
                }
            } while (view.Model.IterNext(ref iter));
        }
コード例 #12
0
        void OnTaskJumpto(object o, EventArgs args)
        {
            TreeIter  iter, sortedIter;
            TreeModel model;

            if (view.Selection.GetSelected(out model, out sortedIter))
            {
                iter = filter.ConvertIterToChildIter(sort.ConvertIterToChildIter(sortedIter));
                store.SetValue(iter, DataColumns.Read, true);
                TaskListEntry task = store.GetValue(iter, DataColumns.Task) as TaskListEntry;
                if (task != null)
                {
                    TaskService.ShowStatus(task);
                    task.JumpToPosition();
                    TaskService.Errors.CurrentLocationTask = task;
                    IdeApp.Workbench.ActiveLocationList    = TaskService.Errors;
                }
            }
        }
コード例 #13
0
        /// <summary>
        /// Добавляет задачу <paramref name="aTask"/> в очередь задач на выполнение.
        /// </summary>
        /// <param name="aTask">
        /// Задача, добавляемая в очередь задач на выполнение.
        /// </param>
        /// <param name="aTaskPriority">
        /// Приоритет задачи.
        /// </param>
        private void EnqueueTask(Task aTask, TaskPriority aTaskPriority)
        {
            TaskListEntry lEntry = new TaskListEntry(aTask, aTaskPriority);

            LogPriority(aTaskPriority, ConsoleColor.Green);
            lock (mQueuedTasksLock)
            {
                // Добавить задачу в очередь задач на выполнение.
                mQueuedTasks.Add(lEntry);
                LogMessage(
                    string.Format(
                        "В очередь добавлена задача с приоритетом {0}", lEntry.TaskPriority),
                    ConsoleColor.Green);
                // Поднять барьер доступа к очереди задач.
                LogMessage("Поднять барьер доступа к очереди задач.", ConsoleColor.DarkRed);
            }
            lock (mTaskSchedulerLock)
            {
                // Сигнализировать об изменении в условии блокировки по mTaskSchedulerLock.
                Monitor.Pulse(mTaskSchedulerLock);
            }
        }
コード例 #14
0
ファイル: ErrorListPad.cs プロジェクト: sim756/monodevelop
        bool FilterTasks(TreeModel model, TreeIter iter)
        {
            bool canShow = false;

            try {
                TaskListEntry task = store.GetValue(iter, DataColumns.Task) as TaskListEntry;
                if (task == null)
                {
                    return(true);
                }
                if (task.Severity == TaskSeverity.Error && errorBtn.Active)
                {
                    canShow = true;
                }
                else if (task.Severity == TaskSeverity.Warning && warnBtn.Active)
                {
                    canShow = true;
                }
                else if (task.Severity == TaskSeverity.Information && msgBtn.Active)
                {
                    canShow = true;
                }

                if (canShow && !string.IsNullOrWhiteSpace(currentSearchPattern))
                {
                    canShow = (task.Description != null && task.Description.IndexOf(currentSearchPattern, StringComparison.OrdinalIgnoreCase) != -1) ||
                              (task.Code != null && task.Code.IndexOf(currentSearchPattern, StringComparison.OrdinalIgnoreCase) != -1) ||
                              (task.FileName != null && task.FileName.FileName.IndexOf(currentSearchPattern, StringComparison.OrdinalIgnoreCase) != -1) ||
                              (task.WorkspaceObject != null && task.WorkspaceObject.Name != null && task.WorkspaceObject.Name.IndexOf(currentSearchPattern, StringComparison.OrdinalIgnoreCase) != -1) ||
                              (task.Category != null && task.Category.IndexOf(currentSearchPattern, StringComparison.OrdinalIgnoreCase) != -1);
                }
            } catch {
                //Not yet fully added
                return(false);
            }

            return(canShow);
        }
コード例 #15
0
        static void FileDataFunc(Gtk.TreeViewColumn column, Gtk.CellRenderer cell, Gtk.TreeModel model, Gtk.TreeIter iter)
        {
            Gtk.CellRendererText textRenderer = (Gtk.CellRendererText)cell;
            TaskListEntry        task         = model.GetValue(iter, DataColumns.Task) as TaskListEntry;

            if (task == null)
            {
                textRenderer.Text = "";
                return;
            }

            string tmpPath  = "";
            string fileName = "";

            try {
                tmpPath  = GetPath(task);
                fileName = Path.GetFileName(tmpPath);
            } catch (Exception) {
                fileName = tmpPath;
            }

            SetText(textRenderer, model, iter, task, fileName);
        }
コード例 #16
0
ファイル: ErrorListPad.cs プロジェクト: sim756/monodevelop
        bool GetSelectedErrorReference(out string reference)
        {
            string        webRequest = "http://google.com/search?q=";
            TaskListEntry task       = SelectedTask;

            if (task != null && task.HasDocumentationLink())
            {
                reference = task.DocumentationLink;
                return(true);
            }
            if (task != null && !string.IsNullOrEmpty(task.HelpKeyword))
            {
                reference = webRequest + System.Web.HttpUtility.UrlEncode(task.HelpKeyword);
                return(true);
            }
            if (task != null && !string.IsNullOrEmpty(task.Code))
            {
                reference = webRequest + System.Web.HttpUtility.UrlEncode(task.Code);
                return(true);
            }
            reference = null;
            return(false);
        }
コード例 #17
0
        async Task OnGoToLog(object o, EventArgs args)
        {
            var rows = view.Selection.GetSelectedRows();

            if (!rows.Any())
            {
                return;
            }

            TreeIter iter, sortedIter;

            if (view.Model.GetIter(out sortedIter, rows [0]))
            {
                iter = filter.ConvertIterToChildIter(sort.ConvertIterToChildIter(sortedIter));

                store.SetValue(iter, DataColumns.Read, true);

                TaskListEntry task = store.GetValue(iter, DataColumns.Task) as TaskListEntry;
                if (task != null)
                {
                    await OpenBuildOutputViewDocument();

                    if (task.Severity == TaskSeverity.Error)
                    {
                        await buildOutputViewContent.GoToError(task.Message, task.GetProjectWithExtension());
                    }
                    else if (task.Severity == TaskSeverity.Warning)
                    {
                        await buildOutputViewContent.GoToWarning(task.Message, task.GetProjectWithExtension());
                    }
                    else if (task.Severity == TaskSeverity.Information)
                    {
                        await buildOutputViewContent.GoToMessage(task.Message, task.GetProjectWithExtension());
                    }
                }
            }
        }
コード例 #18
0
        public void SetPrimaryError(TaskListEntry task)
        {
            this.primaryTask = task;
            var text = task.Description;

            EnsureLayoutCreated(editor);

            var match = mcsErrorFormat.Match(text);

            if (match.Success)
            {
                text = match.Groups[1].Value;
            }
            int idx = -1;

            for (int i = 0; i < errors.Count; i++)
            {
                if (errors[i].ErrorMessage == text)
                {
                    idx = i;
                    break;
                }
            }
            if (idx <= 0)
            {
                return;
            }
            var tmp = errors[idx];

            errors.RemoveAt(idx);
            errors.Insert(0, tmp);
            var tmplayout = layouts[idx];

            layouts.RemoveAt(idx);
            layouts.Insert(0, tmplayout);
        }
コード例 #19
0
    /// <summary>
    /// This should be called every frame to update all of the AI tasks.
    /// </summary>
    public void updateAi()
    {
        int startIndex = 0;

        for (int k = 0; k < this.tasks.Count; k++)
        {
            TaskListEntry entry = this.tasks[k];
            ITask         task  = entry.task;

            if (entry.isRunning() && !task.canBeInterupted())
            {
                startIndex = k;
                break;
            }
        }

        for (int i = startIndex; i < this.tasks.Count; i++)
        {
            TaskListEntry entry = this.tasks[i];
            ITask         task  = entry.task;

            if (entry.isRunning())
            {
                // Task is running

                // Check is the task should continue executing
                if (task.continueExecuting())
                {
                    // Tasks should continue.

                    if (!task.allowLowerPriority())
                    {
                        // Don't let tasks with a lower priority run
                        break;
                    }
                }
                else
                {
                    // For whatever reason the task no longer wants to run, stop it
                    entry.stopRunning();
                }
            }
            else
            {
                // Task is not running
                if (task.shouldExecute())
                {
                    // If the task being looked at doesn't allow
                    // lower priority, stop all others.
                    if (!task.allowLowerPriority())
                    {
                        for (int j = i + 1; j < this.tasks.Count; j++)
                        {
                            this.tasks[j].stopRunning();
                        }
                    }

                    entry.startRunning();

                    if (!task.allowLowerPriority())
                    {
                        break;
                    }
                }
            }
        }

        foreach (TaskListEntry entry in this.tasks)
        {
            if (entry.isRunning())
            {
                entry.task.preform();
            }
        }
    }
コード例 #20
0
ファイル: ErrorListPad.cs プロジェクト: sim756/monodevelop
 public void AddTask(TaskListEntry t)
 {
     AddTaskInternal(t);
     filter.Refilter();
 }
コード例 #21
0
    private void BuildTaskPage()
    {
        //first remove all existing task entries
        foreach (TaskListEntry entry in _taskList)
        {
            GameObject.Destroy(entry.Checkmark.gameObject);
            GameObject.Destroy(entry.Circle.gameObject);
            GameObject.Destroy(entry.TaskText.gameObject);
        }

        _taskList.Clear();
        float y = 0;

        for (int i = 0; i < GameManager.Inst.PlayerProgress.IncompleteTasks.Count; i++)
        {
            int id = GameManager.Inst.PlayerProgress.IncompleteTasks[i];

            GameObject    o     = GameObject.Instantiate(Resources.Load("TaskListEntry")) as GameObject;
            TaskListEntry entry = o.GetComponent <TaskListEntry>();
            entry.Checkmark.alpha  = 0;
            entry.Circle.alpha     = 1;
            entry.transform.parent = TaskListAnchor.transform;

            entry.TaskText.MakePixelPerfect();
            //entry.Checkmark.MakePixelPerfect();
            //entry.Circle.MakePixelPerfect();
            entry.TaskText.text           = GameManager.Inst.DBManager.DBHandlerStoryEvent.LoadTask(id);
            entry.transform.localPosition = new Vector3(0, y, 0);

            _taskList.Add(entry);

            y -= entry.TaskText.height + 15;
        }

        y -= 10;

        for (int i = GameManager.Inst.PlayerProgress.CompletedTasks.Count - 1; i >= 0; i--)
        {
            int id = GameManager.Inst.PlayerProgress.CompletedTasks[i];

            GameObject    o     = GameObject.Instantiate(Resources.Load("TaskListEntry")) as GameObject;
            TaskListEntry entry = o.GetComponent <TaskListEntry>();
            entry.Checkmark.alpha  = 1;
            entry.Circle.alpha     = 0;
            entry.transform.parent = TaskListAnchor.transform;

            entry.TaskText.MakePixelPerfect();
            entry.TaskText.color = new Color(0.5f, 0.5f, 0.5f);
            //entry.Checkmark.MakePixelPerfect();
            //entry.Circle.MakePixelPerfect();
            entry.TaskText.text           = GameManager.Inst.DBManager.DBHandlerStoryEvent.LoadTask(id);
            entry.transform.localPosition = new Vector3(0, y, 0);
            _taskList.Add(entry);

            y -= entry.TaskText.height + 15;

            if (y < -675)
            {
                break;
            }
        }
    }
コード例 #22
0
ファイル: ErrorListPad.cs プロジェクト: sim756/monodevelop
 static void SetText(CellRendererText textRenderer, TreeModel model, TreeIter iter, TaskListEntry task, string text)
 {
     textRenderer.Text          = text;
     textRenderer.Weight        = (int)((bool)model.GetValue(iter, DataColumns.Read) ? Pango.Weight.Normal : Pango.Weight.Bold);
     textRenderer.Strikethrough = task.Completed;
 }
コード例 #23
0
 /// <summary>
 /// Добавляет задачу <paramref name="aTask"/> в очередь задач на выполнение.
 /// </summary>
 /// <param name="aTask">
 /// Задача, добавляемая в очередь задач на выполнение.
 /// </param>
 /// <param name="aTaskPriority">
 /// Приоритет задачи.
 /// </param>
 private void EnqueueTask(Task aTask, TaskPriority aTaskPriority)
 {
     TaskListEntry lEntry = new TaskListEntry(aTask, aTaskPriority);
     LogPriority(aTaskPriority, ConsoleColor.Green);
     lock (mQueuedTasksLock)
     {
         // Добавить задачу в очередь задач на выполнение.
         mQueuedTasks.Add(lEntry);
         LogMessage(
             string.Format(
                 "В очередь добавлена задача с приоритетом {0}", lEntry.TaskPriority),
             ConsoleColor.Green);
         // Поднять барьер доступа к очереди задач.
         LogMessage("Поднять барьер доступа к очереди задач.", ConsoleColor.DarkRed);
     }
     lock (mTaskSchedulerLock)
     {
         // Сигнализировать об изменении в условии блокировки по mTaskSchedulerLock.
         Monitor.Pulse(mTaskSchedulerLock);
     }
 }
コード例 #24
0
 public ErrorText(TaskListEntry task, bool isError, string errorMessage)
 {
     this.Task         = task;
     this.IsError      = isError;
     this.ErrorMessage = errorMessage;
 }
コード例 #25
0
        /// <summary>
        /// Логика работы планировщика выполнения задач. Выполняется в отдельном потоке.
        /// </summary>
        private void TaskSchedulerLogic()
        {
            lock (mTaskSchedulerLock)
            {
                while (true)
                {
                    // Отпускаем монитор и ждём сигнала, поданного через mTaskSchedulerLock.
#warning Добавить Monitor.Pulse(mTaskSchedulerLock) в случае окончания выполнения всех задач
                    Monitor.Wait(mTaskSchedulerLock);
                    lock (mQueuedTasksLock)
                    {
                        lock (mIsStoppedLock)
                        {
                            lock (mRunningTasksLock)
                            {
                                if (IsStopped &&
                                    !mRunningTasks.Any() &&
                                    !mQueuedTasks.Any())
                                {
                                    LogMessage(
                                        "Запрошена остановка пула и больше нет задач в очереди на выполнение.");
                                    LogMessage("Планировщик - Выход из потока планировщика.");
                                    // Сигнализировать об окончании выполнения последней задачи.
                                    mPoolStoppedGate.Set();
                                    LogMessage("Завершение работы программы.");
                                    return;
                                }
                            }
                        }
                    }

                    lock (mQueuedTasksLock)
                    {
                        if (!mQueuedTasks.Any())
                        {
                            // Очередь задач пуста.
                            // Продолжить ожидание.
                            continue;
                        }
                    }

                    lock (mRunningTasksLock)
                    {
                        if (mRunningTasks.Count >= mConcurrentTaskNumber)
                        {
                            // Список выполняемых задач полон.
                            // Продолжить ожидание.
                            continue;
                        }
                    }

                    LogMessage(
                        "Дождались появления задачи в очереди задач.",
                        ConsoleColor.DarkRed);
                    // Дождаться и получить следующую задачу для выполнения.
                    TaskListEntry lTask = DequeueTask();
                    LogMessage("Планировщик - Получена новая задача для выполнения.");
                    // Подписаться на событие завершения выполнения задачи.
                    lTask.Task.Finished += OnTaskFinished;
                    // Добавить задачу в список выполняемых задач.
                    lock (mRunningTasksLock)
                    {
                        mRunningTasks.Add(lTask);
                    }
                    if (lTask.TaskPriority == TaskPriority.High)
                    {
                        // Запущена задача с высоким приоритетом.
                        // Увеличить значение счётчика запущенных задач с высоким приоритетом на единицу.
                        Interlocked.Increment(ref mQueuedHighPriorityTaskCounter);
                    }
                    else if (lTask.TaskPriority == TaskPriority.Normal)
                    {
                        // Запущена задача с обычным приоритетом.
                        // Уменьшить значение счётчика запущенных задач с высоким приоритетом на HighPriorityTaskFactor.
                        Interlocked.Add(
                            ref mQueuedHighPriorityTaskCounter, -HighPriorityTaskFactor);
                    }

                    // Запустить задачу на выполнение.
                    lTask.Task.Execute();
                    LogMessage(
                        string.Format(
                            "Планировщик - Запущена задача с приоритетом {0}.",
                            lTask.TaskPriority),
                        ConsoleColor.DarkYellow);

                    lock (mRunningTasksLock)
                    {
                        LogMessage(
                            string.Format(
                                "В списке выполняющихся задач {0} задач.",
                                mRunningTasks.Count));
                    }
                }
            }
        }
コード例 #26
0
 void MonoDevelop.Ide.Editor.IMessageBubbleLineMarker.AddTask(TaskListEntry task)
 {
     AddError(task, task.Severity == TaskSeverity.Error, task.Description);
 }
コード例 #27
0
ファイル: ErrorListPad.cs プロジェクト: sim756/monodevelop
 public static string GetProjectWithExtension(this TaskListEntry task)
 {
     return((task != null && task.WorkspaceObject is SolutionItem) ? Path.GetFileName(((SolutionItem)task.WorkspaceObject).FileName) : string.Empty);
 }
コード例 #28
0
ファイル: ErrorListPad.cs プロジェクト: sim756/monodevelop
 public static string GetProject(this TaskListEntry task)
 {
     return((task != null && task.WorkspaceObject is SolutionFolderItem) ? task.WorkspaceObject.Name : string.Empty);
 }