protected void paintWithColor(Graphics g, EditorCell cell, Color color) { int x = cell.getX() + cell.getLeftInset(); int y = cell.getY(); int width = cell.getWidth() - cell.getLeftInset() - cell.getRightInset() - 1; int height = cell.getHeight() - cell.getTopInset() - cell.getBottomInset() - 1; g.setColor(color); g.drawRect(x, y, width, height); color = new Color(color.getRed(), color.getGreen(), color.getBlue(), color.getAlpha() / 5); g.setColor(color); g.fillRect(x, y, width, height); }
@Override public int compare( IconRendererLayoutConstraint constraint1, IconRendererLayoutConstraint constraint2) { if (constraint1 == constraint2) { return 0; } EditorMessageIconRenderer renderer1 = constraint1.getIconRenderer(); EditorMessageIconRenderer renderer2 = constraint2.getIconRenderer(); if (renderer1.getType() != renderer2.getType()) { return renderer1.getType().getWeight() - renderer2.getType().getWeight(); } jetbrains.mps.openapi.editor.cells.EditorCell anchorCell1 = getAnchorCell(renderer1); jetbrains.mps.openapi.editor.cells.EditorCell anchorCell2 = getAnchorCell(renderer2); // [++] Debugging assertion if (anchorCell1 == anchorCell2 && renderer1 instanceof EditorMessage && renderer2 instanceof EditorMessage) { EditorMessage editorMessage1 = (EditorMessage) renderer1; EditorMessage editorMessage2 = (EditorMessage) renderer2; assert false : "Two EditorMessages with same type are attached to the same EditorCell: m1 = " + editorMessage1 + ", m2 = " + editorMessage2 + "; owner1 = " + editorMessage1.getOwner() + ", owner2 = " + editorMessage2.getOwner(); } // [--] Debugging assertion if (anchorCell1 != null) { if (anchorCell2 == null) { return 1; } else { return anchorCell1.getX() - anchorCell2.getX(); } } else if (anchorCell2 != null) { return -1; } return 0; }
public static void showCreateNewRootMenu( @NotNull jetbrains.mps.openapi.editor.EditorContext editorContext, @Nullable Setter<SNode> newRootHandler, @Nullable Condition<SConcept> conceptsFilter) { final EditorCell selectedCell = editorContext.getSelectedCell(); int x = selectedCell.getX(); int y = selectedCell.getY(); if (selectedCell instanceof EditorCell_Label) { y += selectedCell.getHeight(); } Component editorComponent = ((EditorContext) editorContext).getNodeEditorComponent(); final DataContext dataContext = DataManager.getInstance().getDataContext(editorComponent, x, y); final SModel model = selectedCell.getSNode().getModel(); if (conceptsFilter == null) { conceptsFilter = Condition.TRUE_CONDITION; } BaseGroup group = new BaseGroup(""); Set<SLanguage> modelLanguages = new SLanguageHierarchy(SModelOperations.getAllLanguageImports(model)).getExtended(); SLanguage[] languages = modelLanguages.toArray(new SLanguage[modelLanguages.size()]); Arrays.sort(languages, new ToStringComparator()); for (SLanguage language : languages) { boolean hasChildren = false; for (SAbstractConcept ac : language.getConcepts()) { if (!(ac instanceof SConcept)) { continue; } final SConcept concept = (SConcept) ac; if (concept.isRootable() && conceptsFilter.met(concept)) { group.add(new AddNewRootAction(model, concept, newRootHandler)); hasChildren = true; } } if (hasChildren) { group.addSeparator(); } } ListPopup popup = JBPopupFactory.getInstance() .createActionGroupPopup( IdeBundle.message("title.popup.new.element"), group, dataContext, JBPopupFactory.ActionSelectionAid.SPEEDSEARCH, false); // popup.showInBestPositionFor(dataContext); popup.show(new RelativePoint(editorComponent, new Point(x, y))); }
@Override public void paint(Graphics g, ParentSettings parentSettings) { ParentSettings settings = isSelectionPaintedOnAncestor(parentSettings); if (!settings.isSelectionPainted()) { settings = (paintBackground(g, parentSettings)); } paintSelectionIfRequired(g, parentSettings); paintContent(g, parentSettings); for (EditorCell child : this) { if (g.hitClip(child.getX(), child.getY(), child.getWidth(), child.getHeight())) { ((jetbrains.mps.nodeEditor.cells.EditorCell) child).paint(g, settings); } } paintDecorations(g); }
@Override public void paintSelection( Graphics g, Color c, boolean drawBorder, ParentSettings parentSettings) { List<? extends EditorCell> selectionCells = myCellLayout.getSelectionCells(this); if (selectionCells != null) { ParentSettings selection = isSelectionPaintedOnAncestor(parentSettings); for (EditorCell cell : selectionCells) { if (g.hitClip(cell.getX(), cell.getY(), cell.getWidth(), cell.getHeight())) { ((jetbrains.mps.nodeEditor.cells.EditorCell) cell).paintSelection(g, c, false, selection); } } } else { List<Rectangle> selection = myCellLayout.getSelectionBounds(this); g.setColor(c); for (Rectangle part : selection) { g.fillRect(part.x, part.y, part.width, part.height); } } }