Example #1
0
        void TaskPanel_MouseMove(object sender, MouseEventArgs e)
        {
            int taskIndex        = -1;
            IRuntimeActivity act = GetActivityAtPosition(e.X, e.Y, out taskIndex);

            if (act != null)
            {
                if (!act.Equals(lastActivity))
                {
                    string res = "";
                    foreach (string key in act.Reservations.Keys)
                    {
                        for (int i = 0; i < act.Reservations[key].Length; i++)
                        {
                            res += "    " + key + "(" + (act.Reservations[key][i]) + ")\n";
                        }
                    }
                    if (res.Length == 0)
                    {
                        res = "no resource used";
                    }
                    string str = string.Format("Activity: {0}\nStatus: {6}\n Duration: {1}\n Ellapse: {2} / Remaining: {3}\n Resource:\n{4}Task: {5}",
                                               act.Name, formatTimeScaleText(act.Duration), FormatTime(act.PlannedStart),
                                               FormatTime(act.PlannedStart + act.PlannedDuration), res, tasks[taskIndex].Name, act.Status);
                    tooltip.SetToolTip(TaskPanel, str);
                    lastActivity = act;
                }
            }
            else
            {
                tooltip.SetToolTip(TaskPanel, null);
                lastActivity = null;
            }
        }
Example #2
0
        void ResourcePanel_MouseMove(object sender, MouseEventArgs e)
        {
            int              unit      = -1;
            string           name      = null;
            int              taskIndex = -1;
            IRuntimeActivity res       = GetResourceActivityAtPosition(e.X, e.Y, out name, out unit, out taskIndex);

            if (res != null)
            {
                if (!res.Equals(lastResourceActivity))
                {
                    string t = string.Format("Resource {0}({1})\n Duration: {2}\n Ellapse: {3} / Remainning: {4}\nActivity: {5}\nTask: {6}",
                                             name, unit, formatTimeScaleText(res.Duration), FormatTime(res.PlannedStart), FormatTime(res.PlannedStart + res.PlannedDuration), res.Name, tasks[taskIndex].Name);
                    lastResourceActivity = res;
                    tooltip.SetToolTip(ResourcePanel, t);
                }
            }
            else
            {
                lastResourceActivity = null;
                tooltip.SetToolTip(ResourcePanel, null);
            }
        }
