Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Change overlay to support multiple overlays #1534

Merged
merged 1 commit into from
Apr 14, 2020
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
59 changes: 57 additions & 2 deletions src/main/java/net/rptools/lib/swing/SwingUtil.java
Original file line number Diff line number Diff line change
Expand Up @@ -33,20 +33,26 @@
import java.io.IOException;
import java.util.LinkedList;
import java.util.List;
import javafx.application.Platform;
import javafx.scene.ImageCursor;
import javax.swing.JComponent;
import javax.swing.SwingUtilities;
import net.rptools.lib.image.ImageUtil;
import net.rptools.maptool.client.tool.MeasureTool;

/** */
public class SwingUtil {
public static Cursor emptyCursor;
public static javafx.scene.Cursor emptyCursorFX;
private static final String PATH_EMPTY = "net/rptools/lib/swing/image/empty.png";

static {
try {
emptyCursor =
Toolkit.getDefaultToolkit()
.createCustomCursor(
ImageUtil.getImage("net/rptools/lib/swing/image/empty.png"), new Point(0, 0), "");
.createCustomCursor(ImageUtil.getImage(PATH_EMPTY), new Point(0, 0), "");
Platform.runLater(
() -> emptyCursorFX = new ImageCursor(new javafx.scene.image.Image(PATH_EMPTY), 0, 0));
} catch (IOException ioe) {
ioe.printStackTrace();
}
Expand Down Expand Up @@ -291,4 +297,53 @@ public static JComponent getComponent(JComponent container, String name) {
public static boolean hasComponent(JComponent container, String name) {
return getComponent(container, name) != null;
}

/**
* Returns the JavaFX cursor equivalent of a Swing cursor
*
* @param cursor the Swing cursor
* @return the JavaFX cursor
*/
public static javafx.scene.Cursor swingCursorToFX(Cursor cursor) {
if (cursor == null) {
return javafx.scene.Cursor.DEFAULT;
}
if (cursor == emptyCursor) {
return emptyCursorFX;
}
if (cursor == MeasureTool.getMeasureCursor()) {
return MeasureTool.getMeasureCursorFX();
}

switch (cursor.getType()) {
case Cursor.CROSSHAIR_CURSOR:
return javafx.scene.Cursor.CROSSHAIR;
case Cursor.E_RESIZE_CURSOR:
return javafx.scene.Cursor.E_RESIZE;
case Cursor.HAND_CURSOR:
return javafx.scene.Cursor.HAND;
case Cursor.MOVE_CURSOR:
return javafx.scene.Cursor.MOVE;
case Cursor.N_RESIZE_CURSOR:
return javafx.scene.Cursor.N_RESIZE;
case Cursor.NE_RESIZE_CURSOR:
return javafx.scene.Cursor.NE_RESIZE;
case Cursor.NW_RESIZE_CURSOR:
return javafx.scene.Cursor.NW_RESIZE;
case Cursor.S_RESIZE_CURSOR:
return javafx.scene.Cursor.S_RESIZE;
case Cursor.SE_RESIZE_CURSOR:
return javafx.scene.Cursor.SE_RESIZE;
case Cursor.SW_RESIZE_CURSOR:
return javafx.scene.Cursor.SW_RESIZE;
case Cursor.TEXT_CURSOR:
return javafx.scene.Cursor.TEXT;
case Cursor.W_RESIZE_CURSOR:
return javafx.scene.Cursor.W_RESIZE;
case Cursor.WAIT_CURSOR:
return javafx.scene.Cursor.WAIT;
default:
return javafx.scene.Cursor.DEFAULT;
}
}
}
3 changes: 2 additions & 1 deletion src/main/java/net/rptools/maptool/client/MapTool.java
Original file line number Diff line number Diff line change
Expand Up @@ -998,7 +998,8 @@ public static void setCampaign(Campaign campaign, GUID defaultRendererId) {
AssetManager.updateRepositoryList();
MapTool.getFrame().getCampaignPanel().reset();
MapTool.getFrame().getGmPanel().reset();
MapTool.getFrame().getHtmlOverlay().closeRequest(); // overlay vanishes after campaign change
// overlay vanishes after campaign change
MapTool.getFrame().getOverlayPanel().removeAllOverlays();
UserDefinedMacroFunctions.getInstance().loadCampaignLibFunctions();
}

Expand Down
24 changes: 15 additions & 9 deletions src/main/java/net/rptools/maptool/client/MapToolLineParser.java
Original file line number Diff line number Diff line change
Expand Up @@ -39,6 +39,7 @@
import net.rptools.maptool.client.functions.ReturnFunction.ReturnFunctionException;
import net.rptools.maptool.client.functions.json.JSONMacroFunctions;
import net.rptools.maptool.client.ui.htmlframe.HTMLFrameFactory;
import net.rptools.maptool.client.ui.htmlframe.HTMLFrameFactory.FrameType;
import net.rptools.maptool.client.ui.macrobuttons.buttons.MacroButtonPrefs;
import net.rptools.maptool.client.ui.zone.ZoneRenderer;
import net.rptools.maptool.language.I18N;
Expand Down Expand Up @@ -359,7 +360,7 @@ private enum OptionType {
// HTML webView
FRAME5("frame5", 1, 2, "\"\""),
// HTML overlay
OVERLAY("overlay", 0, 1, "\"\""),
OVERLAY("overlay", 1, 2, "\"\""),
// Run for another token
TOKEN("token", 1, 1);

Expand Down Expand Up @@ -1037,8 +1038,9 @@ public String parseLine(
break;
case OVERLAY:
codeType = CodeType.CODEBLOCK;
frameName = option.getParsedParam(0, resolver, tokenInContext).toString();
frameOpts = option.getParsedParam(1, resolver, tokenInContext).toString();
outputTo = OutputLoc.OVERLAY;
frameOpts = option.getParsedParam(0, resolver, tokenInContext).toString();
break;
///////////////////////////////////////////////////
// CODE OPTIONS
Expand Down Expand Up @@ -1431,26 +1433,30 @@ public String parseLine(
switch (outputTo) {
case FRAME:
HTMLFrameFactory.show(
frameName, true, false, frameOpts, expressionBuilder.toString());
frameName, FrameType.FRAME, false, frameOpts, expressionBuilder.toString());
break;
case DIALOG:
HTMLFrameFactory.show(
frameName, false, false, frameOpts, expressionBuilder.toString());
frameName, FrameType.DIALOG, false, frameOpts, expressionBuilder.toString());
break;
case OVERLAY:
MapTool.getFrame()
.getHtmlOverlay()
.updateContents(expressionBuilder.toString(), true);
HTMLFrameFactory.show(
frameName, FrameType.OVERLAY, true, frameOpts, expressionBuilder.toString());
break;
case CHAT:
builder.append(expressionBuilder);
break;
case FRAME5:
HTMLFrameFactory.show(frameName, true, true, frameOpts, expressionBuilder.toString());
HTMLFrameFactory.show(
frameName, FrameType.FRAME, true, frameOpts, expressionBuilder.toString());
break;
case DIALOG5:
HTMLFrameFactory.show(
frameName, false, true, frameOpts, expressionBuilder.toString());
frameName,
HTMLFrameFactory.FrameType.DIALOG,
true,
frameOpts,
expressionBuilder.toString());
break;
}

Expand Down
30 changes: 23 additions & 7 deletions src/main/java/net/rptools/maptool/client/tool/MeasureTool.java
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,8 @@
import java.io.IOException;
import java.text.NumberFormat;
import java.util.Map;
import javafx.application.Platform;
import javafx.scene.ImageCursor;
import javax.swing.AbstractAction;
import javax.swing.Action;
import javax.swing.ImageIcon;
Expand All @@ -48,24 +50,38 @@ public class MeasureTool extends DefaultTool implements ZoneOverlay {

private ZoneWalker walker;
private Path<ZonePoint> gridlessPath;
private Cursor measureCursor;
private static Cursor measureCursor;
private static javafx.scene.Cursor measureCursorFX;

private static final String PATH_RULER_IMG =
"net/rptools/maptool/client/image/tool/ruler-blue.png";
private static final String PATH_MEASURE_IMG =
"net/rptools/maptool/client/image/cursor-tape-measure.png";

public MeasureTool() {
try {
setIcon(
new ImageIcon(
ImageUtil.getImage("net/rptools/maptool/client/image/tool/ruler-blue.png")));
setIcon(new ImageIcon(ImageUtil.getImage(PATH_RULER_IMG)));
measureCursor =
Toolkit.getDefaultToolkit()
.createCustomCursor(
ImageUtil.getImage("net/rptools/maptool/client/image/cursor-tape-measure.png"),
new Point(2, 28),
CURSOR_NAME);
ImageUtil.getImage(PATH_MEASURE_IMG), new Point(2, 28), CURSOR_NAME);
Platform.runLater(
() ->
measureCursorFX =
new ImageCursor(new javafx.scene.image.Image(PATH_MEASURE_IMG), 2, 28));
} catch (IOException ioe) {
ioe.printStackTrace();
}
}

public static Cursor getMeasureCursor() {
return measureCursor;
}

public static javafx.scene.Cursor getMeasureCursorFX() {
return measureCursorFX;
}

@Override
protected void attachTo(ZoneRenderer renderer) {
renderer.setCursor(measureCursor);
Expand Down
16 changes: 8 additions & 8 deletions src/main/java/net/rptools/maptool/client/ui/MapToolFrame.java
Original file line number Diff line number Diff line change
Expand Up @@ -112,7 +112,7 @@
import net.rptools.maptool.client.ui.drawpanel.DrawPanelTreeCellRenderer;
import net.rptools.maptool.client.ui.drawpanel.DrawPanelTreeModel;
import net.rptools.maptool.client.ui.drawpanel.DrawablesPanel;
import net.rptools.maptool.client.ui.htmlframe.HTMLOverlay;
import net.rptools.maptool.client.ui.htmlframe.HTMLOverlayPanel;
import net.rptools.maptool.client.ui.lookuptable.LookupTablePanel;
import net.rptools.maptool.client.ui.macrobuttons.buttons.MacroButton;
import net.rptools.maptool.client.ui.macrobuttons.panels.*;
Expand Down Expand Up @@ -172,7 +172,7 @@ public class MapToolFrame extends DefaultDockableHolder
/** The panel showing the initiative order. */
private final InitiativePanel initiativePanel;
/** The HTML pane showing the map overlay. */
private final HTMLOverlay htmlOverlay;
private HTMLOverlayPanel overlayPanel;

private final PointerOverlay pointerOverlay;
private final CommandPanel commandPanel;
Expand Down Expand Up @@ -456,7 +456,7 @@ public MapToolFrame(JMenuBar menuBar) {
connectionPanel = createConnectionPanel();
toolbox = new Toolbox();
initiativePanel = createInitiativePanel();
htmlOverlay = new HTMLOverlay();
overlayPanel = new HTMLOverlayPanel();

zoneRendererList = new CopyOnWriteArrayList<ZoneRenderer>();
pointerOverlay = new PointerOverlay();
Expand Down Expand Up @@ -512,8 +512,8 @@ public MapToolFrame(JMenuBar menuBar) {
rendererBorderPanel.add(zoneRendererPanel);
toolbarPanel = new ToolbarPanel(toolbox);

zoneRendererPanel.add(htmlOverlay, PositionalLayout.Position.CENTER, 0);
htmlOverlay.setVisible(false); // disabled by default
zoneRendererPanel.add(overlayPanel, PositionalLayout.Position.CENTER, 0);
overlayPanel.setVisible(false); // disabled by default

// Put it all together
setJMenuBar(menuBar);
Expand Down Expand Up @@ -1524,9 +1524,9 @@ public ZoneRenderer getCurrentZoneRenderer() {
return currentRenderer;
}

/** @return the HTMLOverlay */
public HTMLOverlay getHtmlOverlay() {
return htmlOverlay;
/** @return the HTML Overlay Panel */
public HTMLOverlayPanel getOverlayPanel() {
return overlayPanel;
}

public void addZoneRenderer(ZoneRenderer renderer) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -155,7 +155,7 @@ public void windowClosing(WindowEvent e) {
*/
public void addHTMLPanel(boolean scrollBar, boolean isHTML5) {
if (isHTML5) {
panel = new HTMLJFXPanel(this);
panel = new HTMLJFXPanel(this, new HTMLWebViewManager());
} else {
panel = new HTMLPanel(this, scrollBar);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -162,7 +162,7 @@ public boolean getTemporary() {
*/
public void addHTMLPanel(boolean isHTML5) {
if (isHTML5) {
panel = new HTMLJFXPanel(this);
panel = new HTMLJFXPanel(this, new HTMLWebViewManager());
} else {
panel = new HTMLPanel(this, true);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -27,26 +27,33 @@
public class HTMLFrameFactory {
private HTMLFrameFactory() {}

public enum FrameType {
FRAME,
DIALOG,
OVERLAY
}

private static HTMLFrameFactory.Listener listener;

/**
* Shows a dialog or frame based on the options.
*
* @param name The name of the dialog or frame.
* @param isFrame Is it a frame.
* @param frameType The type of the frame.
* @param isHTML5 Does it use HTML5 (JavaFX) or HTML 3.2 (Swing).
* @param properties The properties that determine the attributes of the frame or dialog.
* @param html The html contents of frame or dialog.
*/
public static void show(
String name, boolean isFrame, boolean isHTML5, String properties, String html) {
String name, FrameType frameType, boolean isHTML5, String properties, String html) {
if (listener == null) {
listener = new HTMLFrameFactory.Listener();
}
boolean input = false;
boolean temporary = false;
int width = -1;
int height = -1;
int zOrder = 0;
String title = name;
String tabTitle = null;
Object frameValue = null;
Expand Down Expand Up @@ -94,6 +101,12 @@ public static void show(
} catch (NumberFormatException e) {
// Ignoring the value; shouldn't we warn the user?
}
} else if (keyLC.equals("zorder")) {
try {
zOrder = Integer.parseInt(value);
} catch (NumberFormatException e) {
// Ignoring the value; shouldn't we warn the user?
}
} else if (keyLC.equals("title")) {
title = value;
} else if (keyLC.equals("noframe")) {
Expand Down Expand Up @@ -127,10 +140,10 @@ public static void show(
}
}
if (tabTitle == null) tabTitle = title; // if tabTitle not set, make it same as title
if (isFrame) {
if (frameType == FrameType.FRAME) {
HTMLFrame.showFrame(
name, title, tabTitle, width, height, temporary, scrollReset, isHTML5, frameValue, html);
} else {
} else if (frameType == FrameType.DIALOG) {
HTMLDialog.showDialog(
name,
title,
Expand All @@ -144,28 +157,30 @@ public static void show(
isHTML5,
frameValue,
html);
} else if (frameType == FrameType.OVERLAY) {
MapTool.getFrame().getOverlayPanel().showOverlay(name, zOrder, html);
}
}

/** The list of selected tokens changed. */
public static void selectedListChanged() {
HTMLFrame.doSelectedChanged();
HTMLDialog.doSelectedChanged();
MapTool.getFrame().getHtmlOverlay().doSelectedChanged();
MapTool.getFrame().getOverlayPanel().doSelectedChanged();
}

/** A new token has been impersonated or cleared. */
public static void impersonateToken() {
HTMLFrame.doImpersonatedChanged();
HTMLDialog.doImpersonatedChanged();
MapTool.getFrame().getHtmlOverlay().doImpersonatedChanged();
MapTool.getFrame().getOverlayPanel().doImpersonatedChanged();
}

/** One of the tokens has changed. */
public static void tokenChanged(Token token) {
HTMLFrame.doTokenChanged(token);
HTMLDialog.doTokenChanged(token);
MapTool.getFrame().getHtmlOverlay().doTokenChanged(token);
MapTool.getFrame().getOverlayPanel().doTokenChanged(token);
}

public static class Listener implements ModelChangeListener, AppEventListener {
Expand Down
Loading