It would be nice to be able to create task dependencies graphically using the Gantt chart as a GUI or to change a milestone date by dragging it along the chart.

617

618

= Design guidelines =

619

620

In order to agree about how to implement this functionality, the very first step should be to describe the possible architectures (i.e., how the different components are going to interact with each other since the moment the request is sent by the client until the Gantt chart is rendered by the browser) that will be considered.

621

622

== Components ==

623

624

In order to add flexibility to the final solution, the '''MVC pattern''' ''should'' be considered during its development.

625

Hence the following components need to be implemented in order to add Gantt charts to Trac.

626

627

=== The Model ===

628

629

It provides the data in the Gantt chart and is not just a single element but a set of components like the following :

630

631

* The ticket models, which provide data about the issues found

632

in the project environment

633

* Trac query mechanism which provides a way to select (filter) the

634

tickets being shown.

635

* [#RelatedWork Other plugins] used to track ticket dependencies

636

* [#RelatedWork Other plugins] used to track task/subtask relationships

637

* [#RelatedWork Other plugins] used to estimate the time needed to finish the given tasks

638

* Maybe one (a few) component(s) whose role is to provide the functionality specific to Gantt charts, thus acting as a central access point and a mediator so as to put all the other components together.

639

640

=== The View ===

641

642

It ''should'' be a JavaScript component (is this possible ?) responsible for rendering the data provided by ''the model''.

643

Besides it ''might'' support [#Whatdoweneedintheuserinterface other dynamic features]

644

645

=== The Controller ===

646

647

{{{

648

¿What do we need this for?

649

}}}

650

651

=== Implications ===

652

653

The aforementioned separation ''should'' allow the replacement of any of the components involved. Hence the following modifications ''should'' be made easily (the list being intentionally incomplete) :