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); storyView.adaptSyntaxTextArea = textArea -> g22_adaptSyntaxTextAreaForHashRefs(textArea, g22utils); addInFront(storyView.buttons(), jImageButtonScaledToWidth(16, #1103068, "Edit", rThread { //g22utils.projectActions.editProjectStory(); storyView.uneditable(false); })); showCasePanel = new G22ShowCasePanel(g22utils); showCasePanel.title = -> "Showcase"; // LAYOUT S title = "Project " + quote(g22utils.projectName()) + " Overview"; ret withTopAndBottomMargin(jRaisedCenteredSection(title, jvsplit_minZero( jhsplit(0.75, jCenteredSection("Project Story", centerAndSouthWithMargin( storyView, centerAndEastWithMargin(lblStats, jFilePathButton(conceptsFile)) )), northAndCenterWithMargin( new G22AutoStartPanel(g22utils), g22utils.makeVariablesPanel().compactView(false) )), showCasePanel.visualize() ) // end of jvsplit )); } }