sclass G22ChallengesPanel { replace Challenge with G22Challenge. transient settable G22Utils g22utils; transient SimpleCRUD_v2 challengeCRUD; transient SingleComponentPanel scpChallengePanel, scpChallengeCode; transient SimpleCRUD_v2 recognizerCRUD; transient G22ChallengePanel challengePanel; simplyCached JComponent visualize() { dm_watchField autoRunChallenge(-> { challengePanel?.autoRunChallenge(autoRunChallenge); }); challengeCRUD = new SimpleCRUD_v2<>(g22utils.concepts(), Challenge); g22utils.setupScriptCRUD(challengeCRUD); challengeCRUD.addCountToEnclosingTab(true); challengeCRUD.entityName = -> "Challenge"; recognizerCRUD = new SimpleCRUD_v2<>(g22utils.concepts(), G22RecognizerScript); recognizerCRUD.entityName = -> "Recognizer"; g22utils.setupScriptCRUD(recognizerCRUD); var challengeCRUDVis = challengeCRUD.visualize(); var recognizerCRUDVis = recognizerCRUD.visualize(); challengeCRUD.setButtonFiller(toolTip( "Uncheck this to fix a challenge if it is acting up", dm_rcheckBox autoRunChallenge("Auto-Run"))); scpChallengePanel = singleComponentPanel(); scpChallengeCode = singleComponentPanel(); challengeCRUD.onSelectionChangedAndNow(r_dm_q(l0 makeChallengePanel)); ret jhsplit( withTopRightAndBottomMargin(jCenteredRaisedSection("Challenges", withSideAndBottomMargin( jvsplit( jvsplit( withBottomMargin(challengeCRUDVis), scpChallengeCode ), jCenteredRaisedSection("Recognizers", recognizerCRUDVis) ) ))), withSideMargins(scpChallengePanel)); } void makeChallengePanel { var challenge = challengeCRUD.selected(); if (challenge == null) { scpChallengePanel.clear(); scpChallengeCode.set(jcenteredlabel("Please select a challenge above to start")); ret; } // XXX scpChallengeCode.set(jCenteredSection( //"Code for " + challenge, "Code for challenge (Left-arrow script)", liveValueRSyntaxTextArea_bothWays( conceptFieldLiveValue code(challenge)))); var panel = challengePanel = G22ChallengePanel(challenge); panel.g22utils(g22utils); panel.autoRunChallenge(isTrue(dm_get autoRunChallenge())); panel.init(); panel.recognizerIDE.lvScript(/* XXX */ dm_liveValue recognizerScript()); scpChallengePanel.set(withTopAndBottomMargin(12, 6, panel.visualize())); } }