Skip to content

Commit

Permalink
PoC - Migration to PaletteViewer
Browse files Browse the repository at this point in the history
This re-implements the palette using the native GEF classes.

Open topics:
 - Look & Feel
 - Dragging of categories
 - Tooltips
  • Loading branch information
ptziegler committed Oct 3, 2024
1 parent 1cf373d commit 293a312
Show file tree
Hide file tree
Showing 4 changed files with 60 additions and 26 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -129,6 +129,7 @@ public void setInput(IEditPartViewer editPartViewer,
final JavaInfo rootJavaInfo,
String toolkitId) {
m_editPartViewer = editPartViewer;
m_editPartViewer.getEditDomain().setPaletteViewer(m_paletteComposite.getPaletteViewer());
m_rootJavaInfo = rootJavaInfo;
//
if (m_rootJavaInfo != null) {
Expand Down Expand Up @@ -425,6 +426,7 @@ public void moveEntry(IEntry _entry, ICategory _targetCategory, IEntry _nextEntr
}
}
m_paletteComposite.setPalette(palette);
m_editPartViewer.getEditDomain().setPaletteRoot(palette);
configure_EditDomain_DefaultTool();
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,9 @@
*
* @author scheglov_ke
* @coverage core.control.palette
* @deprecated Use {@link DesignerPaletteViewerPreferences} instead.
*/
@Deprecated(forRemoval = true)
public final class DefaultPalettePreferences implements IPalettePreferences {
@Override
public FontDescriptor getCategoryFontDescriptor() {
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
/*******************************************************************************
* Copyright (c) 2024 Patrick Ziegler and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* Patrick Ziegler - initial API and implementation
*******************************************************************************/
package org.eclipse.wb.core.controls.palette;

import org.eclipse.gef.ui.palette.DefaultPaletteViewerPreferences;

public final class DesignerPaletteViewerPreferences extends DefaultPaletteViewerPreferences {
public DesignerPaletteViewerPreferences() {
setAutoCollapseSetting(COLLAPSE_NEVER);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -18,10 +18,9 @@
import org.eclipse.wb.internal.core.utils.GenericsUtils;
import org.eclipse.wb.internal.core.utils.reflect.ReflectionUtils;
import org.eclipse.wb.internal.core.utils.ui.DrawUtils;
import org.eclipse.wb.internal.draw2d.FigureCanvas;
import org.eclipse.wb.internal.draw2d.TargetFigureFindVisitor;

import org.eclipse.draw2d.ColorConstants;
import org.eclipse.draw2d.FigureCanvas;
import org.eclipse.draw2d.FigureUtilities;
import org.eclipse.draw2d.Graphics;
import org.eclipse.draw2d.IFigure;
Expand All @@ -31,7 +30,11 @@
import org.eclipse.draw2d.geometry.Dimension;
import org.eclipse.draw2d.geometry.Point;
import org.eclipse.draw2d.geometry.Rectangle;
import org.eclipse.gef.GraphicalEditPart;
import org.eclipse.gef.commands.Command;
import org.eclipse.gef.palette.PaletteRoot;
import org.eclipse.gef.palette.ToolEntry;
import org.eclipse.gef.ui.palette.PaletteViewer;
import org.eclipse.jface.action.Action;
import org.eclipse.jface.action.IMenuManager;
import org.eclipse.jface.action.MenuManager;
Expand All @@ -47,10 +50,8 @@
import org.eclipse.swt.layout.FillLayout;
import org.eclipse.swt.widgets.Composite;

import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;

/**
* The palette control.
Expand Down Expand Up @@ -111,13 +112,13 @@ private static Image loadImage(String path) {
private final FigureCanvas m_figureCanvas;
private final PaletteFigure m_paletteFigure;
private final Layer m_feedbackLayer;
private final Map<ICategory, CategoryFigure> m_categoryFigures = new HashMap<>();
private final ResourceManager m_resourceManager = new LocalResourceManager(JFaceResources.getResources());
private MenuManager m_menuManager;
private IPalette m_palette;
private IEntry m_selectedEntry;
private Object m_forcedTargetObject;
private int m_layoutType;
private final PaletteViewer m_paletteViewer;

////////////////////////////////////////////////////////////////////////////
//
Expand All @@ -131,13 +132,21 @@ public PaletteComposite(Composite parent, int style) {
setLayout(new FillLayout());
// prepare draw2d FigureCanvas
{
m_figureCanvas = new FigureCanvas(this, SWT.V_SCROLL);
m_figureCanvas.getRootFigure().setBackgroundColor(COLOR_PALETTE_BACKGROUND);
m_figureCanvas.getRootFigure().setForegroundColor(COLOR_TEXT_ENABLED);
m_paletteViewer = new PaletteViewer();
m_paletteViewer.addPaletteListener((palette, tool) -> {
// TODO Keep entry selected when CTRL key is pressed
selectEntry((IEntry) tool, false);
});
m_paletteViewer.enableVerticalScrollbar(true);
m_paletteViewer.setPaletteViewerPreferences(new DesignerPaletteViewerPreferences());
m_figureCanvas = (FigureCanvas) m_paletteViewer.createControl(this);
m_figureCanvas.setHorizontalScrollBarVisibility(FigureCanvas.NEVER);
m_figureCanvas.setScrollbarsMode(SWT.NONE);
m_figureCanvas.getLightweightSystem().getRootFigure().setBackgroundColor(COLOR_PALETTE_BACKGROUND);
m_figureCanvas.getLightweightSystem().getRootFigure().setForegroundColor(COLOR_TEXT_ENABLED);
}
// add palette figure (layer)
m_paletteFigure = new PaletteFigure();
m_figureCanvas.getRootFigure().add(m_paletteFigure);
// set menu
{
m_menuManager = new MenuManager();
Expand All @@ -148,7 +157,7 @@ public PaletteComposite(Composite parent, int style) {
// add feedback layer
{
m_feedbackLayer = new Layer("feedback");
m_figureCanvas.getRootFigure().add(m_feedbackLayer);
m_figureCanvas.getLightweightSystem().getRootFigure().add(m_feedbackLayer);
}
m_layoutType = m_preferences.getLayoutType();
}
Expand All @@ -162,10 +171,8 @@ private void addPopupActions(IMenuManager menuManager) {
{
org.eclipse.swt.graphics.Point cursorLocation = getDisplay().getCursorLocation();
cursorLocation = m_figureCanvas.toControl(cursorLocation);
TargetFigureFindVisitor visitor =
new TargetFigureFindVisitor(m_figureCanvas, cursorLocation.x, cursorLocation.y);
m_figureCanvas.getRootFigure().accept(visitor, false);
targetFigure = visitor.getTargetFigure();
targetFigure = (Figure) ((GraphicalEditPart) m_paletteViewer.findObjectAt(new Point(cursorLocation)))
.getFigure();
}
// prepare target object
Object targetObject = null;
Expand Down Expand Up @@ -205,6 +212,7 @@ public void dispose() {
@SuppressWarnings("removal")
public void setPalette(IPalette palette) {
m_palette = palette;
m_paletteViewer.setPaletteRoot((PaletteRoot) palette);
refreshPalette();
}

Expand Down Expand Up @@ -233,6 +241,9 @@ public void setPreferences(IPalettePreferences preferences) {
*/
@SuppressWarnings("removal")
public void selectEntry(IEntry selectedEntry, boolean reload) {
if (m_selectedEntry == selectedEntry) {
return;
}
// activate new entry
m_selectedEntry = selectedEntry;
if (m_selectedEntry != null) {
Expand All @@ -242,6 +253,7 @@ public void selectEntry(IEntry selectedEntry, boolean reload) {
m_palette.selectDefault();
}
}
m_paletteViewer.setActiveTool((ToolEntry) selectedEntry);
// display updated state
m_paletteFigure.repaint();
}
Expand All @@ -251,16 +263,15 @@ public void selectEntry(IEntry selectedEntry, boolean reload) {
*/
@SuppressWarnings("removal")
public Figure getCategoryFigure(ICategory category) {
return m_categoryFigures.get(category);
return ((CategoryEditPart) m_paletteViewer.getEditPartForModel(category)).getFigure();
}

/**
* @return the {@link Figure} used for displaying {@link IEntry}.
*/
@SuppressWarnings("removal")
public Figure getEntryFigure(ICategory category, IEntry entry) {
CategoryFigure categoryFigure = m_categoryFigures.get(category);
return categoryFigure.m_entryFigures.get(entry);
return ((EntryEditPart) m_paletteViewer.getEditPartForModel(entry)).getFigure();
}

/**
Expand All @@ -277,6 +288,13 @@ public PaletteFigure getPaletteFigure() {
return m_paletteFigure;
}

/**
* @noreference This method is not intended to be referenced by clients.
*/
public PaletteViewer getPaletteViewer() {
return m_paletteViewer;
}

////////////////////////////////////////////////////////////////////////////
//
// PaletteFigure
Expand Down Expand Up @@ -305,12 +323,10 @@ public PaletteFigure() {
//
////////////////////////////////////////////////////////////////////////////
public void refresh() {
m_categoryFigures.clear();
removeAll();
// add new CategoryFigure's
for (ICategory category : m_palette.getCategories()) {
CategoryFigure categoryFigure = new CategoryFigure(category);
m_categoryFigures.put(category, categoryFigure);
add(categoryFigure);
}
// do initial layout
Expand Down Expand Up @@ -371,7 +387,6 @@ protected void layout() {
//
////////////////////////////////////////////////////////////////////////////
private final ICategory m_category;
private final Map<IEntry, EntryFigure> m_entryFigures = new HashMap<>();
private int m_columns;
private int m_titleHeight;

Expand All @@ -390,7 +405,6 @@ public CategoryFigure(ICategory category) {
IEntry entry = (IEntry) element;
// add figure
EntryFigure entryFigure = new EntryFigure(entry);
m_entryFigures.put(entry, entryFigure);
add(entryFigure);
}
}
Expand Down Expand Up @@ -997,7 +1011,7 @@ protected void paintClientArea(Graphics graphics) {
Rectangle r = getClientArea().getCopy().shrink(1, 1);
// draw background
graphics.pushState();
boolean isSelected = m_entry == m_selectedEntry;
boolean isSelected = m_entry == m_paletteViewer.getActiveTool();
if (isSelected || m_mouseDown) {
if (isSelected) {
graphics.setBackgroundColor(COLOR_ENTRY_SELECTED);
Expand Down Expand Up @@ -1187,10 +1201,7 @@ private Figure getTargetFigure(Figure source, Point p) {
Point absoluteLocation = p.getCopy();
FigureUtils.translateFigureToCanvas(source, absoluteLocation);
// do search
TargetFigureFindVisitor visitor =
new TargetFigureFindVisitor(m_figureCanvas, absoluteLocation.x, absoluteLocation.y);
m_figureCanvas.getRootFigure().accept(visitor, false);
return visitor.getTargetFigure();
return (Figure) ((GraphicalEditPart) m_paletteViewer.findObjectAt(new Point(absoluteLocation))).getFigure();
}

/**
Expand Down

0 comments on commit 293a312

Please sign in to comment.