forked from Apple-2-Tools/jace
Search results list rigged to add cheats when double-clicked. UI for side panels is vastly improved and ready for use.
This commit is contained in:
parent
926485ac38
commit
8ff0987801
@ -49,6 +49,10 @@ public class MetaCheat extends Cheats {
|
||||
public String toString() {
|
||||
return Integer.toHexString(address) + ": " + lastObservedValue + " (" + Integer.toHexString(lastObservedValue) + ")";
|
||||
}
|
||||
|
||||
public int getAddress() {
|
||||
return address;
|
||||
}
|
||||
}
|
||||
|
||||
MetacheatUI ui;
|
||||
|
@ -6,6 +6,7 @@ import jace.cheat.DynamicCheat;
|
||||
import jace.cheat.MemoryCell;
|
||||
import jace.cheat.MetaCheat;
|
||||
import jace.cheat.MetaCheat.SearchChangeType;
|
||||
import jace.cheat.MetaCheat.SearchResult;
|
||||
import jace.cheat.MetaCheat.SearchType;
|
||||
import jace.core.RAMListener;
|
||||
import jace.state.State;
|
||||
@ -125,21 +126,11 @@ public class MetacheatUI {
|
||||
@FXML
|
||||
private TableView<DynamicCheat> cheatsTableView;
|
||||
|
||||
@FXML
|
||||
void addCheat(ActionEvent event) {
|
||||
cheatEngine.addCheat(new DynamicCheat(0, "?"));
|
||||
}
|
||||
|
||||
@FXML
|
||||
void createSnapshot(ActionEvent event) {
|
||||
|
||||
}
|
||||
|
||||
@FXML
|
||||
void deleteCheat(ActionEvent event) {
|
||||
cheatsTableView.getSelectionModel().getSelectedItems().forEach(cheatEngine::removeCheat);
|
||||
}
|
||||
|
||||
@FXML
|
||||
void deleteSnapshot(ActionEvent event) {
|
||||
|
||||
@ -150,11 +141,26 @@ public class MetacheatUI {
|
||||
|
||||
}
|
||||
|
||||
@FXML
|
||||
void addCheat(ActionEvent event) {
|
||||
cheatEngine.addCheat(new DynamicCheat(0, "?"));
|
||||
}
|
||||
|
||||
@FXML
|
||||
void deleteCheat(ActionEvent event) {
|
||||
cheatsTableView.getSelectionModel().getSelectedItems().forEach(cheatEngine::removeCheat);
|
||||
}
|
||||
|
||||
@FXML
|
||||
void loadCheats(ActionEvent event) {
|
||||
|
||||
}
|
||||
|
||||
@FXML
|
||||
void saveCheats(ActionEvent event) {
|
||||
|
||||
}
|
||||
|
||||
@FXML
|
||||
void newSearch(ActionEvent event) {
|
||||
Platform.runLater(() -> {
|
||||
@ -174,11 +180,6 @@ public class MetacheatUI {
|
||||
});
|
||||
}
|
||||
|
||||
@FXML
|
||||
void saveCheats(ActionEvent event) {
|
||||
|
||||
}
|
||||
|
||||
@FXML
|
||||
void search(ActionEvent event) {
|
||||
Platform.runLater(() -> {
|
||||
@ -252,6 +253,13 @@ public class MetacheatUI {
|
||||
}
|
||||
});
|
||||
|
||||
searchResultsListView.setEditable(true);
|
||||
searchResultsListView.setOnEditStart((editEvent) -> {
|
||||
editEvent.consume();
|
||||
SearchResult result = cheatEngine.getSearchResults().get(editEvent.getIndex());
|
||||
addWatch(result.getAddress());
|
||||
});
|
||||
|
||||
memoryViewCanvas.setMouseTransparent(false);
|
||||
memoryViewCanvas.addEventFilter(MouseEvent.MOUSE_CLICKED, this::memoryViewClicked);
|
||||
showValuesCheckbox.selectedProperty().addListener((prop, oldVal, newVal) -> {
|
||||
@ -268,8 +276,6 @@ public class MetacheatUI {
|
||||
searchStartAddressField.textProperty().addListener(addressRangeListener);
|
||||
searchEndAddressField.textProperty().addListener(addressRangeListener);
|
||||
|
||||
RAMListener l;
|
||||
|
||||
TableColumn<DynamicCheat, Boolean> activeColumn = (TableColumn<DynamicCheat, Boolean>) cheatsTableView.getColumns().get(0);
|
||||
activeColumn.setCellValueFactory(new PropertyValueFactory<>("active"));
|
||||
activeColumn.setCellFactory((TableColumn<DynamicCheat, Boolean> param) -> new CheckBoxTableCell<>());
|
||||
@ -326,8 +332,6 @@ public class MetacheatUI {
|
||||
public static Set<MemoryCell> redrawNodes = new ConcurrentSkipListSet<>();
|
||||
ScheduledExecutorService animationTimer = null;
|
||||
ScheduledFuture animationFuture = null;
|
||||
StackPane pane = new StackPane();
|
||||
|
||||
Tooltip memoryWatchTooltip = new Tooltip();
|
||||
|
||||
private void memoryViewClicked(MouseEvent e) {
|
||||
@ -356,7 +360,7 @@ public class MetacheatUI {
|
||||
|
||||
Label addCheat = new Label("Cheat >>");
|
||||
addCheat.setOnMouseClicked((mouseEvent) -> {
|
||||
addCheat(addr, watch.getValue());
|
||||
Platform.runLater(() -> addCheat(addr, watch.getValue()));
|
||||
});
|
||||
watch.getChildren().add(addCheat);
|
||||
|
||||
@ -406,7 +410,7 @@ public class MetacheatUI {
|
||||
animationFuture.cancel(false);
|
||||
}
|
||||
|
||||
animationFuture = animationTimer.scheduleAtFixedRate(this::processMemoryViewUpdates, FRAME_RATE, 1000 / 60, TimeUnit.MILLISECONDS);
|
||||
animationFuture = animationTimer.scheduleAtFixedRate(this::processMemoryViewUpdates, FRAME_RATE, FRAME_RATE, TimeUnit.MILLISECONDS);
|
||||
|
||||
cheatEngine.initMemoryView();
|
||||
int pixelsPerBlock = 16 * MEMORY_BOX_TOTAL_SIZE;
|
||||
@ -492,5 +496,4 @@ public class MetacheatUI {
|
||||
private void addCheat(int addr, int val) {
|
||||
cheatEngine.addCheat(new DynamicCheat(addr, String.valueOf(val)));
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -7,7 +7,7 @@
|
||||
<?import java.lang.*?>
|
||||
<?import javafx.scene.layout.*?>
|
||||
|
||||
<VBox maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" prefHeight="492.0" prefWidth="702.0" xmlns="http://javafx.com/javafx/8.0.40" xmlns:fx="http://javafx.com/fxml/1" fx:controller="jace.ui.MetacheatUI">
|
||||
<VBox maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" prefHeight="520.0" prefWidth="710.0" xmlns="http://javafx.com/javafx/8.0.40" xmlns:fx="http://javafx.com/fxml/1" fx:controller="jace.ui.MetacheatUI">
|
||||
<children>
|
||||
<ToolBar prefHeight="40.0" prefWidth="200.0" VBox.vgrow="NEVER">
|
||||
<items>
|
||||
@ -31,17 +31,19 @@
|
||||
</children>
|
||||
</StackPane>
|
||||
</content></ScrollPane>
|
||||
<Accordion centerShape="false" scaleShape="false">
|
||||
<panes>
|
||||
<TitledPane prefHeight="200.0" prefWidth="200.0" text="Search">
|
||||
<ScrollPane fitToHeight="true" fitToWidth="true" prefHeight="200.0" prefWidth="200.0">
|
||||
<content>
|
||||
<VBox prefHeight="200.0" prefWidth="100.0">
|
||||
<VBox>
|
||||
<children>
|
||||
<TabPane fx:id="searchTypesTabPane" prefHeight="147.0" prefWidth="233.0" tabClosingPolicy="UNAVAILABLE" VBox.vgrow="NEVER">
|
||||
<TitledPane expanded="false" minHeight="-Infinity" prefWidth="200.0" text="Search" VBox.vgrow="NEVER">
|
||||
<content>
|
||||
<VBox>
|
||||
<children>
|
||||
<TabPane fx:id="searchTypesTabPane" prefWidth="233.0" tabClosingPolicy="UNAVAILABLE" VBox.vgrow="NEVER">
|
||||
<tabs>
|
||||
<Tab text="Value">
|
||||
<content>
|
||||
<VBox prefHeight="200.0" prefWidth="100.0">
|
||||
<VBox prefWidth="100.0">
|
||||
<children>
|
||||
<FlowPane prefHeight="43.0" prefWidth="233.0">
|
||||
<children>
|
||||
@ -65,7 +67,7 @@
|
||||
<Font name="System Italic" size="13.0" />
|
||||
</font>
|
||||
</Label>
|
||||
<HBox prefHeight="100.0" prefWidth="200.0">
|
||||
<HBox prefWidth="200.0" VBox.vgrow="NEVER">
|
||||
<children>
|
||||
<RadioButton fx:id="searchTypeByte" mnemonicParsing="false" selected="true" text="Byte">
|
||||
<HBox.margin>
|
||||
@ -101,7 +103,7 @@
|
||||
</Tab>
|
||||
<Tab text="Change">
|
||||
<content>
|
||||
<VBox nodeOrientation="LEFT_TO_RIGHT" prefHeight="200.0" prefWidth="100.0">
|
||||
<VBox nodeOrientation="LEFT_TO_RIGHT" prefHeight="112.0" prefWidth="217.0">
|
||||
<children>
|
||||
<RadioButton fx:id="searchChangeNoneOption" mnemonicParsing="false" text="No changes since last search">
|
||||
<opaqueInsets>
|
||||
@ -125,7 +127,7 @@
|
||||
</padding>
|
||||
</RadioButton>
|
||||
<RadioButton fx:id="searchChangeGreaterOption" mnemonicParsing="false" text="Greater than last search" toggleGroup="$changeSearchType" />
|
||||
<FlowPane prefHeight="200.0" prefWidth="200.0">
|
||||
<FlowPane prefWidth="200.0">
|
||||
<children>
|
||||
<RadioButton fx:id="searchChangeByOption" mnemonicParsing="false" text="Change by: " toggleGroup="$changeSearchType" />
|
||||
<TextField fx:id="searchChangeByField" prefHeight="26.0" prefWidth="76.0" />
|
||||
@ -152,21 +154,47 @@
|
||||
</ToolBar>
|
||||
<HBox prefHeight="19.0" prefWidth="235.0">
|
||||
<children>
|
||||
<Label text="Results:" HBox.hgrow="NEVER" />
|
||||
<Label prefWidth="80.0" text="Results:" HBox.hgrow="NEVER" />
|
||||
<Label fx:id="searchStatusLabel" prefHeight="16.0" prefWidth="181.0" textAlignment="RIGHT" wrapText="true" HBox.hgrow="ALWAYS" />
|
||||
</children>
|
||||
</HBox>
|
||||
<ListView fx:id="searchResultsListView" prefHeight="125.0" prefWidth="233.0" VBox.vgrow="ALWAYS" />
|
||||
<ListView fx:id="searchResultsListView" minHeight="25.0" prefHeight="75.0" VBox.vgrow="ALWAYS" />
|
||||
</children>
|
||||
</VBox>
|
||||
</content>
|
||||
</TitledPane>
|
||||
<TitledPane animated="false" text="Watches">
|
||||
<TitledPane text="Watches" VBox.vgrow="NEVER">
|
||||
<content>
|
||||
<TilePane fx:id="watchesPane" prefHeight="200.0" prefWidth="200.0" />
|
||||
<TilePane fx:id="watchesPane" alignment="TOP_CENTER" hgap="5.0" prefTileHeight="120.0" prefTileWidth="65.0" prefWidth="200.0" tileAlignment="TOP_CENTER" vgap="5.0" />
|
||||
</content>
|
||||
</TitledPane>
|
||||
<TitledPane animated="false" text="Snapshots">
|
||||
<TitledPane text="Cheats" VBox.vgrow="NEVER">
|
||||
<content>
|
||||
<BorderPane>
|
||||
<bottom>
|
||||
<ToolBar prefHeight="40.0" prefWidth="200.0" BorderPane.alignment="CENTER">
|
||||
<items>
|
||||
<Button mnemonicParsing="false" onAction="#addCheat" text="Add" />
|
||||
<Button mnemonicParsing="false" onAction="#deleteCheat" text="Delete" />
|
||||
<Button mnemonicParsing="false" onAction="#loadCheats" text="Load" />
|
||||
<Button mnemonicParsing="false" onAction="#saveCheats" text="Save" />
|
||||
</items>
|
||||
</ToolBar>
|
||||
</bottom>
|
||||
<center>
|
||||
<TableView fx:id="cheatsTableView" editable="true" minHeight="75.0" BorderPane.alignment="CENTER">
|
||||
<columns>
|
||||
<TableColumn prefWidth="28.0" sortable="false" text="On" />
|
||||
<TableColumn prefWidth="77.0" text="Name" />
|
||||
<TableColumn minWidth="9.0" prefWidth="42.0" text="Addr" />
|
||||
<TableColumn prefWidth="88.0" text="Effect" />
|
||||
</columns>
|
||||
</TableView>
|
||||
</center>
|
||||
</BorderPane>
|
||||
</content>
|
||||
</TitledPane>
|
||||
<TitledPane expanded="false" text="Snapshots" VBox.vgrow="NEVER">
|
||||
<content>
|
||||
<BorderPane minWidth="-Infinity">
|
||||
<bottom>
|
||||
@ -179,42 +207,15 @@
|
||||
</ToolBar>
|
||||
</bottom>
|
||||
<center>
|
||||
<ListView fx:id="snapshotsListView" prefHeight="200.0" prefWidth="200.0" BorderPane.alignment="CENTER" />
|
||||
<ListView fx:id="snapshotsListView" minHeight="25.0" prefWidth="200.0" BorderPane.alignment="CENTER" />
|
||||
</center>
|
||||
</BorderPane>
|
||||
</content>
|
||||
</TitledPane>
|
||||
<TitledPane animated="false" text="Cheats">
|
||||
<content>
|
||||
<BorderPane prefHeight="200.0" prefWidth="200.0">
|
||||
<bottom>
|
||||
<ToolBar prefHeight="40.0" prefWidth="200.0" BorderPane.alignment="CENTER">
|
||||
<items>
|
||||
<Button mnemonicParsing="false" onAction="#addCheat" text="Add" />
|
||||
<Button mnemonicParsing="false" onAction="#deleteCheat" text="Delete" />
|
||||
<Button mnemonicParsing="false" onAction="#loadCheats" text="Load" />
|
||||
<Button mnemonicParsing="false" onAction="#saveCheats" text="Save" />
|
||||
</items>
|
||||
</ToolBar>
|
||||
</bottom>
|
||||
<center>
|
||||
<TableView fx:id="cheatsTableView" editable="true" prefHeight="321.0" prefWidth="207.0" BorderPane.alignment="CENTER">
|
||||
<columns>
|
||||
<TableColumn prefWidth="26.0" sortable="false" text="On" />
|
||||
<TableColumn prefWidth="74.0" text="Name" />
|
||||
<TableColumn prefWidth="50.0" text="Addr" />
|
||||
<TableColumn prefWidth="84.0" text="Effect" />
|
||||
</columns>
|
||||
<columnResizePolicy>
|
||||
<TableView fx:constant="CONSTRAINED_RESIZE_POLICY" />
|
||||
</columnResizePolicy>
|
||||
</TableView>
|
||||
</center>
|
||||
</BorderPane>
|
||||
</children>
|
||||
</VBox>
|
||||
</content>
|
||||
</TitledPane>
|
||||
</panes>
|
||||
</Accordion>
|
||||
</ScrollPane>
|
||||
</items>
|
||||
</SplitPane>
|
||||
</children>
|
||||
|
Loading…
Reference in New Issue
Block a user