View source
From TaskDepender
for
Cut selected elements
Jump to:
navigation
,
search
''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 == 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 == <syntaxhighlight lang="cpp"> void Admin::Cut(void) { TaskC *selectedTask; DeliverableC *selectedDeliverable; DeliverableC *deliverable; TaskC *task; // First delete old clipboard. DeleteElements(MaxInt); TaskC *containerTask = TasksAdmin->FindTask(SelectedContainerTaskId); // For all selected deliverables, remove links to non-selected tasks. for( uint i=0; i<SelectedDeliverablesIds->NumElements; i++ ) { selectedDeliverable = DeliverablesAdmin->FindDeliverable(SelectedDeliverablesIds->Element[i]); // Can not delete a clone in this manner --> deselect if( selectedDeliverable->CloneId != 0 ) { SelectedDeliverablesIds->Delete(selectedDeliverable->Id); continue; } task = TasksAdmin->First(); while( task != NULL ) { if( !SelectedTasksIds->Find(task->Id) ) { // Call disconnect takes care of checking whether there is a connection. Disconnect(task, selectedDeliverable ); } task = task->next(); } selectedDeliverable->Container = MaxInt; if( containerTask != NULL ) { containerTask->NumContainedElements--; } } // For all selected tasks, remove links to non-selected deliverables. for( uint i=0; i<SelectedTasksIds->NumElements; i++ ) { selectedTask = TasksAdmin->FindTask(SelectedTasksIds->Element[i]); if( selectedTask != NULL ) { deliverable = DeliverablesAdmin->First(); while( deliverable != NULL) { if( !SelectedDeliverablesIds->Find(deliverable->Id) ) { Disconnect( selectedTask, deliverable ); } deliverable = deliverable->next(); } } selectedTask->Container = MaxInt; if( containerTask != NULL ) { containerTask->NumContainedElements--; } } // Clear all selections SelectedDeliverablesIds->Clear(); SelectedTasksIds->Clear(); } </syntaxhighlight> ---- * [[Paste elements in the Administration|Paste]]
Return to
Cut selected elements
.
Views
Page
Discussion
View source
History
Personal tools
18.222.0.213
Talk for this IP address
Log in
Navigation
Main page
Recent changes
Help
Search
Toolbox
What links here
Related changes
Special pages