Cut selected elements

From TaskDepender
Jump to: navigation, search
 
Line 1: Line 1:
''This page describes the possibility to cut&paste a certain number of selected elements.''
+
''This page describes the possibility to cut a certain number of selected elements to a type of internal clipboard.''
  
== Introduction ==
+
== Description ==
 +
 
 +
A functionality that can be really convenient would be if it is possible to select a number of tasks and deliverables and to cut and paste these into another container task. This page describes how cutting a number of selected elements is implemented.
  
 
== Design ==
 
== Design ==
  
To be able to cut a number of selected elements, a kind of 'clipboard' must be created. This can be easily done by  the <tt>ContainerId</tt> of the elements; if this field is set to the maximum integer number (<tt>MaxInt</tt>). This looks like as if the selected elements were moved to a 'virtual container' with this <tt>Id</tt>.
+
To be able to cut a number of selected elements to be able to [[Paste elements in the Administration|paste]] them in some other container, a kind of 'clipboard' must be created. This can be easily done by  the <tt>ContainerId</tt> of the elements; if this field is set to the maximum integer number (<tt>MaxInt</tt>). This looks like as if the selected elements were moved to a 'virtual container' with this <tt>Id</tt>.
 
However, before doing this, the old 'contents' of the clipboard must be deleted. Also, there are additional operations that need to be performed:
 
However, before doing this, the old 'contents' of the clipboard must be deleted. Also, there are additional operations that need to be performed:
 
* Deselecting any selected [[Clone|clones]] because those can not be deleted (or cut) by the user.
 
* Deselecting any selected [[Clone|clones]] because those can not be deleted (or cut) by the user.
 
* For all selected deliverables, delete links to non-selected tasks.
 
* For all selected deliverables, delete links to non-selected tasks.
 
* For all selected tasks, delete links to non-selected deliverables.
 
* For all selected tasks, delete links to non-selected deliverables.
 
The ''paste'' action is now straightforward. It simply finds the elements with <tt>ContainerId</tt> equal to <tt>MaxInt</tt> and sets their <tt>ContainerId</tt> to the <tt>Id</tt> of the current container.
 
  
 
== Implementation ==
 
== Implementation ==
Line 18: Line 18:
 
void Admin::Cut(void)
 
void Admin::Cut(void)
 
{
 
{
   TaskC *selectedTask;
+
   TaskC       *selectedTask;
 
   DeliverableC *selectedDeliverable;
 
   DeliverableC *selectedDeliverable;
 
   DeliverableC *deliverable;
 
   DeliverableC *deliverable;
   TaskC *task;
+
   TaskC       *task;
  
 
   // First delete old clipboard.
 
   // First delete old clipboard.
 
   DeleteElements(MaxInt);
 
   DeleteElements(MaxInt);
  
   TaskC *containerTask = Admin->TasksAdmin->FindTask(SelectedContainerTaskId);
+
   TaskC *containerTask = TasksAdmin->FindTask(SelectedContainerTaskId);
  
 
   // For all selected deliverables, remove links to non-selected tasks.
 
   // For all selected deliverables, remove links to non-selected tasks.
Line 88: Line 88:
 
</syntaxhighlight>
 
</syntaxhighlight>
  
<syntaxhighlight lang="cpp">
+
----
void Admin::Paste(void)
+
* [[Paste elements in the Administration|Paste]]
{
+
  // Find all elements with container MaxInt and place at the current level.
+
 
+
  SelectedTasksIds->Clear();
+
  SelectedDeliverablesIds->Clear();
+
 
+
  TaskC *containerTask = TasksAdmin->FindTask(SelectedContainerTaskId);
+
 
+
  TaskC* task = Admin->TasksAdmin->First();
+
  while( task != NULL )
+
  {
+
    if( task->Container == MaxInt )
+
    {
+
      task->Container = SelectedContainerTaskId;
+
 
+
      if( containerTask != NULL )
+
      {
+
        containerTask->NumContainedElements++;
+
      }
+
 
+
      SelectedTasksIds->Add(task->Id);
+
    }
+
    task = task->next();
+
  }
+
 
+
  DeliverableC* deliverable = DeliverablesAdmin->First();
+
  while( deliverable != NULL )
+
  {
+
    if( deliverable->Container == MaxInt )
+
    {
+
      deliverable->Container = SelectedContainerTaskId;
+
      if( containerTask != NULL )
+
      {
+
        containerTask->NumContainedElements++;
+
      }
+
     
+
      SelectedDeliverablesIds->Add(deliverable->Id);
+
    }
+
    deliverable = deliverable->next();
+
  }
+
 
+
}
+
</syntaxhighlight>
+

Latest revision as of 08:14, 2 November 2011