-
Notifications
You must be signed in to change notification settings - Fork 460
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Add class info button to bottom right
- Loading branch information
Showing
6 changed files
with
193 additions
and
0 deletions.
There are no files selected for viewing
49 changes: 49 additions & 0 deletions
49
recaf-ui/src/main/java/software/coley/recaf/ui/pane/editing/AbstractClassInfoProvider.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,49 @@ | ||
package software.coley.recaf.ui.pane.editing; | ||
|
||
import atlantafx.base.controls.Popover; | ||
import atlantafx.base.theme.Styles; | ||
import jakarta.annotation.Nonnull; | ||
import javafx.event.ActionEvent; | ||
import javafx.scene.Node; | ||
import javafx.scene.control.Button; | ||
import org.kordamp.ikonli.carbonicons.CarbonIcons; | ||
import software.coley.recaf.info.ClassInfo; | ||
import software.coley.recaf.path.ClassPathNode; | ||
import software.coley.recaf.services.navigation.ClassNavigable; | ||
import software.coley.recaf.ui.control.FontIconView; | ||
import software.coley.recaf.ui.control.richtext.Editor; | ||
|
||
/** | ||
* Overlay component for {@link Editor} that allows quick display of class information. | ||
* | ||
* @author Matt Coley | ||
*/ | ||
public abstract class AbstractClassInfoProvider<T extends ClassInfo> extends Button { | ||
private final ClassNavigable classProvider; | ||
|
||
/** | ||
* @param toolsContainer | ||
* Container to house tool buttons for display in the {@link Editor}. | ||
* @param classProvider | ||
* The provider of the latest class info. | ||
*/ | ||
public AbstractClassInfoProvider(@Nonnull ToolsContainerComponent toolsContainer, @Nonnull ClassNavigable classProvider) { | ||
this.classProvider = classProvider; | ||
setGraphic(new FontIconView(CarbonIcons.INFORMATION)); | ||
getStyleClass().addAll(Styles.BUTTON_ICON, Styles.ACCENT, Styles.FLAT); | ||
setOnAction(this::showClassInfoPopover); | ||
toolsContainer.add(this); | ||
} | ||
|
||
@SuppressWarnings("unchecked") | ||
private void showClassInfoPopover(ActionEvent e) { | ||
ClassPathNode path = classProvider.getPath(); | ||
ClassInfo info = path.getValue(); | ||
Popover popover = new Popover(createInfoContent((T) info)); | ||
popover.setArrowLocation(Popover.ArrowLocation.BOTTOM_RIGHT); | ||
popover.show(this); | ||
} | ||
|
||
@Nonnull | ||
protected abstract Node createInfoContent(@Nonnull T info); | ||
} |
67 changes: 67 additions & 0 deletions
67
.../src/main/java/software/coley/recaf/ui/pane/editing/android/AndroidClassInfoProvider.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,67 @@ | ||
package software.coley.recaf.ui.pane.editing.android; | ||
|
||
import atlantafx.base.theme.Styles; | ||
import jakarta.annotation.Nonnull; | ||
import javafx.geometry.HPos; | ||
import javafx.scene.Node; | ||
import javafx.scene.control.Label; | ||
import javafx.scene.layout.ColumnConstraints; | ||
import javafx.scene.layout.GridPane; | ||
import javafx.scene.layout.Priority; | ||
import software.coley.recaf.info.AndroidClassInfo; | ||
import software.coley.recaf.info.JvmClassInfo; | ||
import software.coley.recaf.services.navigation.ClassNavigable; | ||
import software.coley.recaf.ui.control.BoundLabel; | ||
import software.coley.recaf.ui.control.richtext.Editor; | ||
import software.coley.recaf.ui.pane.editing.AbstractClassInfoProvider; | ||
import software.coley.recaf.ui.pane.editing.ToolsContainerComponent; | ||
import software.coley.recaf.util.Lang; | ||
|
||
import java.util.Objects; | ||
|
||
/** | ||
* Overlay component for {@link Editor} that allows quick display of Android class information. | ||
* | ||
* @author Matt Coley | ||
*/ | ||
public class AndroidClassInfoProvider extends AbstractClassInfoProvider<AndroidClassInfo> { | ||
/** | ||
* @param toolsContainer | ||
* Container to house tool buttons for display in the {@link Editor}. | ||
* @param classProvider | ||
* The provider of the latest class info. | ||
*/ | ||
public AndroidClassInfoProvider(@Nonnull ToolsContainerComponent toolsContainer, @Nonnull ClassNavigable classProvider) { | ||
super(toolsContainer, classProvider); | ||
} | ||
|
||
@Nonnull | ||
@Override | ||
protected Node createInfoContent(@Nonnull AndroidClassInfo info) { | ||
GridPane content = new GridPane(); | ||
ColumnConstraints col1 = new ColumnConstraints(); | ||
ColumnConstraints col2 = new ColumnConstraints(); | ||
col2.setFillWidth(true); | ||
col2.setHgrow(Priority.ALWAYS); | ||
col2.setHalignment(HPos.RIGHT); | ||
content.getColumnConstraints().addAll(col1, col2); | ||
content.setHgap(10); | ||
content.setVgap(5); | ||
|
||
Label titleLabel = new BoundLabel(Lang.getBinding("java.info")); | ||
titleLabel.getStyleClass().addAll(Styles.TEXT_UNDERLINED, Styles.TITLE_4); | ||
|
||
Label sourceLabel = new BoundLabel(Lang.getBinding("java.info.sourcefile")); | ||
sourceLabel.getStyleClass().addAll(Styles.TEXT_BOLD); | ||
|
||
Label sourceValueLabel = new Label(Objects.requireNonNullElse(info.getSourceFileName(), "")); | ||
|
||
int row = 0; | ||
content.add(titleLabel, 0, row++, 2, 1); | ||
|
||
content.add(sourceLabel, 0, row); | ||
content.add(sourceValueLabel, 1, row++); | ||
|
||
return content; | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
72 changes: 72 additions & 0 deletions
72
recaf-ui/src/main/java/software/coley/recaf/ui/pane/editing/jvm/JvmClassInfoProvider.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,72 @@ | ||
package software.coley.recaf.ui.pane.editing.jvm; | ||
|
||
import atlantafx.base.theme.Styles; | ||
import jakarta.annotation.Nonnull; | ||
import javafx.geometry.HPos; | ||
import javafx.scene.Node; | ||
import javafx.scene.control.Label; | ||
import javafx.scene.layout.ColumnConstraints; | ||
import javafx.scene.layout.GridPane; | ||
import javafx.scene.layout.Priority; | ||
import software.coley.recaf.info.JvmClassInfo; | ||
import software.coley.recaf.services.navigation.ClassNavigable; | ||
import software.coley.recaf.ui.control.BoundLabel; | ||
import software.coley.recaf.ui.control.richtext.Editor; | ||
import software.coley.recaf.ui.pane.editing.AbstractClassInfoProvider; | ||
import software.coley.recaf.ui.pane.editing.ToolsContainerComponent; | ||
import software.coley.recaf.util.Lang; | ||
|
||
import java.util.Objects; | ||
|
||
/** | ||
* Overlay component for {@link Editor} that allows quick display of JVM class information. | ||
* | ||
* @author Matt Coley | ||
*/ | ||
public class JvmClassInfoProvider extends AbstractClassInfoProvider<JvmClassInfo> { | ||
/** | ||
* @param toolsContainer | ||
* Container to house tool buttons for display in the {@link Editor}. | ||
* @param classProvider | ||
* The provider of the latest class info. | ||
*/ | ||
public JvmClassInfoProvider(@Nonnull ToolsContainerComponent toolsContainer, @Nonnull ClassNavigable classProvider) { | ||
super(toolsContainer, classProvider); | ||
} | ||
|
||
@Nonnull | ||
@Override | ||
protected Node createInfoContent(@Nonnull JvmClassInfo info) { | ||
GridPane content = new GridPane(); | ||
ColumnConstraints col1 = new ColumnConstraints(); | ||
ColumnConstraints col2 = new ColumnConstraints(); | ||
col2.setFillWidth(true); | ||
col2.setHgrow(Priority.ALWAYS); | ||
col2.setHalignment(HPos.RIGHT); | ||
content.getColumnConstraints().addAll(col1, col2); | ||
content.setHgap(10); | ||
content.setVgap(5); | ||
|
||
Label titleLabel = new BoundLabel(Lang.getBinding("java.info")); | ||
titleLabel.getStyleClass().addAll(Styles.TEXT_UNDERLINED, Styles.TITLE_4); | ||
|
||
Label versionLabel = new BoundLabel(Lang.getBinding("java.info.version")); | ||
Label sourceLabel = new BoundLabel(Lang.getBinding("java.info.sourcefile")); | ||
versionLabel.getStyleClass().addAll(Styles.TEXT_BOLD); | ||
sourceLabel.getStyleClass().addAll(Styles.TEXT_BOLD); | ||
|
||
Label versionValueLabel = new Label(String.valueOf(info.getVersion())); | ||
Label sourceValueLabel = new Label(Objects.requireNonNullElse(info.getSourceFileName(), "")); | ||
|
||
int row = 0; | ||
content.add(titleLabel, 0, row++, 2, 1); | ||
|
||
content.add(versionLabel, 0, row); | ||
content.add(versionValueLabel, 1, row++); | ||
|
||
content.add(sourceLabel, 0, row); | ||
content.add(sourceValueLabel, 1, row++); | ||
|
||
return content; | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters