/*
* Copyright 2003-2016 JetBrains s.r.o.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package jetbrains.mps.typesystem.uiActions;
import com.intellij.openapi.ui.LabeledComponent;
import com.intellij.openapi.ui.Splitter;
import jetbrains.mps.errors.IErrorReporter;
import jetbrains.mps.openapi.navigation.EditorNavigator;
import jetbrains.mps.project.Project;
import jetbrains.mps.smodel.ModelAccessHelper;
import jetbrains.mps.util.Computable;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.mps.openapi.model.SModel;
import org.jetbrains.mps.openapi.model.SNode;
import javax.swing.AbstractAction;
import javax.swing.Action;
import javax.swing.JComponent;
import java.awt.event.ActionEvent;
public class MyBaseNodeDialog extends BaseNodeDialog {
private final SNode myType;
private SModel myModel;
private final IErrorReporter myError;
private boolean myWasRegistered = true;
private Splitter myMainComponent;
private JComponent mySupertypesViewComponent;
public MyBaseNodeDialog(Project mpsProject, String title, SNode type, IErrorReporter error) {
super(mpsProject, title);
SupertypesViewTool supertypesView = mpsProject.getComponent(SupertypesViewTool.class);
mySupertypesViewComponent = supertypesView.getComponent();
myMainComponent = new Splitter(false);
myMainComponent.setFirstComponent(super.getMainComponent());
myMainComponent.setSecondComponent(LabeledComponent.create(mySupertypesViewComponent, "Supertypes"));
myType = type;
myModel = myType.getModel();
myError = error;
supertypesView.showItemInHierarchy(myType);
//setHorizontalStretch(1f);
//setHorizontalStretch(1f);
init();
}
@Override
protected JComponent createCenterPanel() {
return myMainComponent;
}
@NotNull
@Override
protected Action[] createActions() {
if(myError != null) {
String s = new ModelAccessHelper(getProject().getModelAccess()).runReadAction(new Computable<String>() {
public String compute() {
return myError.reportError();
}
});
setErrorText(s);
if (myError.getRuleNode() != null) {
return new Action[]{getOKAction(), new AbstractAction("Go To Rule") {
public void actionPerformed(ActionEvent e) {
new EditorNavigator(getProject()).shallSelect(true).open(myError.getRuleNode());
}
}};
}
}
return new Action[]{getOKAction()};
}
@Override
protected SNode getNode() {
return myType;
}
@Override
protected void dispose() {
if (mySupertypesViewComponent != null && mySupertypesViewComponent.getParent() != null) {
mySupertypesViewComponent.getParent().remove(mySupertypesViewComponent);
}
getProject().getModelAccess().runWriteAction(new Runnable() {
public void run() {
if (!myWasRegistered) {
myModel.removeRootNode(myType.getContainingRoot());
myWasRegistered = true;
}
MyBaseNodeDialog.super.dispose();
}
});
}
}