mirror of
https://git.huckle.dev/Huckles-Minecraft-Archive/jpexs-decompiler.git
synced 2026-07-13 23:08:10 +00:00
Added #1680 Pinning objects
Fixed Header of display panel not visible on certain color schemes Changed Raw editor does not show tag name in the tree (it's now in the new pinnable head)
This commit is contained in:
324
src/com/jpexs/decompiler/flash/gui/PinButton.java
Normal file
324
src/com/jpexs/decompiler/flash/gui/PinButton.java
Normal file
@@ -0,0 +1,324 @@
|
||||
/*
|
||||
* Copyright (C) 2022 JPEXS
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
package com.jpexs.decompiler.flash.gui;
|
||||
|
||||
import com.jpexs.decompiler.flash.configuration.Configuration;
|
||||
import com.jpexs.decompiler.flash.gui.tagtree.AbstractTagTree;
|
||||
import com.jpexs.decompiler.flash.treeitems.TreeItem;
|
||||
import com.sun.tools.javac.code.Types;
|
||||
import java.awt.BorderLayout;
|
||||
import java.awt.Color;
|
||||
import java.awt.Cursor;
|
||||
import java.awt.Dimension;
|
||||
import java.awt.Graphics;
|
||||
import java.awt.SystemColor;
|
||||
import java.awt.event.ActionEvent;
|
||||
import java.awt.event.ActionListener;
|
||||
import java.awt.event.MouseAdapter;
|
||||
import java.awt.event.MouseEvent;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import javax.swing.BorderFactory;
|
||||
import javax.swing.JLabel;
|
||||
import javax.swing.JPanel;
|
||||
import javax.swing.border.BevelBorder;
|
||||
import javax.swing.border.Border;
|
||||
import javax.swing.event.ChangeEvent;
|
||||
import javax.swing.event.ChangeListener;
|
||||
import javax.swing.plaf.basic.BasicPanelUI;
|
||||
import org.pushingpixels.substance.api.ColorSchemeAssociationKind;
|
||||
import org.pushingpixels.substance.api.ComponentState;
|
||||
import org.pushingpixels.substance.api.DecorationAreaType;
|
||||
import org.pushingpixels.substance.api.SubstanceLookAndFeel;
|
||||
import org.pushingpixels.substance.api.SubstanceSkin;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author JPEXS
|
||||
*/
|
||||
public class PinButton extends JPanel {
|
||||
|
||||
//private static final Border raisedBorder = BorderFactory.createCompoundBorder(BorderFactory.createBevelBorder(BevelBorder.RAISED), BorderFactory.createEmptyBorder(3, 5, 0, 5));
|
||||
//private static final Border loweredBorder = BorderFactory.createCompoundBorder(BorderFactory.createBevelBorder(BevelBorder.LOWERED), BorderFactory.createEmptyBorder(3, 5, 0, 5));
|
||||
private List<ActionListener> actionListeners = new ArrayList<>();
|
||||
private List<ChangeListener> changeListeners = new ArrayList<>();
|
||||
|
||||
private boolean pinned;
|
||||
|
||||
private boolean mouseOverPin = false;
|
||||
private boolean mouseOver = false;
|
||||
|
||||
private JLabel button;
|
||||
|
||||
private TreeItem item;
|
||||
|
||||
private boolean selected;
|
||||
|
||||
private Color color;
|
||||
private Color hilightedColor;
|
||||
private Color hilightedTextColor;
|
||||
private Color selectedColor;
|
||||
private Color selectedTextColor;
|
||||
private Color borderColor;
|
||||
private Color textColor;
|
||||
|
||||
private JLabel label;
|
||||
|
||||
public PinButton(TreeItem item, boolean pinned) {
|
||||
//setBorder(raisedBorder);
|
||||
setBorder(BorderFactory.createEmptyBorder(5, 10, 0, 10));
|
||||
this.item = item;
|
||||
this.pinned = pinned;
|
||||
|
||||
if (Configuration.useRibbonInterface.get()) {
|
||||
SubstanceSkin skin = SubstanceLookAndFeel.getCurrentSkin();
|
||||
color = skin.getColorScheme(DecorationAreaType.GENERAL, ColorSchemeAssociationKind.FILL, ComponentState.ENABLED).getBackgroundFillColor();
|
||||
hilightedColor = skin.getColorScheme(DecorationAreaType.GENERAL, ColorSchemeAssociationKind.FILL, ComponentState.ROLLOVER_SELECTED).getBackgroundFillColor();
|
||||
borderColor = skin.getColorScheme(DecorationAreaType.GENERAL, ColorSchemeAssociationKind.BORDER, ComponentState.ROLLOVER_SELECTED).getUltraDarkColor();
|
||||
textColor = skin.getColorScheme(DecorationAreaType.GENERAL, ColorSchemeAssociationKind.FILL, ComponentState.ENABLED).getForegroundColor();
|
||||
hilightedTextColor = skin.getColorScheme(DecorationAreaType.GENERAL, ColorSchemeAssociationKind.FILL, ComponentState.ROLLOVER_SELECTED).getForegroundColor();
|
||||
} else {
|
||||
color = SystemColor.control;
|
||||
hilightedColor = SystemColor.textHighlight;
|
||||
borderColor = SystemColor.controlShadow;
|
||||
textColor = SystemColor.controlText;
|
||||
hilightedTextColor = SystemColor.textHighlightText;
|
||||
}
|
||||
|
||||
Color color2 = Color.white;
|
||||
selectedColor = new Color(
|
||||
(color.getRed() + color2.getRed()) / 2,
|
||||
(color.getGreen() + color2.getGreen()) / 2,
|
||||
(color.getBlue() + color2.getBlue()) / 2
|
||||
);
|
||||
|
||||
Color color3 = Color.black;
|
||||
selectedTextColor = new Color(
|
||||
(textColor.getRed() + color3.getRed()) / 2,
|
||||
(textColor.getGreen() + color3.getGreen()) / 2,
|
||||
(textColor.getBlue() + color3.getBlue()) / 2
|
||||
);
|
||||
|
||||
|
||||
label = new JLabel();
|
||||
label.setIcon(AbstractTagTree.getIconFor(item));
|
||||
label.setText(item.toString());
|
||||
|
||||
button = new JLabel();
|
||||
button.setMinimumSize(new Dimension(10 + 16, 16));
|
||||
button.setPreferredSize(new Dimension(10 + 16, 16));
|
||||
|
||||
MouseAdapter adapter = new MouseAdapter() {
|
||||
|
||||
@Override
|
||||
public void mousePressed(MouseEvent e) {
|
||||
if (e.getButton() == MouseEvent.BUTTON1) {
|
||||
//setBorder(loweredBorder);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void mouseReleased(MouseEvent e) {
|
||||
if (e.getButton() == MouseEvent.BUTTON1) {
|
||||
/*if (selected) {
|
||||
setBorder(loweredBorder);
|
||||
} else {
|
||||
setBorder(raisedBorder);
|
||||
}*/
|
||||
fireAction();
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void mouseExited(MouseEvent e) {
|
||||
mouseOver = false;
|
||||
updateIcon();
|
||||
if (selected) {
|
||||
setBackground(selectedColor);
|
||||
label.setForeground(selectedTextColor);
|
||||
} else {
|
||||
setBackground(color);
|
||||
label.setForeground(textColor);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void mouseEntered(MouseEvent e) {
|
||||
mouseOver = true;
|
||||
if (selected) {
|
||||
setBackground(selectedColor);
|
||||
label.setForeground(selectedTextColor);
|
||||
} else {
|
||||
setBackground(hilightedColor);
|
||||
label.setForeground(hilightedTextColor);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void mouseMoved(MouseEvent e) {
|
||||
mouseOver = true;
|
||||
updateIcon();
|
||||
}
|
||||
|
||||
};
|
||||
addMouseListener(adapter);
|
||||
addMouseMotionListener(adapter);
|
||||
|
||||
button.setBorder(BorderFactory.createEmptyBorder(0, 10, 0, 0));
|
||||
button.setCursor(Cursor.getPredefinedCursor(Cursor.HAND_CURSOR));
|
||||
if (pinned) {
|
||||
button.setIcon(View.getIcon("pinned16"));
|
||||
button.setToolTipText(AppStrings.translate("unpin"));
|
||||
} else {
|
||||
button.setToolTipText(AppStrings.translate("pin"));
|
||||
}
|
||||
MouseAdapter buttonAdapter = new MouseAdapter() {
|
||||
@Override
|
||||
public void mouseEntered(MouseEvent e) {
|
||||
mouseOverPin = true;
|
||||
mouseOver = true;
|
||||
if (selected) {
|
||||
setBackground(selectedColor);
|
||||
label.setForeground(selectedTextColor);
|
||||
} else {
|
||||
setBackground(hilightedColor);
|
||||
label.setForeground(hilightedTextColor);
|
||||
}
|
||||
updateIcon();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void mouseExited(MouseEvent e) {
|
||||
mouseOverPin = false;
|
||||
mouseOver = false;
|
||||
if (selected) {
|
||||
setBackground(selectedColor);
|
||||
label.setForeground(selectedTextColor);
|
||||
} else {
|
||||
setBackground(color);
|
||||
label.setForeground(textColor);
|
||||
}
|
||||
updateIcon();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void mouseReleased(MouseEvent e) {
|
||||
if (e.getButton() == MouseEvent.BUTTON1) {
|
||||
PinButton.this.pinned = !PinButton.this.pinned;
|
||||
if (PinButton.this.pinned) {
|
||||
button.setToolTipText(AppStrings.translate("unpin"));
|
||||
} else {
|
||||
button.setToolTipText(AppStrings.translate("pin"));
|
||||
}
|
||||
updateIcon();
|
||||
fireChange();
|
||||
}
|
||||
}
|
||||
|
||||
};
|
||||
button.addMouseListener(buttonAdapter);
|
||||
button.addMouseMotionListener(buttonAdapter);
|
||||
|
||||
setLayout(new BorderLayout());
|
||||
add(label, BorderLayout.CENTER);
|
||||
add(button, BorderLayout.EAST);
|
||||
}
|
||||
|
||||
private void updateIcon() {
|
||||
|
||||
if (pinned) {
|
||||
button.setIcon(View.getIcon("pinned16"));
|
||||
} else if (mouseOverPin) {
|
||||
button.setIcon(View.getIcon(pinned ? "pinned16" : "pin16"));
|
||||
} else if (mouseOver) {
|
||||
button.setIcon(View.getIcon(pinned ? "pinned16" : "canpin16"));
|
||||
} else {
|
||||
button.setIcon(null);
|
||||
}
|
||||
}
|
||||
|
||||
private void fireAction() {
|
||||
ActionEvent ev = new ActionEvent(this, 0, "");
|
||||
for (ActionListener listener : actionListeners) {
|
||||
listener.actionPerformed(ev);
|
||||
}
|
||||
}
|
||||
|
||||
private void fireChange() {
|
||||
ChangeEvent ev = new ChangeEvent(this);
|
||||
for (ChangeListener listener : changeListeners) {
|
||||
listener.stateChanged(ev);
|
||||
}
|
||||
}
|
||||
|
||||
public void addActionListener(ActionListener listener) {
|
||||
actionListeners.add(listener);
|
||||
}
|
||||
|
||||
public void removeActionListner(ActionListener listener) {
|
||||
actionListeners.remove(listener);
|
||||
}
|
||||
|
||||
public void addChangeListener(ChangeListener listener) {
|
||||
changeListeners.add(listener);
|
||||
}
|
||||
|
||||
public void removeChangeListener(ChangeListener listener) {
|
||||
changeListeners.add(listener);
|
||||
}
|
||||
|
||||
public boolean isPinned() {
|
||||
return pinned;
|
||||
}
|
||||
|
||||
public TreeItem getItem() {
|
||||
return item;
|
||||
}
|
||||
|
||||
public boolean isSelected() {
|
||||
return selected;
|
||||
}
|
||||
|
||||
public void setSelected(boolean selected) {
|
||||
this.selected = selected;
|
||||
if (selected) {
|
||||
setBackground(selectedColor);
|
||||
label.setForeground(selectedTextColor);
|
||||
} else if (!mouseOver) {
|
||||
setBackground(color);
|
||||
label.setForeground(textColor);
|
||||
}
|
||||
repaint();
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void paintComponent(Graphics g) {
|
||||
super.paintComponent(g);
|
||||
g.setColor(borderColor);
|
||||
g.drawLine(0, 0, getWidth() - 1, 0);
|
||||
g.drawLine(0, 0, 0, getHeight() - 1);
|
||||
g.drawLine(getWidth() - 1, 0, getWidth() - 1, getHeight() - 1);
|
||||
g.drawLine(0, getHeight() -1, getWidth() - 1, getHeight() - 1);
|
||||
if (selected) {
|
||||
g.setColor(hilightedColor);
|
||||
g.drawLine(0, 0, getWidth() - 1, 0);
|
||||
g.drawLine(0, 1, getWidth() - 1, 1);
|
||||
g.drawLine(0, 2, getWidth() - 1, 2);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user