srecord noeq G22ProjectOverviewPanel(G22Utils g22utils) { JSyntaxTextFileEditor storyView; JLabel lblStats; transient G22ShowCasePanel showCasePanel; void updateStats { setText(lblStats, "Database core size: " + str_toKB(fileSize(g22utils.concepts().conceptsFile()))); } cachedVisualize { var conceptsFile = g22utils.concepts().conceptsFile(); lblStats = rightAlignedLabel(); IVF1 fileListener = file -> { if (sameFile(file, conceptsFile)) updateStats(); }; bindToComponent(lblStats, -> { g22utils.onProjectFileChanged(fileListener); updateStats(); }, -> g22utils.removeProjectFileChangedListener(fileListener)); storyView = new JSyntaxTextFileEditor(g22utils.projectStoryTextFile()) .uneditable(true); g22utils.adaptTextEditor(storyView); addInFront(storyView.buttons(), jImageButtonScaledToWidth(16, #1103068, "Edit", rThread { //g22utils.projectActions.editProjectStory(); storyView.uneditable(false); })); showCasePanel = new G22ShowCasePanel(g22utils); // LAYOUT S title = "Project " + quote(g22utils.projectName()) + " Overview"; G22VariablesPanel variablesPanel = g22utils.makeVariablesPanel(); variablesPanel.crud().tableSearcher().scpRightOfSearchPanel.set(withLeftMargin( toolTip("Maximize variables panel", jimageButtonScaledToWidth(16, #1103161, rThread { g22utils.showUIURL("Variables") })))); ret withTopAndBottomMargin(jRaisedCenteredSection(title, jvsplit_minZero( jhsplit(0.75, jCenteredSection("Project Story", centerAndSouthWithMargin( storyView, centerAndEastWithMargin(lblStats, jFilePathButton(conceptsFile)) )), northAndCenterWithMargin( new G22AutoStartPanel(g22utils), variablesPanel.compactView(false) )), jCenteredSection("Showcase", showCasePanel.visualize()) ) // end of jvsplit )); } }