Add ability to delete an array entry

This commit is contained in:
zontreck 2024-07-27 18:09:33 -07:00
parent c44f3a7c7f
commit 7a5502fbf9
12 changed files with 72 additions and 10 deletions

View file

@ -1 +1 @@
const VERSION = "1.0724.24+1429";
const VERSION = "1.0727.24+1730";

View file

@ -6,11 +6,15 @@ import 'package:flutter_treeview/flutter_treeview.dart';
import 'package:libac_dart/nbt/NbtIo.dart';
import 'package:libac_dart/nbt/SnbtIo.dart';
import 'package:libac_dart/nbt/Tag.dart';
import 'package:libac_dart/nbt/impl/ByteArrayTag.dart';
import 'package:libac_dart/nbt/impl/CompoundTag.dart';
import 'package:libac_dart/nbt/impl/IntArrayTag.dart';
import 'package:libac_dart/nbt/impl/LongArrayTag.dart';
import 'package:nbteditor/Constants.dart';
import 'package:nbteditor/Consts2.dart';
import 'package:nbteditor/SessionData.dart';
import 'package:nbteditor/main.dart';
import 'package:nbteditor/tags/ArrayEntry.dart';
import 'package:nbteditor/tags/CompoundTag.dart';
import 'package:nbteditor/tags/Tag.dart';
@ -219,10 +223,37 @@ class EditorState extends State<Editor> {
nodeBuilder: (context, node) {
if (node.data is Tag) {
return TagExt.render(node.data as Tag, context, didChangeState);
} else {
} else if (node.data is ArrayEntry) {
ArrayEntry entry = node.data as ArrayEntry;
return ListTile(
title: Text(node.label),
title: Text(entry.value),
trailing: Row(
mainAxisSize: MainAxisSize.min,
children: [
// Delete entry
ElevatedButton(
onPressed: () {
if (entry.parent is ByteArrayTag) {
ByteArrayTag bat = entry.parent as ByteArrayTag;
bat.value.removeAt(entry.index);
}
if (entry.parent is IntArrayTag) {
IntArrayTag iat = entry.parent as IntArrayTag;
iat.value.removeAt(entry.index);
}
if (entry.parent is LongArrayTag) {
LongArrayTag lat = entry.parent as LongArrayTag;
lat.value.removeAt(entry.index);
}
didChangeState();
},
child: Icon(Icons.delete_forever))
],
),
);
} else {
return ListTile(title: Text(node.label));
}
},
controller: controller,

View file

@ -31,7 +31,7 @@ class PermissionsRequiredPage extends StatelessWidget {
content: Text(
"The storage permission is reporting it is permanently denied. Please open settings and allow that permission.")));
} else if (stat.isGranted) {
Future.delayed(const Duration(seconds: 5), () {
Future.delayed(const Duration(seconds: 2), () {
Navigator.pop(context);
});
}

9
lib/tags/ArrayEntry.dart Normal file
View file

@ -0,0 +1,9 @@
import 'package:libac_dart/nbt/Tag.dart';
class ArrayEntry {
Tag parent;
dynamic value;
int index;
ArrayEntry({required this.parent, required this.value, required this.index});
}

View file

@ -3,12 +3,17 @@ import 'package:flutter_treeview/src/models/node.dart';
import 'package:libac_dart/nbt/impl/ByteArrayTag.dart';
import 'package:nbteditor/tags/Tag.dart';
import 'ArrayEntry.dart';
extension ByteArrayTagExt on ByteArrayTag {
Node getNode(String path) {
List<Node> entries = [];
int count = 0;
for (var element in value) {
entries.add(Node(key: "$path/$count", label: "$element", data: element));
entries.add(Node(
key: "$path/$count",
label: "$element",
data: ArrayEntry(value: "${element}", parent: this, index: count)));
count++;
}

View file

@ -2,6 +2,7 @@ import 'package:flutter/material.dart';
import 'package:flutter_treeview/src/models/node.dart';
import 'package:libac_dart/nbt/impl/IntArrayTag.dart';
import 'ArrayEntry.dart';
import 'Tag.dart';
extension IntArrayTagExt on IntArrayTag {
@ -9,7 +10,10 @@ extension IntArrayTagExt on IntArrayTag {
List<Node> entries = [];
int count = 0;
for (var element in value) {
entries.add(Node(key: "$path/$count", label: "$element", data: element));
entries.add(Node(
key: "$path/$count",
label: "$element",
data: ArrayEntry(value: "${element}", parent: this, index: count)));
count++;
}

View file

@ -1,6 +1,7 @@
import 'package:flutter/material.dart';
import 'package:flutter_treeview/flutter_treeview.dart';
import 'package:libac_dart/nbt/impl/LongArrayTag.dart';
import 'package:nbteditor/tags/ArrayEntry.dart';
import 'Tag.dart';
@ -9,7 +10,10 @@ extension LongArrayTagExt on LongArrayTag {
List<Node> entries = [];
int count = 0;
for (var element in value) {
entries.add(Node(key: "$path/$count", label: "$element", data: element));
entries.add(Node(
key: "$path/$count",
label: "$element",
data: ArrayEntry(value: "${element}", parent: this, index: count)));
count++;
}