Example #3
0
        void PaintTaskPanel(object sender, PaintEventArgs e)
        {
            if (scheduler == null)
            {
                return;
            }
            if (tasks == null || resources == null)
            {
                return;
            }
            scheduler.Lock();
            try
            {
                Graphics g = e.Graphics;
                Dictionary <int, IRuntimeTask> id2task = new Dictionary <int, IRuntimeTask>();

                foreach (IRuntimeTask t in tasks)
                {
                    id2task[t.ID] = t;
                }

                for (int i = 0; i < tasks.Length; i++)
                {
                    if (!IsTaskOK(tasks[i]))
                    {
                        continue;
                    }
                    int start = 0;
                    if (i % 2 == 1)
                    {
                        g.FillRectangle(backBrush, new RectangleF(e.ClipRectangle.X, TimeRowHeight + i * RowHeight, e.ClipRectangle.Width, RowHeight));
                    }
                    for (int j = 0; j < tasks[i].Activities.Length; j++)
                    {
                        IRuntimeActivity activity = tasks[i].Activities[j];
                        //draw activity duration
                        //if (j > 0 && tasks[i].Activities[j - 1].Status != Status.Cancelled)
                        {
                            g.FillRectangle(new SolidBrush(activity.Color),
                                            new RectangleF(start + activity.PlannedStart * ScaleFactor, TimeRowHeight + i * RowHeight, activity.PlannedDuration * ScaleFactor, RowHeight - 1));
                            if (activity.Status == Status.Cancelled)
                            {
                                g.FillRectangle(new SolidBrush(Color.FromArgb(120, Color.Black)),
                                                new RectangleF(start + activity.PlannedStart * ScaleFactor, TimeRowHeight + i * RowHeight, activity.PlannedDuration * ScaleFactor, RowHeight - 1));
                            }
                            if (activity.PlannedDuration * ScaleFactor >= 2)
                            {
                                g.DrawString(activity.Name, SystemFonts.DefaultFont, Brushes.Black,
                                             new RectangleF(start + activity.PlannedStart * ScaleFactor, TimeRowHeight + i * RowHeight, activity.PlannedDuration * ScaleFactor, RowHeight - 1));
                            }
                        }
                    }
                }
                //draw relation
                for (int i = 0; i < tasks.Length; i++)
                {
                    if (!IsTaskOK(tasks[i]))
                    {
                        continue;
                    }
                    foreach (IRuntimeTask pt in tasks[i].TasksRunAfterEnd)
                    {
                        if (!IsTaskOK(pt))
                        {
                            continue;
                        }
                        PointF endPoint = new PointF(ScaleFactor * (tasks[i].Activities[0].PlannedStart), TimeRowHeight + RowHeight * i + RowHeight * 0.5f);

                        int    j          = pt.ID - 1;
                        PointF startPoint = new PointF(ScaleFactor * (pt.Activities[pt.Activities.Length - 1].PlannedDuration + pt.Activities[pt.Activities.Length - 1].PlannedStart), TimeRowHeight + RowHeight * j + RowHeight * 0.5f);
                        if (endPoint.X - startPoint.X <= 3)
                        {
                            int    w      = 10;
                            PointF point2 = new PointF(startPoint.X + w, startPoint.Y);
                            PointF point3 = new PointF(startPoint.X + w, startPoint.Y / 2.0f + endPoint.Y / 2.0f);
                            PointF point4 = new PointF(endPoint.X - w, startPoint.Y / 2.0f + endPoint.Y / 2.0f);
                            PointF point5 = new PointF(endPoint.X - w, endPoint.Y);
                            g.DrawLines(Pens.Black, new PointF[] { startPoint, point2, point3, point4, point5, endPoint });
                        }
                        else
                        {
                            PointF point2 = new PointF(startPoint.X / 2.0f + endPoint.X / 2.0f, startPoint.Y);
                            PointF point3 = new PointF(startPoint.X / 2.0f + endPoint.X / 2.0f, endPoint.Y);
                            g.DrawLine(Pens.Black, startPoint, point2);
                            g.DrawLine(Pens.Black, point2, point3);
                            g.DrawLine(Pens.Black, point3, endPoint);
                        }
                        g.DrawLine(Pens.Black, endPoint, new PointF(endPoint.X - 3, endPoint.Y - 3));
                        g.DrawLine(Pens.Black, endPoint, new PointF(endPoint.X - 3, endPoint.Y + 3));
                    }
                    foreach (IRuntimeTask pt in tasks[i].TasksRunAfterStart)
                    {
                        PointF endPoint = new PointF(ScaleFactor * (tasks[i].PlannedStart), TimeRowHeight + RowHeight * i + RowHeight * 0.5f);

                        int    j          = pt.ID - 1;
                        PointF startPoint = new PointF(ScaleFactor * (pt.PlannedStart), TimeRowHeight + RowHeight * j + RowHeight * 0.5f);
                        Pen    p          = new Pen(Color.Black, 1);
                        p.DashPattern = new float[] { 5f, 4f, 3f, 4f };
                        //p.EndCap = LineCap.ArrowAnchor;
                        if (endPoint.X - startPoint.X <= 3)
                        {
                            int    w      = 10;
                            PointF point2 = new PointF(startPoint.X + w, startPoint.Y);
                            PointF point3 = new PointF(startPoint.X + w, startPoint.Y / 2.0f + endPoint.Y / 2.0f);
                            PointF point4 = new PointF(endPoint.X - w, startPoint.Y / 2.0f + endPoint.Y / 2.0f);
                            PointF point5 = new PointF(endPoint.X - w, endPoint.Y);
                            g.DrawLines(p, new PointF[] { startPoint, point2, point3, point4, point5, endPoint });
                        }
                        else
                        {
                            PointF point1 = new PointF(startPoint.X - 5, startPoint.Y);
                            PointF point2 = new PointF(startPoint.X - 5, endPoint.Y);
                            PointF point3 = new PointF(startPoint.X / 2.0f + endPoint.X / 2.0f, endPoint.Y);
                            g.DrawLines(p, new PointF[] { startPoint, point1, point2, endPoint });
                        }
                        g.DrawLine(Pens.Black, endPoint, new PointF(endPoint.X - 3, endPoint.Y - 3));
                        g.DrawLine(Pens.Black, endPoint, new PointF(endPoint.X - 3, endPoint.Y + 3));
                    }
                }

                //draw current Line
                g.DrawLine(Pens.Red, scheduler.Current * scaleFactor, 0, scheduler.Current * scaleFactor, TaskPanel.Height);
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.Message);
                Console.WriteLine(ex.StackTrace);
            }
            finally
            {
                scheduler.Unlock();
            }
        }
