Cut selected elements
From TaskDepender
Line 1: | Line 1: | ||
− | ''This page describes the possibility to cut | + | ''This page describes the possibility to cut a certain number of selected elements to a type of internal clipboard.'' |
− | == | + | == 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: | |
− | + | * 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 tasks, delete links to non-selected deliverables. | |
== Implementation == | == Implementation == | ||
− | <syntaxhighlight lang=" | + | <syntaxhighlight lang="cpp"> |
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); | |
− | TaskC *containerTask = | + | TaskC *containerTask = TasksAdmin->FindTask(SelectedContainerTaskId); |
− | // For all selected deliverables | + | // For all selected deliverables, remove links to non-selected tasks. |
− | + | ||
− | + | ||
− | + | ||
for( uint i=0; i<SelectedDeliverablesIds->NumElements; i++ ) | for( uint i=0; i<SelectedDeliverablesIds->NumElements; i++ ) | ||
{ | { | ||
− | selectedDeliverable = | + | selectedDeliverable = DeliverablesAdmin->FindDeliverable(SelectedDeliverablesIds->Element[i]); |
// Can not delete a clone in this manner --> deselect | // Can not delete a clone in this manner --> deselect | ||
Line 41: | Line 40: | ||
} | } | ||
− | task = | + | task = TasksAdmin->First(); |
while( task != NULL ) | while( task != NULL ) | ||
{ | { | ||
Line 47: | Line 46: | ||
{ | { | ||
// Call disconnect takes care of checking whether there is a connection. | // Call disconnect takes care of checking whether there is a connection. | ||
− | + | Disconnect(task, selectedDeliverable ); | |
} | } | ||
task = task->next(); | task = task->next(); | ||
Line 59: | Line 58: | ||
} | } | ||
− | // For all selected tasks | + | // For all selected tasks, remove links to non-selected deliverables. |
− | + | ||
− | + | ||
for( uint i=0; i<SelectedTasksIds->NumElements; i++ ) | for( uint i=0; i<SelectedTasksIds->NumElements; i++ ) | ||
{ | { | ||
− | selectedTask = | + | selectedTask = TasksAdmin->FindTask(SelectedTasksIds->Element[i]); |
if( selectedTask != NULL ) | if( selectedTask != NULL ) | ||
{ | { | ||
− | deliverable = | + | deliverable = DeliverablesAdmin->First(); |
while( deliverable != NULL) | while( deliverable != NULL) | ||
{ | { | ||
if( !SelectedDeliverablesIds->Find(deliverable->Id) ) | if( !SelectedDeliverablesIds->Find(deliverable->Id) ) | ||
{ | { | ||
− | + | Disconnect( selectedTask, deliverable ); | |
} | } | ||
deliverable = deliverable->next(); | deliverable = deliverable->next(); | ||
Line 88: | Line 85: | ||
SelectedDeliverablesIds->Clear(); | SelectedDeliverablesIds->Clear(); | ||
SelectedTasksIds->Clear(); | SelectedTasksIds->Clear(); | ||
− | |||
− | |||
} | } | ||
</syntaxhighlight> | </syntaxhighlight> | ||
+ | |||
+ | ---- | ||
+ | * [[Paste elements in the Administration|Paste]] |