178178import org .apache .hop .ui .hopgui .perspective .execution .ExecutionPerspective ;
179179import org .apache .hop .ui .hopgui .perspective .execution .IExecutionViewer ;
180180import org .apache .hop .ui .hopgui .perspective .explorer .ExplorerPerspective ;
181+ import org .apache .hop .ui .hopgui .selection .HopGuiSelectionTracker ;
181182import org .apache .hop .ui .hopgui .shared .SwtGc ;
182183import org .apache .hop .ui .pipeline .dialog .PipelineDialog ;
183184import org .apache .hop .ui .util .EnvironmentUtils ;
@@ -758,6 +759,10 @@ public void mouseDown(MouseEvent event) {
758759 selectedTransforms = pipelineMeta .getSelectedTransforms ();
759760 selectedTransform = currentTransform ;
760761
762+ // Track that a transform was selected
763+ HopGuiSelectionTracker .getInstance ()
764+ .setLastSelectionType (HopGuiSelectionTracker .SelectionType .PIPELINE_GRAPH );
765+
761766 for (ITransformSelectionListener listener : currentTransformListeners ) {
762767 listener .onUpdateSelection (currentTransform );
763768 }
@@ -825,6 +830,9 @@ else if (event.button == 2 || (event.button == 1 && control)) {
825830 currentNotePad = (NotePadMeta ) areaOwner .getOwner ();
826831 selectedNotes = pipelineMeta .getSelectedNotes ();
827832 selectedNote = currentNotePad ;
833+ // Track that a note was selected
834+ HopGuiSelectionTracker .getInstance ()
835+ .setLastSelectionType (HopGuiSelectionTracker .SelectionType .PIPELINE_GRAPH );
828836 Point loc = currentNotePad .getLocation ();
829837
830838 previousNoteLocations = pipelineMeta .getSelectedNoteLocations ();
@@ -957,6 +965,12 @@ public void mouseUp(MouseEvent e) {
957965 pipelineMeta .unselectAll ();
958966 selectInRect (pipelineMeta , selectionRegion );
959967 selectionRegion = null ;
968+ // Track that transforms were selected via region selection
969+ if (!pipelineMeta .getSelectedTransforms ().isEmpty ()
970+ || !pipelineMeta .getSelectedNotes ().isEmpty ()) {
971+ HopGuiSelectionTracker .getInstance ()
972+ .setLastSelectionType (HopGuiSelectionTracker .SelectionType .PIPELINE_GRAPH );
973+ }
960974 updateGui ();
961975 return ;
962976 }
@@ -1005,6 +1019,11 @@ && showTransformOutputData(areaOwner)) {
10051019 // Flip selection when control is pressed!
10061020 if (control ) {
10071021 selectedTransform .flipSelected ();
1022+ // Track that a transform selection changed (if it's now selected)
1023+ if (selectedTransform .isSelected ()) {
1024+ HopGuiSelectionTracker .getInstance ()
1025+ .setLastSelectionType (HopGuiSelectionTracker .SelectionType .PIPELINE_GRAPH );
1026+ }
10081027 } else {
10091028 singleClick = true ;
10101029 singleClickType = SingleClickType .Transform ;
@@ -1016,11 +1035,19 @@ && showTransformOutputData(areaOwner)) {
10161035 pipelineMeta .unselectAll ();
10171036 selectedTransform .setSelected (true );
10181037 }
1038+ // Track that a transform was selected
1039+ HopGuiSelectionTracker .getInstance ()
1040+ .setLastSelectionType (HopGuiSelectionTracker .SelectionType .PIPELINE_GRAPH );
10191041 }
10201042 } else {
10211043 // Find out which Transforms & Notes are selected
10221044 selectedTransforms = pipelineMeta .getSelectedTransforms ();
10231045 selectedNotes = pipelineMeta .getSelectedNotes ();
1046+ // Track that transforms were selected
1047+ if (!selectedTransforms .isEmpty () || !selectedNotes .isEmpty ()) {
1048+ HopGuiSelectionTracker .getInstance ()
1049+ .setLastSelectionType (HopGuiSelectionTracker .SelectionType .PIPELINE_GRAPH );
1050+ }
10241051
10251052 // We moved around some items: store undo info...
10261053 //
@@ -1079,6 +1106,11 @@ && showTransformOutputData(areaOwner)) {
10791106 // Flip selection when control is pressed!
10801107 if (control ) {
10811108 selectedNote .flipSelected ();
1109+ // Track that a note selection changed (if it's now selected)
1110+ if (selectedNote .isSelected ()) {
1111+ HopGuiSelectionTracker .getInstance ()
1112+ .setLastSelectionType (HopGuiSelectionTracker .SelectionType .PIPELINE_GRAPH );
1113+ }
10821114 } else {
10831115 // single click on a note: ask what needs to happen...
10841116 //
@@ -1092,11 +1124,19 @@ && showTransformOutputData(areaOwner)) {
10921124 pipelineMeta .unselectAll ();
10931125 selectedNote .setSelected (true );
10941126 }
1127+ // Track that a note was selected
1128+ HopGuiSelectionTracker .getInstance ()
1129+ .setLastSelectionType (HopGuiSelectionTracker .SelectionType .PIPELINE_GRAPH );
10951130 }
10961131 } else {
10971132 // Find out which Transforms & Notes are selected
10981133 selectedTransforms = pipelineMeta .getSelectedTransforms ();
10991134 selectedNotes = pipelineMeta .getSelectedNotes ();
1135+ // Track that notes were selected
1136+ if (!selectedTransforms .isEmpty () || !selectedNotes .isEmpty ()) {
1137+ HopGuiSelectionTracker .getInstance ()
1138+ .setLastSelectionType (HopGuiSelectionTracker .SelectionType .PIPELINE_GRAPH );
1139+ }
11001140
11011141 // We moved around some items: store undo info...
11021142
@@ -1516,13 +1556,19 @@ else if (areaOwner.getAreaType() == AreaOwner.AreaType.NOTE) {
15161556 selectedTransforms = new ArrayList <>();
15171557 selectedTransforms .add (selectedTransform );
15181558 previousTransformLocations = new Point [] {selectedTransform .getLocation ()};
1559+ // Track that a transform was selected
1560+ HopGuiSelectionTracker .getInstance ()
1561+ .setLastSelectionType (HopGuiSelectionTracker .SelectionType .PIPELINE_GRAPH );
15191562 doRedraw = true ;
15201563 } else if (selectedNote != null && !selectedNote .isSelected ()) {
15211564 pipelineMeta .unselectAll ();
15221565 selectedNote .setSelected (true );
15231566 selectedNotes = new ArrayList <>();
15241567 selectedNotes .add (selectedNote );
15251568 previousNoteLocations = new Point [] {selectedNote .getLocation ()};
1569+ // Track that a note was selected
1570+ HopGuiSelectionTracker .getInstance ()
1571+ .setLastSelectionType (HopGuiSelectionTracker .SelectionType .PIPELINE_GRAPH );
15261572 doRedraw = true ;
15271573 } else if (selectionRegion != null && startHopTransform == null ) {
15281574 // Did we select a region...?
@@ -5243,6 +5289,19 @@ public void cutSelectedToClipboard() {
52435289 @ GuiKeyboardShortcut (key = SWT .DEL )
52445290 @ Override
52455291 public void deleteSelected () {
5292+ // Only handle delete if a pipeline graph item was the last selected item
5293+ // OR if there are actually selected transforms/notes in the pipeline
5294+ HopGuiSelectionTracker selectionTracker = HopGuiSelectionTracker .getInstance ();
5295+ boolean hasPipelineSelection =
5296+ !pipelineMeta .getSelectedTransforms ().isEmpty ()
5297+ || !pipelineMeta .getSelectedNotes ().isEmpty ();
5298+ boolean isLastPipelineSelection =
5299+ selectionTracker .isLastSelection (HopGuiSelectionTracker .SelectionType .PIPELINE_GRAPH );
5300+
5301+ if (!isLastPipelineSelection || !hasPipelineSelection ) {
5302+ return ;
5303+ }
5304+
52465305 delSelected (null );
52475306 updateGui ();
52485307 }
0 commit comments