-
-
Notifications
You must be signed in to change notification settings - Fork 14
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Showing
41 changed files
with
928 additions
and
293 deletions.
There are no files selected for viewing
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
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
44 changes: 8 additions & 36 deletions
44
src/main/java/com/shade/decima/model/rtti/objects/RTTIReference.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 |
---|---|---|
@@ -1,46 +1,18 @@ | ||
package com.shade.decima.model.rtti.objects; | ||
|
||
import com.shade.util.NotNull; | ||
import com.shade.util.Nullable; | ||
|
||
public record RTTIReference(@NotNull Type type, @Nullable RTTIObject uuid, @Nullable String path) { | ||
public enum Type { | ||
NONE(0, false, false), | ||
INTERNAL_LINK(1, true, false), | ||
EXTERNAL_LINK(2, true, true), | ||
STREAMING_REFERENCE(3, true, true), | ||
UUID_REFERENCE(5, true, false); | ||
public sealed interface RTTIReference permits RTTIReference.None, RTTIReference.Internal, RTTIReference.External { | ||
None NONE = new None(); | ||
|
||
private final byte value; | ||
private final boolean hasUuid; | ||
private final boolean hasPath; | ||
record External(@NotNull Kind kind, @NotNull RTTIObject uuid, @NotNull String path) implements RTTIReference {} | ||
|
||
Type(int value, boolean hasUuid, boolean hasPath) { | ||
this.value = (byte) value; | ||
this.hasUuid = hasUuid; | ||
this.hasPath = hasPath; | ||
} | ||
record Internal(@NotNull Kind kind, @NotNull RTTIObject uuid) implements RTTIReference {} | ||
|
||
@NotNull | ||
public static Type valueOf(int value) { | ||
for (Type type : values()) { | ||
if (type.value == value) { | ||
return type; | ||
} | ||
} | ||
throw new IllegalArgumentException("Unknown reference type " + value); | ||
} | ||
record None() implements RTTIReference {} | ||
|
||
public byte getValue() { | ||
return value; | ||
} | ||
|
||
public boolean hasUuid() { | ||
return hasUuid; | ||
} | ||
|
||
public boolean hasPath() { | ||
return hasPath; | ||
} | ||
enum Kind { | ||
LINK, | ||
REFERENCE | ||
} | ||
} |
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
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
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 |
---|---|---|
@@ -1,9 +1,10 @@ | ||
package com.shade.decima.ui.data; | ||
|
||
import com.shade.util.NotNull; | ||
import com.shade.util.Nullable; | ||
|
||
public interface ValueManager<T> { | ||
@Nullable | ||
@NotNull | ||
ValueEditor<T> createEditor(@NotNull ValueController<T> controller); | ||
|
||
boolean canEdit(@NotNull ValueController.EditType type); | ||
} |
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
78 changes: 78 additions & 0 deletions
78
src/main/java/com/shade/decima/ui/data/editors/GGUUIDValueEditor.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,78 @@ | ||
package com.shade.decima.ui.data.editors; | ||
|
||
import com.shade.decima.model.rtti.objects.RTTIObject; | ||
import com.shade.decima.model.rtti.types.RTTITypeClass; | ||
import com.shade.decima.ui.data.ValueController; | ||
import com.shade.decima.ui.data.handlers.GGUUIDValueHandler; | ||
import com.shade.util.NotNull; | ||
|
||
import javax.swing.*; | ||
import java.awt.event.ActionListener; | ||
import java.util.UUID; | ||
|
||
public class GGUUIDValueEditor extends BaseValueEditor<RTTIObject, JTextField> { | ||
public GGUUIDValueEditor(@NotNull ValueController<RTTIObject> controller) { | ||
super(controller); | ||
} | ||
|
||
@NotNull | ||
@Override | ||
protected JTextField createComponentImpl() { | ||
return new JTextField(); | ||
} | ||
|
||
@Override | ||
public void setEditorValue(@NotNull RTTIObject value) { | ||
component.setText("{%s}".formatted(GGUUIDValueHandler.INSTANCE.getString(value.type(), value))); | ||
} | ||
|
||
@NotNull | ||
@Override | ||
public RTTIObject getEditorValue() { | ||
return fromString((RTTITypeClass) controller.getValueType(), component.getText()); | ||
} | ||
|
||
@Override | ||
public void addActionListener(@NotNull ActionListener listener) { | ||
component.addActionListener(listener); | ||
} | ||
|
||
@Override | ||
public void removeActionListener(@NotNull ActionListener listener) { | ||
component.removeActionListener(listener); | ||
} | ||
|
||
@NotNull | ||
public static RTTIObject fromString(@NotNull RTTITypeClass type, @NotNull String text) { | ||
final UUID uuid; | ||
|
||
if (text.startsWith("{") && text.endsWith("}")) { | ||
uuid = UUID.fromString(text.substring(1, text.length() - 1)); | ||
} else { | ||
uuid = UUID.fromString(text); | ||
} | ||
|
||
final long msb = uuid.getMostSignificantBits(); | ||
final long lsb = uuid.getLeastSignificantBits(); | ||
final RTTIObject object = type.instantiate(); | ||
|
||
object.set("Data3", (byte) (msb >>> 56)); | ||
object.set("Data2", (byte) (msb >>> 48)); | ||
object.set("Data1", (byte) (msb >>> 40)); | ||
object.set("Data0", (byte) (msb >>> 32)); | ||
object.set("Data5", (byte) (msb >>> 24)); | ||
object.set("Data4", (byte) (msb >>> 16)); | ||
object.set("Data7", (byte) (msb >>> 8)); | ||
object.set("Data6", (byte) (msb)); | ||
object.set("Data8", (byte) (lsb >>> 56)); | ||
object.set("Data9", (byte) (lsb >>> 48)); | ||
object.set("Data10", (byte) (lsb >>> 40)); | ||
object.set("Data11", (byte) (lsb >>> 32)); | ||
object.set("Data12", (byte) (lsb >>> 24)); | ||
object.set("Data13", (byte) (lsb >>> 16)); | ||
object.set("Data14", (byte) (lsb >>> 8)); | ||
object.set("Data15", (byte) (lsb)); | ||
|
||
return object; | ||
} | ||
} |
Oops, something went wrong.