@@ -167,7 +167,7 @@ public override void Initialize()
167167 panelEventDescription = FindChild < EditorDescriptionPanel > ( nameof ( panelEventDescription ) ) ;
168168 lbEventParameters = FindChild < EditorListBox > ( nameof ( lbEventParameters ) ) ;
169169 tbEventParameterValue = FindChild < EditorTextBox > ( nameof ( tbEventParameterValue ) ) ;
170- btnActionGoToTarget = FindChild < EditorButton > ( nameof ( btnActionGoToTarget ) ) ;
170+ tbEventParameterValue . MouseScrolled += TbEventParameterValue_MouseScrolled ;
171171
172172 ctxEventParameterPresetValues = new XNAContextMenu ( WindowManager ) ;
173173 ctxEventParameterPresetValues . Name = nameof ( ctxEventParameterPresetValues ) ;
@@ -180,6 +180,8 @@ public override void Initialize()
180180 panelActionDescription = FindChild < EditorDescriptionPanel > ( nameof ( panelActionDescription ) ) ;
181181 lbActionParameters = FindChild < EditorListBox > ( nameof ( lbActionParameters ) ) ;
182182 tbActionParameterValue = FindChild < EditorTextBox > ( nameof ( tbActionParameterValue ) ) ;
183+ tbActionParameterValue . MouseScrolled += TbActionParameterValue_MouseScrolled ;
184+ btnActionGoToTarget = FindChild < EditorButton > ( nameof ( btnActionGoToTarget ) ) ;
183185
184186 ctxActionParameterPresetValues = new XNAContextMenu ( WindowManager ) ;
185187 ctxActionParameterPresetValues . Name = nameof ( ctxActionParameterPresetValues ) ;
@@ -371,6 +373,186 @@ public override void Initialize()
371373 WindowManager . WindowSizeChangedByUser += WindowManager_WindowSizeChangedByUser ;
372374 }
373375
376+ #region Support for handling scroll wheel input on event and action parameter text boxes
377+ private void HandleScrollWheelOnTextBoxAndList < T > ( List < T > list , Func < T , string > idGetter , string currentParameterValue , EditorTextBox textBox )
378+ {
379+ int existingIndex = list . FindIndex ( item => idGetter ( item ) == currentParameterValue ) ;
380+ if ( existingIndex > - 1 )
381+ {
382+ if ( Cursor . ScrollWheelValue < 0 && existingIndex < list . Count - 1 )
383+ {
384+ textBox . Text = idGetter ( list [ existingIndex + 1 ] ) ;
385+ EditTrigger ( editedTrigger ) ;
386+ }
387+ else if ( Cursor . ScrollWheelValue > 0 && existingIndex > 0 )
388+ {
389+ textBox . Text = idGetter ( list [ existingIndex - 1 ] ) ;
390+ EditTrigger ( editedTrigger ) ;
391+ }
392+ }
393+ }
394+
395+ private void HandleScrollOnEventOrActionParameterTextBox ( string currentParameterValue , List < string > presetOptions , TriggerParamType paramType , EditorTextBox textBox )
396+ {
397+ // If the parameter has preset options defined, allow scrolling them
398+ if ( presetOptions != null && presetOptions . Count > 0 )
399+ {
400+ int currentPresetOptionIndex = presetOptions . FindIndex ( po => po . StartsWith ( currentParameterValue + " " ) ) ;
401+
402+ if ( currentPresetOptionIndex > 0 && Cursor . ScrollWheelValue > 0 )
403+ {
404+ textBox . Text = presetOptions [ currentPresetOptionIndex - 1 ] ;
405+ }
406+ else if ( currentPresetOptionIndex > - 1 && currentPresetOptionIndex < presetOptions . Count - 1 && Cursor . ScrollWheelValue < 0 )
407+ {
408+ textBox . Text = presetOptions [ currentPresetOptionIndex + 1 ] ;
409+ }
410+
411+ EditTrigger ( editedTrigger ) ;
412+ return ;
413+ }
414+
415+ switch ( paramType )
416+ {
417+ case TriggerParamType . TeamType :
418+ HandleScrollWheelOnTextBoxAndList ( map . TeamTypes , tt => tt . ININame , currentParameterValue , textBox ) ;
419+ break ;
420+ case TriggerParamType . Trigger :
421+ HandleScrollWheelOnTextBoxAndList ( map . Triggers , trigger => trigger . ID , currentParameterValue , textBox ) ;
422+ break ;
423+ case TriggerParamType . GlobalVariable :
424+ HandleScrollWheelOnTextBoxAndList ( map . Rules . GlobalVariables , gv => gv . Index . ToString ( CultureInfo . InvariantCulture ) , currentParameterValue , textBox ) ;
425+ break ;
426+ case TriggerParamType . LocalVariable :
427+ HandleScrollWheelOnTextBoxAndList ( map . LocalVariables , lv => lv . Index . ToString ( CultureInfo . InvariantCulture ) , currentParameterValue , textBox ) ;
428+ break ;
429+ case TriggerParamType . HouseType :
430+ HandleScrollWheelOnTextBoxAndList ( map . GetHouseTypes ( ) , housetype => housetype . Index . ToString ( CultureInfo . InvariantCulture ) , currentParameterValue , textBox ) ;
431+ break ;
432+ case TriggerParamType . House :
433+ HandleScrollWheelOnTextBoxAndList ( map . GetHouses ( ) , house => house . ID . ToString ( CultureInfo . InvariantCulture ) , currentParameterValue , textBox ) ;
434+ break ;
435+ case TriggerParamType . Text :
436+ if ( int . TryParse ( currentParameterValue , CultureInfo . InvariantCulture , out int textLineIndex ) )
437+ {
438+ if ( Cursor . ScrollWheelValue < 0 && ! string . IsNullOrEmpty ( map . Rules . TutorialLines . GetStringByIdOrEmptyString ( textLineIndex + 1 ) ) )
439+ {
440+ textBox . Text = ( textLineIndex + 1 ) . ToString ( CultureInfo . InvariantCulture ) ;
441+ EditTrigger ( editedTrigger ) ;
442+ }
443+ else if ( Cursor . ScrollWheelValue > 0 && ! string . IsNullOrEmpty ( map . Rules . TutorialLines . GetStringByIdOrEmptyString ( textLineIndex - 1 ) ) )
444+ {
445+ textBox . Text = ( textLineIndex - 1 ) . ToString ( CultureInfo . InvariantCulture ) ;
446+ EditTrigger ( editedTrigger ) ;
447+ }
448+ }
449+ break ;
450+ case TriggerParamType . Tag :
451+ HandleScrollWheelOnTextBoxAndList ( map . Tags , tag => tag . ID , currentParameterValue , textBox ) ;
452+ break ;
453+ case TriggerParamType . WaypointZZ :
454+ int waypointIdentifier = Helpers . GetWaypointNumberFromAlphabeticalString ( currentParameterValue ) ;
455+ if ( Cursor . ScrollWheelValue < 0 && map . Waypoints . Exists ( wp => wp . Identifier == waypointIdentifier + 1 ) )
456+ {
457+ textBox . Text = Helpers . WaypointNumberToAlphabeticalString ( waypointIdentifier + 1 ) ;
458+ EditTrigger ( editedTrigger ) ;
459+ }
460+ else if ( Cursor . ScrollWheelValue > 0 && map . Waypoints . Exists ( wp => wp . Identifier == waypointIdentifier - 1 ) )
461+ {
462+ textBox . Text = Helpers . WaypointNumberToAlphabeticalString ( waypointIdentifier - 1 ) ;
463+ EditTrigger ( editedTrigger ) ;
464+ }
465+ break ;
466+ case TriggerParamType . Waypoint :
467+ HandleScrollWheelOnTextBoxAndList ( map . Waypoints , wp => wp . Identifier . ToString ( CultureInfo . InvariantCulture ) , currentParameterValue , textBox ) ;
468+ break ;
469+ case TriggerParamType . SuperWeapon :
470+ HandleScrollWheelOnTextBoxAndList ( map . Rules . SuperWeaponTypes , sw => sw . Index . ToString ( CultureInfo . InvariantCulture ) , currentParameterValue , textBox ) ;
471+ break ;
472+ case TriggerParamType . ParticleSystem :
473+ HandleScrollWheelOnTextBoxAndList ( map . Rules . ParticleSystemTypes , pst => pst . ININame , currentParameterValue , textBox ) ;
474+ break ;
475+ case TriggerParamType . Speech :
476+ if ( ! Constants . IsRA2YR && int . TryParse ( currentParameterValue , CultureInfo . InvariantCulture , out int speechIndex ) )
477+ {
478+ if ( Cursor . ScrollWheelValue < 0 && map . EditorConfig . Speeches . List . Exists ( speech => speech . Index == speechIndex + 1 ) )
479+ {
480+ textBox . Text = ( speechIndex + 1 ) . ToString ( CultureInfo . InvariantCulture ) ;
481+ EditTrigger ( editedTrigger ) ;
482+ }
483+ else if ( Cursor . ScrollWheelValue > 0 && map . EditorConfig . Speeches . List . Exists ( speech => speech . Index == speechIndex - 1 ) )
484+ {
485+ textBox . Text = ( speechIndex - 1 ) . ToString ( CultureInfo . InvariantCulture ) ;
486+ EditTrigger ( editedTrigger ) ;
487+ }
488+ }
489+ break ;
490+ case TriggerParamType . Sound :
491+ if ( ! Constants . IsRA2YR && int . TryParse ( currentParameterValue , CultureInfo . InvariantCulture , out int soundIndex ) )
492+ {
493+ if ( Cursor . ScrollWheelValue < 0 && map . Rules . Sounds . List . Exists ( sound => sound . Index == soundIndex + 1 ) )
494+ {
495+ textBox . Text = ( soundIndex + 1 ) . ToString ( CultureInfo . InvariantCulture ) ;
496+ EditTrigger ( editedTrigger ) ;
497+ }
498+ else if ( Cursor . ScrollWheelValue > 0 && map . Rules . Sounds . List . Exists ( sound => sound . Index == soundIndex - 1 ) )
499+ {
500+ textBox . Text = ( soundIndex - 1 ) . ToString ( CultureInfo . InvariantCulture ) ;
501+ EditTrigger ( editedTrigger ) ;
502+ }
503+ }
504+ break ;
505+ case TriggerParamType . Color :
506+ HandleScrollWheelOnTextBoxAndList ( map . Rules . Colors , c => c . Index . ToString ( CultureInfo . InvariantCulture ) , currentParameterValue , textBox ) ;
507+ break ;
508+ default :
509+ break ;
510+ }
511+ }
512+
513+ private void TbEventParameterValue_MouseScrolled ( object sender , InputEventArgs e )
514+ {
515+ e . Handled = true ;
516+
517+ if ( editedTrigger == null || lbEvents . SelectedItem == null || lbEventParameters . SelectedItem == null )
518+ return ;
519+
520+ var triggerEvent = ( TriggerCondition ) lbEvents . SelectedItem . Tag ;
521+ var triggerEventType = GetTriggerEventType ( triggerEvent . ConditionIndex ) ;
522+ int paramIndex = ( int ) lbEventParameters . SelectedItem . Tag ;
523+
524+ if ( triggerEventType == null )
525+ return ;
526+
527+ TriggerEventParam parameter = triggerEventType . Parameters [ paramIndex ] ;
528+
529+ string currentParameterValue = triggerEvent . Parameters [ paramIndex ] ;
530+
531+ HandleScrollOnEventOrActionParameterTextBox ( currentParameterValue , parameter . PresetOptions , parameter . TriggerParamType , tbEventParameterValue ) ;
532+ }
533+
534+ private void TbActionParameterValue_MouseScrolled ( object sender , InputEventArgs e )
535+ {
536+ e . Handled = true ;
537+
538+ if ( editedTrigger == null || lbActions . SelectedItem == null || lbActionParameters . SelectedItem == null )
539+ return ;
540+
541+ var triggerAction = ( TriggerAction ) lbActions . SelectedItem . Tag ;
542+ var triggerActionType = GetTriggerActionType ( triggerAction . ActionIndex ) ;
543+ int paramIndex = ( int ) lbActionParameters . SelectedItem . Tag ;
544+
545+ if ( triggerActionType == null )
546+ return ;
547+
548+ TriggerActionParam parameter = triggerActionType . Parameters [ paramIndex ] ;
549+
550+ string currentParameterValue = triggerAction . Parameters [ paramIndex ] ;
551+
552+ HandleScrollOnEventOrActionParameterTextBox ( currentParameterValue , parameter . PresetOptions , parameter . TriggerParamType , tbActionParameterValue ) ;
553+ }
554+ #endregion
555+
374556 private void CreateRandomTriggerSetWindow_RandomTriggersSetCreated ( object sender , RandomTriggerSetTriggersCreatedEventArgs e )
375557 {
376558 ListTriggers ( ) ;
0 commit comments