Question about gant chart, dragging bars

TeeChart for Microsoft Visual Studio .NET, Xamarin Studio (Android, iOS & Forms) & Monodevelop.
Post Reply
bora
Newbie
Newbie
Posts: 5
Joined: Wed Jan 25, 2006 12:00 am

Question about gant chart, dragging bars

Post by bora » Fri Mar 17, 2006 2:35 pm

Hi,
I need to connect some bars in my gant chart and need to move them together. And also i want to prevent bars from overlapping. Is it possible? and also can connecting lines be used for this problem. if so, how?
thanks,

Bora.

Narcís
Site Admin
Site Admin
Posts: 14730
Joined: Mon Jun 09, 2003 4:00 am
Location: Banyoles, Catalonia
Contact:

Post by Narcís » Wed Mar 22, 2006 10:26 am

Hi Bora,

To drag gantt bars as you requested you can use something as the code below. Regarding overlapping, what do you exactly want to achieve? For example, you could check if the bars dragged values fall into any other bar range in the same row and then perform the action you wish.

Code: Select all

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Collections;
using Steema.TeeChart;

namespace GanttDrag
{
  public partial class Form1 : Form
  {
    public Form1()
    {
      InitializeComponent();
    }

    private void Form1_Load(object sender, EventArgs e)
    {
      gantt1.FillSampleValues();
    }

    private bool allowDrag = true;
    private int bar=-1;
		private Cursor cursorDrag=Cursors.Hand;
		private double xOriginal;
    private ArrayList barList = new ArrayList();

    private new void MouseMove(MouseEventArgs e,ref Cursor c) 
		{
			if (bar==-1) 
			{
				if (allowDrag && (bar==-1) && (gantt1.Clicked(e.X,e.Y)!=-1)) 
				{
					c=cursorDrag;
          tChart1.Chart.CancelMouse=true;
				}
			}
			else  // Dragging bar...
			{
        double Change = gantt1.GetHorizAxis.CalcPosPoint(e.X) - xOriginal;


				// drag bar
        gantt1.StartValues.Value[bar] += Change;
				gantt1.EndValues.Value[bar]+=Change;

        //Drag all bars in barList according to how bar is dragged
        for (int i = 0; i < barList.Count; ++i)
        {
          gantt1.StartValues.Value[Convert.ToInt16(barList[i])] += Change;
          gantt1.EndValues.Value[Convert.ToInt16(barList[i])] += Change;
				}

        xOriginal = gantt1.GetHorizAxis.CalcPosPoint(e.X);

        gantt1.Invalidate();
			}
		}

		private new void MouseDown(MouseEventArgs e,ref Cursor c) 
		{
			bar=-1;
			xOriginal=tChart1.Axes.Bottom.CalcPosPoint(e.X);

			// Check bar under mouse (to drag)
			if ((bar==-1) && allowDrag) 
			{
        bar = gantt1.Clicked(e.X, e.Y);
        if (bar != -1)
        {
          //Search for previous and next bars          
          SearchBars(bar, bar, barList, 1);          
        }
			}
		}

    private void SearchBars(int InitBar, int CurrBar, ArrayList barList, int mode)
    {
      //Look for next bars (mode==1)
      if ((gantt1.NextTasks[CurrBar] != -1.0) && (mode == 1))
      {
        barList.Add(gantt1.NextTasks[CurrBar]);
        SearchBars(InitBar, (int)Math.Round(gantt1.NextTasks[CurrBar]), barList, 1);
      }
      else
      {

        //Look for previous bars (mode==0)
        if ((gantt1.NextTasks[CurrBar] == -1.0) && (mode == 1))
        {
          SearchBars(InitBar, InitBar, barList, 0);
        }

        if (mode==0)
        {
          
          for (int i = 0; i < gantt1.Count; ++i)
          {
            if (gantt1.NextTasks[i]==CurrBar)
            {
              barList.Add(i);
              SearchBars(InitBar, i, barList, 0); 
            }            
          }

        }

      }
    }

    private void tChart1_MouseDown(object sender, MouseEventArgs e)
    {
      MouseDown(e, ref cursorDrag);
    }

    private void tChart1_MouseMove(object sender, MouseEventArgs e)
    {
      MouseMove(e, ref cursorDrag);
    }

    private void tChart1_MouseUp(object sender, MouseEventArgs e)
    {
      bar = -1;
      barList.Clear();
    }
	}  
}
Best Regards,
Narcís Calvet / Development & Support
Steema Software
Avinguda Montilivi 33, 17003 Girona, Catalonia
Tel: 34 972 218 797
http://www.steema.com
Image Image Image Image Image Image
Instructions - How to post in this forum

Post Reply