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; transient JLeftArrowScriptIDE challengeIDE; simplyCached JComponent visualize() { 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(); 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; } challengeIDE = g22utils.leftArrowIDE(); challengeIDE.lvScript(conceptFieldLiveValue code(challenge)); challengeIDE.sectionTitle("Challenge " + roundBracket(recognizerIDE.sectionTitle)); scpChallengeCode.set(challengeIDE); var panel = challengePanel = G22ChallengePanel(challenge); panel.g22utils(g22utils); panel.init(); //panel.recognizerIDE.lvScript(...); scpChallengePanel.set(withTopAndBottomMargin(12, 6, panel.visualize())); } void updateCount { challengeCRUD.update(); } }