99using ReClassNET . Extensions ;
1010using ReClassNET . Memory ;
1111using ReClassNET . Nodes ;
12- using ReClassNET . Project ;
1312using ReClassNET . Util ;
1413
1514namespace ReClassNET . UI
@@ -219,6 +218,8 @@ protected override void OnPaint(PaintEventArgs e)
219218 catch ( Exception )
220219 {
221220 Debug . Assert ( false ) ;
221+
222+ throw ;
222223 }
223224 }
224225
@@ -239,149 +240,142 @@ protected override void OnMouseClick(MouseEventArgs e)
239240 {
240241 if ( hotSpot . Rect . Contains ( e . Location ) )
241242 {
242- try
243- {
244- var hitObject = hotSpot . Node ;
243+ var hitObject = hotSpot . Node ;
245244
246- if ( hotSpot . Type == HotSpotType . OpenClose )
247- {
248- hitObject . ToggleLevelOpen ( hotSpot . Level ) ;
245+ if ( hotSpot . Type == HotSpotType . OpenClose )
246+ {
247+ hitObject . ToggleLevelOpen ( hotSpot . Level ) ;
249248
250- invalidate = true ;
249+ invalidate = true ;
251250
252- break ;
253- }
254- if ( hotSpot . Type == HotSpotType . Click )
255- {
256- hitObject . Update ( hotSpot ) ;
251+ break ;
252+ }
253+ if ( hotSpot . Type == HotSpotType . Click )
254+ {
255+ hitObject . Update ( hotSpot ) ;
257256
258- invalidate = true ;
257+ invalidate = true ;
259258
260- break ;
261- }
262- if ( hotSpot . Type == HotSpotType . Select )
259+ break ;
260+ }
261+ if ( hotSpot . Type == HotSpotType . Select )
262+ {
263+ if ( e . Button == MouseButtons . Left )
263264 {
264- if ( e . Button == MouseButtons . Left )
265+ if ( ModifierKeys == Keys . None )
265266 {
266- if ( ModifierKeys == Keys . None )
267- {
268- ClearSelection ( ) ;
267+ ClearSelection ( ) ;
269268
270- hitObject . IsSelected = true ;
269+ hitObject . IsSelected = true ;
271270
272- selectedNodes . Add ( hotSpot ) ;
271+ selectedNodes . Add ( hotSpot ) ;
273272
274- OnSelectionChanged ( ) ;
273+ OnSelectionChanged ( ) ;
275274
276- selectionAnchor = selectionCaret = hotSpot ;
275+ selectionAnchor = selectionCaret = hotSpot ;
276+ }
277+ else if ( ModifierKeys == Keys . Control )
278+ {
279+ hitObject . IsSelected = ! hitObject . IsSelected ;
280+
281+ if ( hitObject . IsSelected )
282+ {
283+ selectedNodes . Add ( hotSpot ) ;
277284 }
278- else if ( ModifierKeys == Keys . Control )
285+ else
279286 {
280- hitObject . IsSelected = ! hitObject . IsSelected ;
287+ selectedNodes . Remove ( selectedNodes . FirstOrDefault ( c => c . Node == hitObject ) ) ;
288+ }
281289
282- if ( hitObject . IsSelected )
290+ OnSelectionChanged ( ) ;
291+ }
292+ else if ( ModifierKeys == Keys . Shift )
293+ {
294+ if ( selectedNodes . Count > 0 )
295+ {
296+ var selectedNode = selectedNodes [ 0 ] . Node ;
297+ if ( hitObject . GetParentContainer ( ) != null && selectedNode . GetParentContainer ( ) != hitObject . GetParentContainer ( ) )
283298 {
284- selectedNodes . Add ( hotSpot ) ;
299+ continue ;
285300 }
286- else
301+
302+ if ( hotSpot . Node is BaseContainerNode )
287303 {
288- selectedNodes . Remove ( selectedNodes . FirstOrDefault ( c => c . Node == hitObject ) ) ;
304+ continue ;
289305 }
290306
291- OnSelectionChanged ( ) ;
292- }
293- else if ( ModifierKeys == Keys . Shift )
294- {
295- if ( selectedNodes . Count > 0 )
296- {
297- var selectedNode = selectedNodes [ 0 ] . Node ;
298- if ( hitObject . GetParentContainer ( ) != null && selectedNode . GetParentContainer ( ) != hitObject . GetParentContainer ( ) )
299- {
300- continue ;
301- }
307+ var first = Utils . Min ( selectedNodes [ 0 ] , hotSpot , h => h . Node . Offset . ToInt32 ( ) ) ;
308+ var last = first == hotSpot ? selectedNodes [ 0 ] : hotSpot ;
302309
303- if ( hotSpot . Node is BaseContainerNode )
304- {
305- continue ;
306- }
307-
308- var first = Utils . Min ( selectedNodes [ 0 ] , hotSpot , h => h . Node . Offset . ToInt32 ( ) ) ;
309- var last = first == hotSpot ? selectedNodes [ 0 ] : hotSpot ;
310-
311- ClearSelection ( ) ;
312-
313- var containerNode = selectedNode . GetParentContainer ( ) ;
314- foreach ( var spot in containerNode . Nodes
315- . SkipWhile ( n => n != first . Node )
316- . TakeUntil ( n => n == last . Node )
317- . Select ( n => new HotSpot
318- {
319- Address = containerNode . Offset . Add ( n . Offset ) ,
320- Node = n ,
321- Memory = first . Memory ,
322- Level = first . Level
323- } ) )
310+ ClearSelection ( ) ;
311+
312+ var containerNode = selectedNode . GetParentContainer ( ) ;
313+ foreach ( var spot in containerNode . Nodes
314+ . SkipWhile ( n => n != first . Node )
315+ . TakeUntil ( n => n == last . Node )
316+ . Select ( n => new HotSpot
324317 {
325- spot . Node . IsSelected = true ;
326- selectedNodes . Add ( spot ) ;
327- }
318+ Address = containerNode . Offset . Add ( n . Offset ) ,
319+ Node = n ,
320+ Memory = first . Memory ,
321+ Level = first . Level
322+ } ) )
323+ {
324+ spot . Node . IsSelected = true ;
325+ selectedNodes . Add ( spot ) ;
326+ }
328327
329- OnSelectionChanged ( ) ;
328+ OnSelectionChanged ( ) ;
330329
331- selectionAnchor = first ;
332- selectionCaret = last ;
333- }
330+ selectionAnchor = first ;
331+ selectionCaret = last ;
334332 }
335333 }
336- else if ( e . Button == MouseButtons . Right )
334+ }
335+ else if ( e . Button == MouseButtons . Right )
336+ {
337+ // If there is only one selected node, select the node the user clicked at.
338+ if ( selectedNodes . Count <= 1 )
337339 {
338- // If there is only one selected node, select the node the user clicked at.
339- if ( selectedNodes . Count <= 1 )
340- {
341- ClearSelection ( ) ;
342-
343- hitObject . IsSelected = true ;
340+ ClearSelection ( ) ;
344341
345- selectedNodes . Add ( hotSpot ) ;
342+ hitObject . IsSelected = true ;
346343
347- OnSelectionChanged ( ) ;
344+ selectedNodes . Add ( hotSpot ) ;
348345
349- selectionAnchor = selectionCaret = hotSpot ;
350- }
346+ OnSelectionChanged ( ) ;
351347
352- ShowNodeContextMenu ( e . Location ) ;
348+ selectionAnchor = selectionCaret = hotSpot ;
353349 }
354350
355- invalidate = true ;
356- }
357- else if ( hotSpot . Type == HotSpotType . Drop )
358- {
359351 ShowNodeContextMenu ( e . Location ) ;
360-
361- break ;
362352 }
363- else if ( hotSpot . Type == HotSpotType . Delete )
364- {
365- hotSpot . Node . GetParentContainer ( ) . RemoveNode ( hotSpot . Node ) ;
366353
367- invalidate = true ;
354+ invalidate = true ;
355+ }
356+ else if ( hotSpot . Type == HotSpotType . Drop )
357+ {
358+ ShowNodeContextMenu ( e . Location ) ;
368359
369- break ;
370- }
371- else if ( hotSpot . Type == HotSpotType . ChangeClassType || hotSpot . Type == HotSpotType . ChangeWrappedType || hotSpot . Type == HotSpotType . ChangeEnumType )
372- {
373- var handler = hotSpot . Type == HotSpotType . ChangeClassType
374- ? ChangeClassTypeClick : hotSpot . Type == HotSpotType . ChangeWrappedType
375- ? ChangeWrappedTypeClick : ChangeEnumTypeClick ;
360+ break ;
361+ }
362+ else if ( hotSpot . Type == HotSpotType . Delete )
363+ {
364+ hotSpot . Node . GetParentContainer ( ) . RemoveNode ( hotSpot . Node ) ;
376365
377- handler ? . Invoke ( this , new NodeClickEventArgs ( hitObject , hotSpot . Address , hotSpot . Memory , e . Button , e . Location ) ) ;
366+ invalidate = true ;
378367
379- break ;
380- }
368+ break ;
381369 }
382- catch ( Exception ex )
370+ else if ( hotSpot . Type == HotSpotType . ChangeClassType || hotSpot . Type == HotSpotType . ChangeWrappedType || hotSpot . Type == HotSpotType . ChangeEnumType )
383371 {
384- Program . Logger . Log ( ex ) ;
372+ var handler = hotSpot . Type == HotSpotType . ChangeClassType
373+ ? ChangeClassTypeClick : hotSpot . Type == HotSpotType . ChangeWrappedType
374+ ? ChangeWrappedTypeClick : ChangeEnumTypeClick ;
375+
376+ handler ? . Invoke ( this , new NodeClickEventArgs ( hitObject , hotSpot . Address , hotSpot . Memory , e . Button , e . Location ) ) ;
377+
378+ break ;
385379 }
386380 }
387381 }
0 commit comments