package magic.ui.screen.card.script; import java.io.File; import java.nio.file.Path; import javax.swing.JPanel; import javax.swing.JSplitPane; import magic.data.CardDefinitions; import magic.model.MagicCardDefinition; import magic.ui.widget.CardSideBar; import magic.ui.widget.M.MTextFileViewer; import magic.utility.MagicFileSystem; import net.miginfocom.swing.MigLayout; @SuppressWarnings("serial") public class ScriptContentPanel extends JPanel { // UI components private final MigLayout migLayout = new MigLayout(); private final MTextFileViewer scriptViewer = new MTextFileViewer(); private final MTextFileViewer groovyViewer = new MTextFileViewer(); private final JSplitPane splitter = new JSplitPane(JSplitPane.VERTICAL_SPLIT); private final CardSideBar sidebar; private final File scriptFile; private final File groovyFile; private final boolean isGroovy; public ScriptContentPanel(final MagicCardDefinition card) { sidebar = new CardSideBar(); sidebar.setCard(card); final Path scriptsPath = card.isInvalid() ? MagicFileSystem.getDataPath(MagicFileSystem.DataPath.SCRIPTS_MISSING) : MagicFileSystem.getDataPath(MagicFileSystem.DataPath.SCRIPTS); scriptFile = scriptsPath.resolve(CardDefinitions.getScriptFilename(card)).toFile(); groovyFile = scriptsPath.resolve(CardDefinitions.getGroovyFilename(card)).toFile(); isGroovy = groovyFile.exists(); setLookAndFeel(); setLayout(); refreshContent(); } public void refreshContent() { scriptViewer.setTextFile(scriptFile); if (isGroovy) { groovyViewer.setTextFile(groovyFile); } } private void setLayout() { removeAll(); migLayout.setLayoutConstraints("insets 0, gap 0"); add(sidebar, "h 100%"); add(isGroovy ? splitter : scriptViewer.component(), "w 100%, h 100%"); } private void setLookAndFeel() { setLayout(migLayout); setOpaque(false); if (isGroovy) { splitter.setOneTouchExpandable(true); splitter.setLeftComponent(scriptViewer.component()); splitter.setRightComponent(groovyViewer.component()); splitter.setResizeWeight(0.5); splitter.setDividerSize(14); splitter.setBorder(null); splitter.setOpaque(false); } } }