I forgot to mention that I posted the same question at
stackoverflow.com
(http://stackoverflow.com/questions/223324/how-does-one-cancelunaccept-a-drag-and-drop-operation-in-flex-3).

--- In [email protected], "Sean" <[EMAIL PROTECTED]> wrote:
>
> Goal: Allow the user to delete a record by dragging a row from an
> AdvancedDataGrid, dropping it onto a trash-can icon and verify the
> user meant to do that via a popup alert with "OK" and "Cancel" buttons.
> 
> What is working:
>     * Dragging/Dropping a row onto the trash icon.
>     * If the user clicks the "OK" button, the record is deleted.
>     * If the user clicks the "Cancel" button, the operation is canceled.
> 
> Problem: After the user clicks the "Cancel" button and the popup alert
> closes, no rows in the ADG can be dragged. I've discovered that after
> sorting the ADG, by clicking on a column header, the user can begin
> dragging rows again.
> 
> Code Flow:
>    1. Drag/drop ADG row onto trash icon.
>    2. Display confirmation Alert box.
>    3. If user clicked "Cancel" button, redisplay the ADG.
> 
> Code:
> <mx:Image source="{trashImage}" buttonMode="true" 
> toolTip="drag a participant here to delete them from the project"
> dragDrop="deleteParticipantDrop(event)"
> dragEnter="deleteParticipantEnter(event)" 
> dragExit="deleteParticipantDragExit(event)" top="4" right="122"
> id="image2" />  
> 
> // trashImage Event Handlers:
> private function deleteParticipantEnter(event:DragEvent):void
> {
>         var component:IUIComponent = IUIComponent(event.currentTarget);
>         dragComponent = component;
>         DragManager.acceptDragDrop(component);
>         DragManager.showFeedback(DragManager.MOVE);
>         deleteParticipantDragEvent = event;
> }
> 
> private function deleteParticipantDrop(event:DragEvent):void
> {
>         var selectedKitNum:String = memberRpt.selectedItem.KitNum;
>         var selectedName:String =
memberRpt.selectedItem.ParticipantName;
>         var component:IUIComponent = IUIComponent(event.currentTarget);
>         dragComponent = component;
>         DragManager.acceptDragDrop(component);
>         isEditingParticipantInfo = false;
>         isDeletingParticipant = true;
>         deleteParticipantDropEvent = event;
>         event.stopImmediatePropagation(); // Added as per mrm
>         alert.confirm("Are you sure you want to delete this
> participant, Kit #" + memberRpt.selectedItem.KitNum + " ("  + 
>                 memberRpt.selectedItem.ParticipantName + ") from the
> project?  This cannot be reversed!!  An email will be " +
>                 "sent to notify this participant and you will receive
> a copy of it for your records.", confirmRemoveParticipant);
> }
> 
> private function deleteParticipantDragExit(event:DragEvent):void
> {
>         var component:IUIComponent = IUIComponent(event.currentTarget);
>         dragComponent = component;
>         DragManager.acceptDragDrop(component);
>         DragManager.showFeedback(DragManager.NONE);
> }
> 
> private function confirmRemoveParticipant(event:CloseEvent):void
> {
>         if (event.detail == Alert.YES)
>         {
>                 deleteReason =
> DeleteParticipantTitleWindow(PopUpManager.createPopUp( this,
> DeleteParticipantTitleWindow , true));
>                 dispatchEvent(deleteParticipantDropEvent); // Added as
> per mrm
>                 PopUpManager.centerPopUp(deleteReason);
>                 deleteReason.showCloseButton = true;
>                 deleteReason.title = "Reason for removal from project";
>                 deleteReason.addEventListener("close",
> cleanupRemoveParticipant);
>                 deleteReason["cancelButton"].addEventListener("click",
> cleanupRemoveParticipant);
>                 deleteReason["okButton"].addEventListener("click",
> finalizeDeleteParticipant);
>                 isDeletingParticipant = false; 
>         }
>         else
>         {
>                 cleanupRemoveParticipant();
>         }
> }
> 
> private function cleanupRemoveParticipant(event:Event = null):void
> {
>         memberRpt.invalidateDisplayList();
>         memberRpt.executeBindings();
>         if (deleteReason != null)
>         {
>                 PopUpManager.removePopUp(deleteReason);
>                 deleteReason = null;
>         }
> }
> 
> public function finalizeDeleteParticipant(event:Event):void
> {
>         if (deleteReason.reason.text != null)
>         {
>                 selectedReportItem = memberRpt.selectedItem;
>                 selectedReportItemIndex = memberRpt.selectedIndex;
>                 memberReportData.removeItemAt(selectedReportItemIndex);
>         }
>         else
>         {
>                 alert.info("You must provide a reason for removing a
> participant from your project!!");
>         }
> 
>         cleanupRemoveParticipant();
> }
>


Reply via email to