Example #4
0
        void PaintResourcePanel(object sender, PaintEventArgs e)
        {
            if (tasks == null || resources == null)
            {
                return;
            }
            scheduler.Lock();
            try
            {
                Dictionary <int, IRuntimeTask> id2task = new Dictionary <int, IRuntimeTask>();

                foreach (IRuntimeTask t in tasks)
                {
                    id2task[t.ID] = t;
                }
                Graphics g = e.Graphics;

                int count = 0;
                Dictionary <string, int> resouceColumns        = new Dictionary <string, int>();
                Dictionary <string, IRuntimeResource> name2res = new Dictionary <string, IRuntimeResource>();
                //draw resource lable
                for (int i = 0; i < resources.Length; i++)
                {
                    name2res[resources[i].Name] = resources[i];
                    if (resources[i].Count == 1)
                    {
                        count++;
                        resouceColumns[resources[i].Name + "_0"] = count - 1;
                    }
                    else
                    {
                        for (int j = 0; j < resources[i].Count; j++)
                        {
                            count++;
                            string name = resources[i].Name + "-" + (j + 1);
                            if (!resources[i].IsUnitEnabled(j))
                            {
                                name = name + "(disabled)";
                            }
                            resouceColumns[resources[i].Name + "_" + j] = count - 1;
                        }
                    }
                }

                for (int i = 0; i < tasks.Length; i++)
                {
                    if (!IsTaskOK(tasks[i]))
                    {
                        continue;
                    }
                    for (int j = 0; j < tasks[i].Activities.Length; j++)
                    {
                        IRuntimeActivity activity = tasks[i].Activities[j];

                        foreach (string key in activity.Reservations.Keys)
                        {
                            IRuntimeResource r     = name2res[key];
                            int[]            units = activity.Reservations[key];
                            for (int m = 0; m < units.Length; m++)
                            {
                                string nn = key + "_" + units[m];
                                if (units[m] >= 0 && resouceColumns.ContainsKey(nn))
                                {
                                    int rc = resouceColumns[nn];
                                    //draw activity resource reservation
                                    g.FillRectangle(new SolidBrush(r.Color), new RectangleF(activity.PlannedStart * ScaleFactor, rc * RowHeight, (activity.PlannedDuration * ScaleFactor), RowHeight - 1));

                                    if ((activity.PlannedDuration * ScaleFactor) > 1)
                                    {
                                        g.DrawString(activity.Name, SystemFonts.DefaultFont, Brushes.Black, new RectangleF(activity.PlannedStart * ScaleFactor, rc * RowHeight, (activity.PlannedDuration * ScaleFactor), RowHeight - 1));
                                    }
                                }
                            }
                        }
                    }
                }
                //draw current Line
                g.DrawLine(Pens.Red, scheduler.Current * scaleFactor, 0, scheduler.Current * scaleFactor, ResourcePanel.Height);
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.Message);
                Console.WriteLine(ex.StackTrace);
            }
            finally{
                scheduler.Unlock();
            }
        }