@@ -316,6 +316,7 @@ protected override void OnMouseClick(MouseEventArgs e)
316316 continue ;
317317 }
318318
319+ if ( hotSpot . Node is BaseContainerNode ) continue ;
319320 var first = Utils . Min ( selectedNodes [ 0 ] , hotSpot , h => h . Node . Offset . ToInt32 ( ) ) ;
320321 var last = first == hotSpot ? selectedNodes [ 0 ] : hotSpot ;
321322
@@ -777,6 +778,39 @@ private void selectedNodeContextMenuStrip_Opening(object sender, CancelEventArgs
777778 break ;
778779 }
779780
781+ var hiddenNodesExistBelow = false ;
782+ var hiddenNodesExistAbove = false ;
783+ if ( count == 1 )
784+ {
785+ var selNode = SelectedNodes . ElementAt ( 0 ) ;
786+ var parNode = SelectedNodes . ElementAt ( 0 ) . ParentNode ;
787+ if ( parNode != null )
788+ {
789+ var selNodeIndex = parNode . FindNodeIndex ( selNode ) ;
790+ if ( ( selNodeIndex + 1 < parNode . Nodes . Count ( ) ) && ( parNode . Nodes . ElementAt ( selNodeIndex + 1 ) . IsHidden == true ) )
791+ {
792+ hiddenNodesExistBelow = true ;
793+ }
794+ if ( ( selNodeIndex - 1 > - 1 ) && ( parNode . Nodes . ElementAt ( selNodeIndex - 1 ) . IsHidden == true ) )
795+ {
796+ hiddenNodesExistAbove = true ;
797+ }
798+ }
799+ }
800+
801+ unhideNodesBelowToolStripMenuItem . Enabled = hiddenNodesExistBelow ;
802+ unhideNodesAboveToolStripMenuItem . Enabled = hiddenNodesExistAbove ;
803+
804+
805+ var areNodesHideable = true ;
806+ foreach ( BaseNode bs in SelectedNodes ) areNodesHideable = areNodesHideable & ! ( bs is ClassNode ) ;
807+ hideNodesToolStripMenuItem . Enabled = areNodesHideable ;
808+
809+ var parentNodeTypeSelected = false ;
810+ if ( ( count == 1 ) && ( SelectedNodes . ElementAt ( 0 ) is BaseContainerNode ) ) parentNodeTypeSelected = true ;
811+ unhideChildNodesToolStripMenuItem . Enabled = parentNodeTypeSelected ;
812+
813+
780814 addBytesToolStripMenuItem . Enabled = node ? . ParentNode != null || nodeIsClass ;
781815 insertBytesToolStripMenuItem . Enabled = count == 1 && node ? . ParentNode != null ;
782816
@@ -940,6 +974,26 @@ private void pasteNodesToolStripMenuItem_Click(object sender, EventArgs e)
940974 PasteNodeFromClipboardToSelection ( ) ;
941975 }
942976
977+ private void hideNodesToolStripMenuItem_Click ( object sender , EventArgs e )
978+ {
979+ HideSelectedNodes ( ) ;
980+ }
981+
982+ private void unhideNodesBelowToolStripMenuItem_Click ( object sender , EventArgs e )
983+ {
984+ UnhideNodesBelow ( ) ;
985+ }
986+
987+ private void unhideNodesAboveToolStripMenuItem_Click ( object sender , EventArgs e )
988+ {
989+ UnhideNodesAbove ( ) ;
990+ }
991+
992+ private void unhideChildNodesToolStripMenuItem_Click ( object sender , EventArgs e )
993+ {
994+ UnhideChildNodes ( ) ;
995+ }
996+
943997 private void removeToolStripMenuItem_Click ( object sender , EventArgs e )
944998 {
945999 RemoveSelectedNodes ( ) ;
@@ -1162,6 +1216,97 @@ private void RemoveSelectedNodes()
11621216 Invalidate ( ) ;
11631217 }
11641218
1219+ private void HideSelectedNodes ( )
1220+ {
1221+ foreach ( HotSpot hs in selectedNodes ) hs . Node . IsHidden = true ;
1222+
1223+ selectedNodes . Clear ( ) ;
1224+
1225+ OnSelectionChanged ( ) ;
1226+
1227+ Invalidate ( ) ;
1228+ }
1229+
1230+ private void UnhideChildNodes ( )
1231+ {
1232+ BaseContainerNode bcn = ( BaseContainerNode ) selectedNodes [ 0 ] . Node ;
1233+ foreach ( BaseNode bn in bcn . Nodes )
1234+ {
1235+ bn . IsHidden = false ;
1236+ bn . IsSelected = false ;
1237+ }
1238+
1239+ selectedNodes [ 0 ] . Node . IsSelected = false ;
1240+
1241+ selectedNodes . Clear ( ) ;
1242+
1243+ OnSelectionChanged ( ) ;
1244+
1245+ Invalidate ( ) ;
1246+ }
1247+
1248+ private void UnhideNodesBelow ( )
1249+ {
1250+ var selNode = selectedNodes [ 0 ] . Node ;
1251+ var parNode = selNode . ParentNode ;
1252+
1253+ if ( parNode == null ) return ;
1254+
1255+ var hiddenNodeStartIndex = parNode . FindNodeIndex ( selNode ) + 1 ;
1256+
1257+ if ( hiddenNodeStartIndex >= parNode . Nodes . Count ( ) ) return ;
1258+
1259+ for ( int i = hiddenNodeStartIndex ; i < parNode . Nodes . Count ( ) ; i ++ )
1260+ {
1261+ var indexNode = parNode . Nodes . ElementAt ( i ) ;
1262+ if ( indexNode . IsHidden )
1263+ {
1264+ indexNode . IsHidden = false ;
1265+ indexNode . IsSelected = false ;
1266+ }
1267+ else break ;
1268+ }
1269+
1270+ selNode . IsSelected = false ;
1271+
1272+ selectedNodes . Clear ( ) ;
1273+
1274+ OnSelectionChanged ( ) ;
1275+
1276+ Invalidate ( ) ;
1277+ }
1278+
1279+ private void UnhideNodesAbove ( )
1280+ {
1281+ var selNode = selectedNodes [ 0 ] . Node ;
1282+ var parNode = selNode . ParentNode ;
1283+
1284+ if ( parNode == null ) return ;
1285+
1286+ var hiddenNodeStartIndex = parNode . FindNodeIndex ( selNode ) - 1 ;
1287+
1288+ if ( hiddenNodeStartIndex < 0 ) return ;
1289+
1290+ for ( int i = hiddenNodeStartIndex ; i > - 1 ; i -- )
1291+ {
1292+ var indexNode = parNode . Nodes . ElementAt ( i ) ;
1293+ if ( indexNode . IsHidden )
1294+ {
1295+ indexNode . IsHidden = false ;
1296+ indexNode . IsSelected = false ;
1297+ }
1298+ else break ;
1299+ }
1300+
1301+ selNode . IsSelected = false ;
1302+
1303+ selectedNodes . Clear ( ) ;
1304+
1305+ OnSelectionChanged ( ) ;
1306+
1307+ Invalidate ( ) ;
1308+ }
1309+
11651310 private void CopySelectedNodesToClipboard ( )
11661311 {
11671312 if ( selectedNodes . Count > 0 )
0 commit comments