package jetbrains.mps.lang.editor.editor; /*Generated by MPS */ import javax.swing.JButton; import org.jetbrains.mps.openapi.model.SNode; import jetbrains.mps.openapi.editor.EditorContext; import jetbrains.mps.nodeEditor.EditorSettings; import javax.swing.plaf.metal.MetalBorders; import javax.swing.AbstractAction; import java.awt.event.ActionEvent; import java.awt.Component; import javax.swing.SwingUtilities; import java.awt.Frame; import jetbrains.mps.ide.ui.filechoosers.treefilechooser.TreeFileChooser; import jetbrains.mps.baseLanguage.closures.runtime.Wrappers; import org.jetbrains.mps.openapi.module.ModelAccess; import jetbrains.mps.lang.smodel.generator.smodelAdapter.SPropertyOperations; import jetbrains.mps.smodel.adapter.structure.MetaAdapterFactory; import jetbrains.mps.project.AbstractModule; import jetbrains.mps.lang.smodel.generator.smodelAdapter.SNodeOperations; import jetbrains.mps.util.MacroHelper; import jetbrains.mps.util.MacrosFactory; import java.io.File; import jetbrains.mps.vfs.FileSystem; import jetbrains.mps.vfs.IFile; import jetbrains.mps.editor.runtime.commands.EditorCommand; public class SelectImageFileButton extends JButton { private final SNode myNode; private final EditorContext myEditorContext; public SelectImageFileButton(SNode node, EditorContext editorContext) { this.myNode = node; this.myEditorContext = editorContext; this.setFont(EditorSettings.getInstance().getDefaultEditorFont()); this.setBorder(new MetalBorders.ButtonBorder()); this.setAction(new AbstractAction(" ... ") { @Override public void actionPerformed(ActionEvent e) { Component root = SwingUtilities.getRoot(SelectImageFileButton.this); if (root instanceof Frame) { Frame frame = (Frame) root; TreeFileChooser chooser = new TreeFileChooser(); final Wrappers._T<String> filename = new Wrappers._T<String>(null); ModelAccess modelAccess = myEditorContext.getRepository().getModelAccess(); modelAccess.runReadAction(new Runnable() { public void run() { filename.value = SPropertyOperations.getString(myNode, MetaAdapterFactory.getProperty(0x18bc659203a64e29L, 0xa83a7ff23bde13baL, 0x1095e12de6fL, 0x1095e2f7e63L, "imageFile")); } }); AbstractModule module = (AbstractModule) SNodeOperations.getModel(myNode).getModule(); MacroHelper macroHelper = MacrosFactory.forModule(module); if (macroHelper != null) { filename.value = macroHelper.expandPath(filename.value); } final File baseFile = (filename.value == null ? null : new File(filename.value)); if (baseFile != null && baseFile.exists()) { chooser.setInitialFile(FileSystem.getInstance().getFileByPath(baseFile.getAbsolutePath())); } IFile result = chooser.showDialog(frame); if (result == null) { return; } String selectedPath = result.getPath(); final String pathToShow = (macroHelper == null ? selectedPath : macroHelper.shrinkPath(selectedPath)); modelAccess.executeCommand(new EditorCommand(myEditorContext) { protected void doExecute() { SPropertyOperations.set(SelectImageFileButton.this.myNode, MetaAdapterFactory.getProperty(0x18bc659203a64e29L, 0xa83a7ff23bde13baL, 0x1095e12de6fL, 0x1095e2f7e63L, "imageFile"), pathToShow); } }); } } }); } }