sclass G22ChallengesPanel { replace Challenge with G22Challenge. transient settable G22Utils g22utils; transient SimpleCRUD_v2 challengeCRUD; transient SingleComponentPanel scpChallengePanel; transient SimpleCRUD_v2 recognizerCRUD; transient G22ChallengePanel challengePanel; transient G22ChallengeIDE challengeIDE; simplyCached JComponent visualize() { challengeCRUD = new SimpleCRUD_v2<>(g22utils.concepts(), Challenge); g22utils.setupScriptCRUD(challengeCRUD); challengeCRUD.addCountToEnclosingTab(true); challengeCRUD.entityName = -> "Challenge"; challengeIDE = new G22ChallengeIDE(g22utils); challengeIDE.noScriptSelectedMsg("Please select a challenge above to start"); challengeIDE.modifyIDE = ide -> { // TODO ide.runScript = }; recognizerCRUD = new SimpleCRUD_v2<>(g22utils.concepts(), G22RecognizerScript); recognizerCRUD.entityName = -> "Recognizer"; g22utils.setupScriptCRUD(recognizerCRUD); var recognizerCRUDVis = recognizerCRUD.visualize(); recognizerCRUD.onSelectionChanged(-> recognizerIDE().setScript(recognizerCRUD.selected())); scpChallengePanel = singleComponentPanel(); challengeCRUD.onSelectionChangedAndNow(r_dm_q(l0 makeChallengePanel)); ret jhsplit( withTopRightAndBottomMargin(jCenteredRaisedSection("Challenges", withSideAndBottomMargin( jvsplit( jvsplit( withBottomMargin(challengeCRUD.visualize()), challengeIDE.visualize() ), jCenteredRaisedSection("Recognizers", recognizerCRUDVis) ) ))), withSideMargins(scpChallengePanel)); } G22LAScriptIDE recognizerIDE() { ret challengePanel.recognizerIDE; } void makeChallengePanel { var challenge = challengeCRUD.selected(); challengeIDE.setScript(challenge); if (challenge == null) ret; var panel = challengePanel = G22ChallengePanel(challenge); panel.g22utils(g22utils); panel.init(); scpChallengePanel.set(withTopAndBottomMargin(12, 6, panel.visualize())); } void updateCount { challengeCRUD.update(); } }