コード例 #1
0
        protected override void OnMouseUp(MouseEventArgs e)
        {
            base.OnMouseUp(e);

            if (isDragging && e.Button == MouseButtons.Left)
            {
                isDragging = false;

                /* create a new sequence! */
                var start = FindFrameAt(clickPos);
                var end = FindFrameAt(mousePos);

                if (start != null && end != null
                    && start.Value.First == end.Value.First)
                {
                    var s = new Sequence()
                    {
                        start = start.Value.Second,
                        length = end.Value.Second - start.Value.Second + 1,
                        shp = start.Value.First
                    };

                    var name = GetTextForm.GetString("Name of new sequence", lastName);
                    if (name == null) return;

                    Program.Sequences.Add(name, s);
                    lastName = name;
                }
            }
        }
コード例 #2
0
        protected override void OnPaint(PaintEventArgs e)
        {
            base.OnPaint(e);

            var x = 0;
            var y = 0;

            Point? toolPoint = null;
            string toolText = "";

            var frameAtPoint = FindFrameAt(mousePos);
            if (frameAtPoint != null)
            {
                var rect = items[frameAtPoint.Value.First][frameAtPoint.Value.Second];
                e.Graphics.FillRectangle(Brushes.Silver, rect);
                toolPoint = new Point(rect.Left, rect.Bottom);
                toolText = frameAtPoint.Value.Second.ToString();
            }

            tempSequence = null;
            if (isDragging)
            {
                /* create a new sequence! */
                var start = FindFrameAt(clickPos);
                var end = FindFrameAt(mousePos);

                if (start != null && end != null
                    && start.Value.First == end.Value.First)
                    tempSequence = new Sequence() {
                        start = start.Value.Second,
                        length = end.Value.Second - start.Value.Second + 1,
                        shp = start.Value.First };
            }

            items.Clear();

            foreach (var shp in Program.Shps)
            {
                x = 0;
                e.Graphics.DrawString(shp.Key + ".shp", Font, Brushes.Black, x, y);
                y += Font.Height;
                var u = 0;
                var i = 0;

                var dict = items[shp.Key] = new Dictionary<int, Rectangle>();

                foreach (var frame in shp.Value)
                {
                    if (x + frame.Width >= ClientSize.Width)
                    {
                        x = 0;
                        y += u;
                        u = 0;
                    }

                    dict[i++] = new Rectangle(x, y, frame.Width, frame.Height);

                    e.Graphics.DrawImage(frame, x, y);
                    x += frame.Width;
                    u = Math.Max(u, frame.Height);
                }

                y += u;
                x = 0;
            }

            var brushes = new[] { Brushes.Green, Brushes.Red, Brushes.Blue, Brushes.Magenta, Brushes.DarkOrange, Brushes.Navy };

            var seqid = 0;
            var seqs = Program.Sequences.Select(a => a);	/* shorter than teh typename!! */
            if (tempSequence != null)
                seqs = seqs.Concat(new[] { new KeyValuePair<string, Sequence>("New sequence...", tempSequence) });

            foreach (var seq in seqs)
            {
                var firstFrame = seq.Value.start;
                var r = items[seq.Value.shp][firstFrame];

                for (var i = 0; i < seq.Value.length; i++)
                {
                    var q = items[seq.Value.shp][i + firstFrame];
                    e.Graphics.FillRectangle(brushes[seqid], q.Left, q.Top, q.Width, 2);
                }

                var z = e.Graphics.MeasureString(seq.Key, Font);
                e.Graphics.FillRectangle(brushes[seqid], r.Left, r.Top, z.Width, z.Height);
                e.Graphics.DrawString(seq.Key, Font, Brushes.White, r.Left, r.Top);

                seqid = ++seqid % brushes.Length;
            }

            if (toolPoint.HasValue)
            {
                var size = e.Graphics.MeasureString(toolText, Font);
                e.Graphics.FillRectangle(Brushes.Silver, toolPoint.Value.X, toolPoint.Value.Y, size.Width, size.Height);
                e.Graphics.DrawString(toolText, Font, Brushes.Black, toolPoint.Value.X, toolPoint.Value.Y);
            }

            var newHeight = Math.Max( Parent.ClientSize.Height, y );
            if (Height != newHeight)
                Height = newHeight;
        }