Quintiq file version 2.0
#parent: ListIssue
Response OnClick (
  structured[LibOpt_Issue] selection
) id:Response_ListIssue_MenuSelectRelatedSuboptimizerScopeElement_OnClick
{
  #keys: '[142652.0.1936757326]'
  Body:
  [*
    // Select the Suboptimizer Scope Elements in ListSuboptimizerScopeElement for the Issues selected here.
    
    // The elements shown in ListSuboptimizerScopeElement is based on the selection in ListComponent.
    // So, we need to update ListComponent first before we can select the related elements in ListSuboptimizerScopeElement.   
    
    listcomponent := LibOpt_GlobalState.GetActivatedFormComponent().ListComponent();
    
    // See comment about WORKAROUND below.
    formsuboptimizerscopeelement := LibOpt_GlobalState.GetActivatedFormSuboptimizerScopeElement();
    listsuboptimizerscopelement := formsuboptimizerscopeelement.ListSuboptimizerScopeElement();
    
    // Select the Components of the related Suboptimizer Scope Elements first,
    // to populate ListSuboptimizerScopeElement with the relevant elements. 
    traverse( selection, Elements.SuboptimizerScopeElement.Suboptimizer, suboptimizer )
    {
      listcomponent.ExtendSelectByKey( suboptimizer.Key() );
    }  
    
    // Select the related Suboptimizer Scope Elements.
    traverse( selection, Elements.SuboptimizerScopeElement, suboptscopelement )
    {
      listsuboptimizerscopelement.ExtendSelectByKey( suboptscopelement.Key() );
    }
    
    /*  WORKAROUND:
        
        Even though we have called the `GetActivatedFormSuboptimizerScopeElement` method above,
        LibOpt_FormSuboptimizerScopeElement doesn't get activated accordingly because the method is called
        right after `GetActivatedFormCompenent`, where LibOpt_FormCompenent is activated.
        This is a known software limitation (that is yet to be solved) as documented in:
        - https://support.quintiq.com/cs:solutions:trouble:form.activate_doesn_t_work_for_second_form
        
        As such, we use a workaround where we activate LibOpt_FormSuboptimizerScopeElement in the `OnTimer`
        response of the GUITimerActivateFormSuboptimizerScopeElement component, which `Interval` has been
        set to 500ms.
        - 500ms was used because lower values don't result in the intended behavior of activating the form.
    */
    // Enable the GUITimerActivateFormSuboptimizerScopeElement component.
    // When the timer's Interval is used up, LibOpt_FormSuboptimizerScopeElement is activated, and the timer is disabled.
    formsuboptimizerscopeelement.GUITimerActivateFormSuboptimizerScopeElement().Enabled( true );
  *]
  DefinitionID => /ListIssue/Responsedef_ListIssue_Menu_OnClick
  Initiator: 'MenuSelectRelatedSuboptimizerScopeElement'
  Precondition:
  [*
    return LibOpt_Issue::SelectRelatedSuboptimizerScopeElementPrecondition( selection );
  *]
}
