From 516c3a1fa28c5a48df2e457cd8a7cbd2893c83a6 Mon Sep 17 00:00:00 2001 From: yricky Date: Sat, 22 Jun 2024 15:19:25 +0800 Subject: [PATCH] =?UTF-8?q?feat:=E6=8F=90=E5=8F=96=E5=85=AC=E5=85=B1UI?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../oh/abcd/literal/ModuleLiteralArray.kt | 4 +- .../kotlin/me/yricky/oh/abcd/isa/Asm.jvm.kt | 4 +- .../yricky/abcde/content/ModuleInfoContent.kt | 83 +++++++++++++++++++ .../kotlin/me/yricky/abcde/page/ClassView.kt | 64 +------------- .../kotlin/me/yricky/abcde/page/CodeView.kt | 11 ++- 5 files changed, 99 insertions(+), 67 deletions(-) create mode 100644 abcdecoder/src/jvmMain/kotlin/me/yricky/abcde/content/ModuleInfoContent.kt diff --git a/abcde/src/commonMain/kotlin/me/yricky/oh/abcd/literal/ModuleLiteralArray.kt b/abcde/src/commonMain/kotlin/me/yricky/oh/abcd/literal/ModuleLiteralArray.kt index eae8377..c3e9af1 100644 --- a/abcde/src/commonMain/kotlin/me/yricky/oh/abcd/literal/ModuleLiteralArray.kt +++ b/abcde/src/commonMain/kotlin/me/yricky/oh/abcd/literal/ModuleLiteralArray.kt @@ -78,7 +78,7 @@ class ModuleLiteralArray( } else null override fun toString(): String { - return "$moduleRequest.$importName as $localName" + return "import $moduleRequest.$importName as $localName" } companion object{ fun parseFrom(mla: ModuleLiteralArray,offset: Int):RegularImport{ @@ -131,7 +131,7 @@ class ModuleLiteralArray( mla.abc.stringItem(exportNameOffset).value } else null override fun toString(): String { - return "LocalExport(l:$localName, ex:$exportName)" + return "export $localName.$exportName" } companion object{ fun parseFrom(mla: ModuleLiteralArray,offset: Int):LocalExport{ diff --git a/abcde/src/jvmMain/kotlin/me/yricky/oh/abcd/isa/Asm.jvm.kt b/abcde/src/jvmMain/kotlin/me/yricky/oh/abcd/isa/Asm.jvm.kt index 768c873..5dccf02 100644 --- a/abcde/src/jvmMain/kotlin/me/yricky/oh/abcd/isa/Asm.jvm.kt +++ b/abcde/src/jvmMain/kotlin/me/yricky/oh/abcd/isa/Asm.jvm.kt @@ -6,6 +6,6 @@ import me.yricky.oh.abcd.isa.bean.Isa actual fun loadInnerAsmMap(): AsmMap { val yaml = Yaml(configuration = YamlConfiguration(strictMode = false)) - - return AsmMap(yaml.decodeFromString(Isa.serializer(),Asm::class.java.classLoader.getResourceAsStream("abcde/isa.yaml").reader().readText())) + return AsmMap(yaml.decodeFromString(Isa.serializer(), + Asm::class.java.classLoader.getResourceAsStream("abcde/isa.yaml")!!.reader().readText())) } \ No newline at end of file diff --git a/abcdecoder/src/jvmMain/kotlin/me/yricky/abcde/content/ModuleInfoContent.kt b/abcdecoder/src/jvmMain/kotlin/me/yricky/abcde/content/ModuleInfoContent.kt new file mode 100644 index 0000000..5e163ff --- /dev/null +++ b/abcdecoder/src/jvmMain/kotlin/me/yricky/abcde/content/ModuleInfoContent.kt @@ -0,0 +1,83 @@ +package me.yricky.abcde.content + +import androidx.compose.foundation.ExperimentalFoundationApi +import androidx.compose.foundation.Image +import androidx.compose.foundation.background +import androidx.compose.foundation.layout.* +import androidx.compose.foundation.lazy.items +import androidx.compose.material3.MaterialTheme +import androidx.compose.material3.Text +import androidx.compose.runtime.Composable +import androidx.compose.ui.Alignment +import androidx.compose.ui.Modifier +import androidx.compose.ui.unit.dp +import me.yricky.abcde.ui.LazyColumnWithScrollBar +import me.yricky.abcde.ui.icon +import me.yricky.oh.abcd.cfm.AbcClass + +@OptIn(ExperimentalFoundationApi::class) +@Composable +fun ModuleInfoContent( + modifier: Modifier, + clazz: AbcClass +){ + Column(modifier) { + Row(verticalAlignment = Alignment.CenterVertically) { + Image(clazz.icon(), null, modifier = Modifier.padding(8.dp).size(24.dp)) + Text(clazz.name, style = MaterialTheme.typography.titleLarge) + } + LazyColumnWithScrollBar { + clazz.moduleInfo?.let { m -> + stickyHeader { + Text("ModuleRequests(${m.moduleRequestNum})",Modifier.fillMaxWidth().background(MaterialTheme.colorScheme.surface)) + } + items(m.moduleRequests){ + Text("- $it") + } + stickyHeader { + Text("RegularImports(${m.regularImportNum})",Modifier.fillMaxWidth().background(MaterialTheme.colorScheme.surface)) + } + items(m.regularImports){ + Column(Modifier.padding(4.dp)) { + Text("- ${it}") + } + } + stickyHeader { + Text("NamespaceImports(${m.namespaceImportNum})",Modifier.fillMaxWidth().background(MaterialTheme.colorScheme.surface)) + } + items(m.namespaceImports){ + Column(Modifier.padding(4.dp)) { + Text("- localName:${it.localName}") + Text("- moduleRequest:${it.moduleRequest}") + } + } + stickyHeader { + Text("LocalExports(${m.localExportNum})",Modifier.fillMaxWidth().background(MaterialTheme.colorScheme.surface)) + } + items(m.localExports){ + Column(Modifier.padding(4.dp)) { + Text("- ${it}") + } + } + stickyHeader { + Text("IndirectExports(${m.indirectExportNum})",Modifier.fillMaxWidth().background(MaterialTheme.colorScheme.surface)) + } + items(m.indirectExports){ + Column(Modifier.padding(4.dp)) { + Text("- importName:${it.importName}") + Text("- exportName:${it.exportName}") + Text("- moduleRequest:${it.moduleRequest}") + } + } + stickyHeader { + Text("StarExports(${m.starExportNum})",Modifier.fillMaxWidth().background(MaterialTheme.colorScheme.surface)) + } + items(m.starExports){ + Column { + Text("- moduleRequest:${it.moduleRequest}") + } + } + } + } + } +} \ No newline at end of file diff --git a/abcdecoder/src/jvmMain/kotlin/me/yricky/abcde/page/ClassView.kt b/abcdecoder/src/jvmMain/kotlin/me/yricky/abcde/page/ClassView.kt index 9777695..50c950d 100644 --- a/abcdecoder/src/jvmMain/kotlin/me/yricky/abcde/page/ClassView.kt +++ b/abcdecoder/src/jvmMain/kotlin/me/yricky/abcde/page/ClassView.kt @@ -22,6 +22,7 @@ import androidx.compose.ui.text.style.TextOverflow import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.sp import me.yricky.abcde.AppState +import me.yricky.abcde.content.ModuleInfoContent import me.yricky.abcde.ui.* import me.yricky.oh.abcd.cfm.AbcField import me.yricky.oh.abcd.cfm.AbcMethod @@ -138,68 +139,7 @@ fun ClassViewPage( }, composeSelectContent{ _:Boolean -> Image(Icons.pkg(), null, Modifier.fillMaxSize().alpha(0.5f), colorFilter = grayColorFilter) } to composeContent{ - Column(Modifier.fillMaxSize()) { - Row(verticalAlignment = Alignment.CenterVertically) { - Image(clazz.icon(), null, modifier = Modifier.padding(8.dp).size(24.dp)) - Text(clazz.name, style = MaterialTheme.typography.titleLarge) - } - LazyColumnWithScrollBar { - clazz.moduleInfo?.let { m -> - stickyHeader { - Text("ModuleRequests(${m.moduleRequestNum})",Modifier.fillMaxWidth().background(MaterialTheme.colorScheme.surface)) - } - items(m.moduleRequests){ - Text("- $it") - } - stickyHeader { - Text("RegularImports(${m.regularImportNum})",Modifier.fillMaxWidth().background(MaterialTheme.colorScheme.surface)) - } - items(m.regularImports){ - Column(Modifier.padding(4.dp)) { - Text("- localName:${it.localName}") - Text("- importName:${it.importName}") - Text("- moduleRequest:${it.moduleRequest}") - } - } - stickyHeader { - Text("NamespaceImports(${m.namespaceImportNum})",Modifier.fillMaxWidth().background(MaterialTheme.colorScheme.surface)) - } - items(m.namespaceImports){ - Column(Modifier.padding(4.dp)) { - Text("- localName:${it.localName}") - Text("- moduleRequest:${it.moduleRequest}") - } - } - stickyHeader { - Text("LocalExports(${m.localExportNum})",Modifier.fillMaxWidth().background(MaterialTheme.colorScheme.surface)) - } - items(m.localExports){ - Column(Modifier.padding(4.dp)) { - Text("- localName:${it.localName}") - Text("- exportName:${it.exportName}") - } - } - stickyHeader { - Text("IndirectExports(${m.indirectExportNum})",Modifier.fillMaxWidth().background(MaterialTheme.colorScheme.surface)) - } - items(m.indirectExports){ - Column(Modifier.padding(4.dp)) { - Text("- importName:${it.importName}") - Text("- exportName:${it.exportName}") - Text("- moduleRequest:${it.moduleRequest}") - } - } - stickyHeader { - Text("StarExports(${m.starExportNum})",Modifier.fillMaxWidth().background(MaterialTheme.colorScheme.surface)) - } - items(m.starExports){ - Column { - Text("- moduleRequest:${it.moduleRequest}") - } - } - } - } - } + ModuleInfoContent(Modifier.fillMaxSize(),clazz) } )) } diff --git a/abcdecoder/src/jvmMain/kotlin/me/yricky/abcde/page/CodeView.kt b/abcdecoder/src/jvmMain/kotlin/me/yricky/abcde/page/CodeView.kt index 1ff9f23..6891cd7 100644 --- a/abcdecoder/src/jvmMain/kotlin/me/yricky/abcde/page/CodeView.kt +++ b/abcdecoder/src/jvmMain/kotlin/me/yricky/abcde/page/CodeView.kt @@ -24,8 +24,11 @@ import androidx.compose.ui.text.font.FontFamily import androidx.compose.ui.text.platform.Font import androidx.compose.ui.unit.dp import me.yricky.abcde.AppState +import me.yricky.abcde.content.ModuleInfoContent import me.yricky.abcde.ui.* +import me.yricky.oh.abcd.cfm.AbcClass import me.yricky.oh.abcd.cfm.AbcMethod +import me.yricky.oh.abcd.cfm.FieldType import me.yricky.oh.abcd.code.Code import me.yricky.oh.abcd.code.TryBlock import me.yricky.oh.abcd.isa.calledMethods @@ -201,7 +204,7 @@ fun CodeViewPage(modifier: Modifier, appState: AppState, method: AbcMethod, code } } }, composeSelectContent { _: Boolean -> - Image(Icons.pkg(), null, Modifier.fillMaxSize().alpha(0.5f), colorFilter = grayColorFilter) + Image(Icons.listFiles(), null, Modifier.fillMaxSize().alpha(0.5f), colorFilter = grayColorFilter) } to composeContent { Column(Modifier.fillMaxSize()) { LazyColumnWithScrollBar { @@ -210,6 +213,12 @@ fun CodeViewPage(modifier: Modifier, appState: AppState, method: AbcMethod, code } } } + }, (method.clazz as? FieldType.ClassType)?.let { it.clazz as? AbcClass }?.let { clazz -> + composeSelectContent{ _:Boolean -> + Image(Icons.pkg(), null, Modifier.fillMaxSize().alpha(0.5f), colorFilter = grayColorFilter) + } to composeContent{ + ModuleInfoContent(Modifier.fillMaxSize(),clazz) + } } )) } \ No newline at end of file