Benchmark editing
This commit is contained in:
@@ -13,7 +13,7 @@ plugins {
|
||||
alias(libs.plugins.buildconfig)
|
||||
}
|
||||
|
||||
version = rootProject.version as PhoebenchVersion
|
||||
version = PhoebenchVersion(1, 1, 1)
|
||||
|
||||
if((version as PhoebenchVersion) < (rootProject.version as PhoebenchVersion))
|
||||
throw GradleException("UI Clients version must be at least as high as protocol/common version")
|
||||
|
||||
+1
-1
@@ -232,7 +232,7 @@ class ProjectVM(
|
||||
fun updateBenchmark(id: Uuid, name: String?) {
|
||||
withScope {
|
||||
val old = _benchmarks.value.find { it.id == id } ?: return@withScope
|
||||
_repo.updateVersion(id, name).snackOr {
|
||||
_repo.updateBenchmark(id, name).snackOr {
|
||||
if(_job == null) {
|
||||
_benchmarks.value = _benchmarks.value.replace({ it.id == id }) { it.copy(name = name ?: old.name) }
|
||||
}
|
||||
|
||||
+33
-6
@@ -115,6 +115,7 @@ fun ProjectPanel(vm: ProjectVM, editable: Boolean, versions: Map<Uuid, ProjectVM
|
||||
var addOpen by remember { mutableStateOf(false) }
|
||||
var addingLabel by remember { mutableStateOf(false) }
|
||||
var addingData by remember { mutableStateOf(false) }
|
||||
var editing by remember { mutableStateOf(false) }
|
||||
|
||||
Surface(Modifier.fillMaxSize().padding(8.dp), tonalElevation = 10.dp, shape = MaterialTheme.shapes.medium) {
|
||||
Column(Modifier.fillMaxSize()) {
|
||||
@@ -126,10 +127,15 @@ fun ProjectPanel(vm: ProjectVM, editable: Boolean, versions: Map<Uuid, ProjectVM
|
||||
|
||||
Box(Modifier.weight(1f)) {
|
||||
var isOpen by remember { mutableStateOf(false) }
|
||||
Row(Modifier.clickable { isOpen = !isOpen }, verticalAlignment = Alignment.CenterVertically) {
|
||||
Text(currentBenchmark.name, style = MaterialTheme.typography.headlineMedium)
|
||||
Spacer(Modifier.width(10.dp))
|
||||
Icon(Lucide.ChevronDown, "Select benchmark...")
|
||||
Surface(shape = MaterialTheme.shapes.medium) {
|
||||
Row(Modifier.clickable { isOpen = !isOpen }, verticalAlignment = Alignment.CenterVertically) {
|
||||
Text(currentBenchmark.name, style = MaterialTheme.typography.headlineMedium)
|
||||
Spacer(Modifier.width(10.dp))
|
||||
IconButton({ editing = true }) {
|
||||
Icon(Lucide.Pencil, "Edit benchmark")
|
||||
}
|
||||
Icon(Lucide.ChevronDown, "Select benchmark...")
|
||||
}
|
||||
}
|
||||
|
||||
DropdownMenu(isOpen, { isOpen = false }) {
|
||||
@@ -224,6 +230,8 @@ fun ProjectPanel(vm: ProjectVM, editable: Boolean, versions: Map<Uuid, ProjectVM
|
||||
vm.mkEntry(label, warmups, measurements, unit, input, hardware)
|
||||
addOpen = false
|
||||
}
|
||||
|
||||
if(editing) EditBenchmarkDialog(currentBenchmark, { editing = false }) { vm.updateBenchmark(currentBenchmark.id, it) }
|
||||
}
|
||||
|
||||
@Composable
|
||||
@@ -287,6 +295,25 @@ fun AddBenchmarkDialog(onCancel: () -> Unit, onAdd: (name: String) -> Unit) {
|
||||
}
|
||||
}
|
||||
|
||||
@Composable
|
||||
fun EditBenchmarkDialog(benchmark: ProjectVM.Benchmark, onCancel: () -> Unit, onUpdate: (name: String) -> Unit) {
|
||||
Dialog(onDismissRequest = onCancel) {
|
||||
var name by remember { mutableStateOf(benchmark.name) }
|
||||
|
||||
Surface(Modifier.padding(15.dp).widthIn(400.dp), shape = MaterialTheme.shapes.medium) {
|
||||
Column(Modifier.padding(8.dp).width(IntrinsicSize.Min)) {
|
||||
Text("Modify benchmark", Modifier.align(Alignment.CenterHorizontally), style = MaterialTheme.typography.headlineMedium)
|
||||
OutlinedTextField(name, { name = it }, Modifier.fillMaxWidth(), label = { Text("Name") })
|
||||
Spacer(Modifier.height(10.dp))
|
||||
|
||||
CancelConfirmXRow(onCancel, {
|
||||
onUpdate(name.trim())
|
||||
}, confirmText = "Update", canConfirm = name.trim().isNotBlank() && name.trim() != benchmark.name)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Composable
|
||||
fun AddVersionDialog(onCancel: () -> Unit, onAdd: (name: String, color: Color, meta: String) -> Unit) {
|
||||
Dialog(onDismissRequest = onCancel) {
|
||||
@@ -789,7 +816,7 @@ fun ProjectPlotArea(vm: ProjectVM, benchmark: ProjectVM.Benchmark) {
|
||||
|
||||
item { Spacer(Modifier.height(10.dp)) }
|
||||
|
||||
items((visibleInputs intersect inputFilter.toSet()).toList()) {
|
||||
items((visibleInputs intersect inputFilter.toSet()).sorted()) {
|
||||
Row(Modifier.fillMaxWidth().clickable {
|
||||
if(inputFilter.size == allInputs.size) {
|
||||
inputFilter.clear()
|
||||
@@ -809,7 +836,7 @@ fun ProjectPlotArea(vm: ProjectVM, benchmark: ProjectVM.Benchmark) {
|
||||
}
|
||||
}
|
||||
|
||||
items((visibleInputs - inputFilter.toSet()).toList()) {
|
||||
items((visibleInputs - inputFilter.toSet()).sorted()) {
|
||||
Row(Modifier.fillMaxWidth().clickable {
|
||||
if(inputFilter.size == allInputs.size) {
|
||||
inputFilter.clear()
|
||||
|
||||
Reference in New Issue
Block a user