From a712814ae76be448cfaedb59346a27a6a0462b04 Mon Sep 17 00:00:00 2001 From: Suraj Kumar Date: Sun, 2 Nov 2025 11:49:30 +0000 Subject: [PATCH 1/6] wip: remove terminal from IDEScreen.kt --- .../jvmMain/kotlin/com/wannaverse/wannacode/ide/IDEScreen.kt | 5 ----- 1 file changed, 5 deletions(-) diff --git a/composeApp/src/jvmMain/kotlin/com/wannaverse/wannacode/ide/IDEScreen.kt b/composeApp/src/jvmMain/kotlin/com/wannaverse/wannacode/ide/IDEScreen.kt index 8b52f5f..6e64185 100644 --- a/composeApp/src/jvmMain/kotlin/com/wannaverse/wannacode/ide/IDEScreen.kt +++ b/composeApp/src/jvmMain/kotlin/com/wannaverse/wannacode/ide/IDEScreen.kt @@ -10,7 +10,6 @@ import com.wannaverse.wannacode.ide.editor.CodeEditor import com.wannaverse.wannacode.ide.editor.CodeEditorTabs import com.wannaverse.wannacode.ide.editor.viewmodel.CodeEditorViewModel import com.wannaverse.wannacode.ide.explorer.FileExplorer -import com.wannaverse.wannacode.ide.terminal.Terminal import java.io.File @Composable @@ -31,9 +30,5 @@ fun IDEScreen(directory: File, viewModel: CodeEditorViewModel = viewModel { Code CodeEditor(viewModel) } } - - Column { - Terminal() - } } } From d25e32aeb6a5eb17550b22b5d4085ad8b0532b1c Mon Sep 17 00:00:00 2001 From: Suraj Kumar Date: Sun, 2 Nov 2025 11:50:16 +0000 Subject: [PATCH 2/6] wip: enhance the hamburger with additional sub menu --- .../com/wannaverse/wannacode/ide/Hamburger.kt | 142 ++++++++++++------ 1 file changed, 97 insertions(+), 45 deletions(-) diff --git a/composeApp/src/jvmMain/kotlin/com/wannaverse/wannacode/ide/Hamburger.kt b/composeApp/src/jvmMain/kotlin/com/wannaverse/wannacode/ide/Hamburger.kt index 9d4c7fa..30205b8 100644 --- a/composeApp/src/jvmMain/kotlin/com/wannaverse/wannacode/ide/Hamburger.kt +++ b/composeApp/src/jvmMain/kotlin/com/wannaverse/wannacode/ide/Hamburger.kt @@ -3,7 +3,12 @@ package com.wannaverse.wannacode.ide import androidx.compose.foundation.background import androidx.compose.foundation.border import androidx.compose.foundation.clickable +import androidx.compose.foundation.layout.Box +import androidx.compose.foundation.layout.Row +import androidx.compose.foundation.layout.Spacer +import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.size +import androidx.compose.foundation.layout.width import androidx.compose.foundation.shape.RoundedCornerShape import androidx.compose.material.DropdownMenu import androidx.compose.material.Icon @@ -14,67 +19,114 @@ import androidx.compose.runtime.getValue import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.remember import androidx.compose.runtime.setValue +import androidx.compose.ui.ExperimentalComposeUiApi import androidx.compose.ui.Modifier import androidx.compose.ui.graphics.Color +import androidx.compose.ui.input.pointer.pointerMoveFilter +import androidx.compose.ui.unit.DpOffset import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.sp import org.jetbrains.compose.resources.painterResource import wannacode.composeapp.generated.resources.Res import wannacode.composeapp.generated.resources.hamburg +import wannacode.composeapp.generated.resources.right_cheveron +@OptIn(ExperimentalComposeUiApi::class) @Composable fun Hamburger() { var expanded by remember { mutableStateOf(false) } + var subMenuExpanded by remember { mutableStateOf(false) } - Icon( - painter = painterResource(Res.drawable.hamburg), - contentDescription = null, - tint = Color.White, - modifier = Modifier.size(15.dp).clickable { expanded = !expanded } - ) + Box { + Icon( + painter = painterResource(Res.drawable.hamburg), + contentDescription = null, + tint = Color.White, + modifier = Modifier + .size(15.dp) + .clickable { expanded = !expanded } + ) + DropdownMenu( + expanded = expanded, + onDismissRequest = { + expanded = false + subMenuExpanded = false + }, + modifier = Modifier + .background(Color(0xFF17171D)) + .border(1.dp, Color(0xFF373737), RoundedCornerShape(5.dp)) + ) { + DropdownMenuItem( + text = { + Row { + Text("View", color = Color(0xFFB6B6B6), fontSize = 14.sp) + Spacer(Modifier.width(50.dp)) + Icon( + painter = painterResource(Res.drawable.right_cheveron), + contentDescription = null, + tint = Color.Gray, + modifier = Modifier.padding(top = 5.dp).size(10.dp) + ) + } + }, + onClick = {}, + modifier = Modifier.pointerMoveFilter( + onEnter = { + subMenuExpanded = true + false + }, + onExit = { + false + } + ) + ) + + DropdownMenuItem( + text = { Text("New Project", color = Color(0xFFB6B6B6), fontSize = 14.sp) }, + onClick = { expanded = false } + ) + DropdownMenuItem( + text = { Text("Open", color = Color(0xFFB6B6B6), fontSize = 14.sp) }, + onClick = { expanded = false } + ) + DropdownMenuItem( + text = { Text("Close", color = Color(0xFFB6B6B6), fontSize = 14.sp) }, + onClick = { expanded = false } + ) + } - DropdownMenu( - expanded = expanded, - onDismissRequest = { expanded = false }, - modifier = Modifier - .background(Color(0xFF17171D)) - .border(1.dp, Color(0xFF373737), RoundedCornerShape(5.dp)) - ) { - DropdownMenuItem( - text = { - Text( - text = "New Project", - color = Color(0xFFB6B6B6), - fontSize = 14.sp + if (subMenuExpanded) { + DropdownMenu( + expanded = true, + onDismissRequest = { subMenuExpanded = false }, + offset = DpOffset(x = 110.dp, y = 0.dp), + modifier = Modifier + .background(Color(0xFF17171D)) + .border(1.dp, Color(0xFF373737), RoundedCornerShape(5.dp)) + ) { + DropdownMenuItem( + text = { Text("Line Encodings", color = Color(0xFFB6B6B6), fontSize = 14.sp) }, + onClick = { + subMenuExpanded = false + expanded = false + } ) - }, - onClick = { - expanded = false - } - ) - DropdownMenuItem( - text = { - Text( - text = "Open", - color = Color(0xFFB6B6B6), - fontSize = 14.sp + DropdownMenuItem( + text = { Text("Whitespace", color = Color(0xFFB6B6B6), fontSize = 14.sp) }, + onClick = { + subMenuExpanded = false + expanded = false + } ) - }, - onClick = { - expanded = false - } - ) - DropdownMenuItem( - text = { - Text( - text = "Close", - color = Color(0xFFB6B6B6), - fontSize = 14.sp + DropdownMenuItem( + text = { Text("Special Characters", color = Color(0xFFB6B6B6), fontSize = 14.sp) }, + onClick = { + subMenuExpanded = false + expanded = false + } ) - }, - onClick = { - expanded = false } - ) + } } } + From acb788497de62c8ed67eb0c85690fc916dc6c837 Mon Sep 17 00:00:00 2001 From: Suraj Kumar Date: Sun, 2 Nov 2025 11:50:45 +0000 Subject: [PATCH 3/6] wip: stop jdt from starting --- .../src/jvmMain/kotlin/com/wannaverse/wannacode/Main.kt | 4 ---- 1 file changed, 4 deletions(-) diff --git a/composeApp/src/jvmMain/kotlin/com/wannaverse/wannacode/Main.kt b/composeApp/src/jvmMain/kotlin/com/wannaverse/wannacode/Main.kt index a3ed3c2..afd668e 100644 --- a/composeApp/src/jvmMain/kotlin/com/wannaverse/wannacode/Main.kt +++ b/composeApp/src/jvmMain/kotlin/com/wannaverse/wannacode/Main.kt @@ -110,10 +110,6 @@ fun main() = application { Scaffold( containerColor = MaterialTheme.colorScheme.background ) { - Thread { - launchJdtServer(viewModel.getDir()) - }.start() - IDEScreen(viewModel.getDir()) } } From 4134d2a07ab3fd5652774e4c0fbbc187f807bfb6 Mon Sep 17 00:00:00 2001 From: Suraj Kumar Date: Sun, 2 Nov 2025 11:51:11 +0000 Subject: [PATCH 4/6] wip: remove "version control" and quick run from the toolbar --- .../com/wannaverse/wannacode/ide/Toolbar.kt | 42 ++----------------- 1 file changed, 3 insertions(+), 39 deletions(-) diff --git a/composeApp/src/jvmMain/kotlin/com/wannaverse/wannacode/ide/Toolbar.kt b/composeApp/src/jvmMain/kotlin/com/wannaverse/wannacode/ide/Toolbar.kt index 3774614..bd18ee3 100644 --- a/composeApp/src/jvmMain/kotlin/com/wannaverse/wannacode/ide/Toolbar.kt +++ b/composeApp/src/jvmMain/kotlin/com/wannaverse/wannacode/ide/Toolbar.kt @@ -11,9 +11,11 @@ import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.size import androidx.compose.foundation.layout.width import androidx.compose.material.Icon +import androidx.compose.material.Text import androidx.compose.runtime.Composable import androidx.compose.ui.Modifier import androidx.compose.ui.graphics.Color +import androidx.compose.ui.text.font.FontWeight import androidx.compose.ui.text.style.TextAlign import androidx.compose.ui.unit.dp import com.wannaverse.wannacode.STROKE_COLOR @@ -38,49 +40,11 @@ fun Toolbar(viewModel: CodeEditorViewModel) { top = 20.dp ) ) { - Row { + Row(modifier = Modifier.padding(bottom = 20.dp)) { Hamburger() - Spacer(Modifier.width(30.dp)) - - Dropdown( - selectedOption = viewModel.projectName.value, - options = listOf(), - onOptionSelected = { }, - modifier = Modifier.width(200.dp).height(43.dp).padding(bottom = 10.dp).offset(y = (-5).dp), - backgroundColor = Color(0xFF16161A), - alignTextAlign = TextAlign.Center - ) - - Spacer(Modifier.width(20.dp)) - - PlainDropdown( - selectedOption = "Version Control", - options = listOf("Pull", "Commit", "Push", "New Branch", "Change Branch"), - onOptionSelected = {}, - modifier = Modifier.width(130.dp).offset(y = (-3).dp) - ) - Spacer(Modifier.weight(1f)) - Dropdown( - selectedOption = "./gradlew run", - options = listOf(""), - onOptionSelected = { }, - modifier = Modifier.width(200.dp).offset(y = (-10).dp).height(40.dp) - ) - - Spacer(Modifier.width(10.dp)) - - Icon( - painter = painterResource(Res.drawable.play), - contentDescription = null, - tint = Color(0xFF27FF27), - modifier = Modifier.size(20.dp) - ) - - Spacer(Modifier.width(100.dp)) - Icon( painter = painterResource(Res.drawable.minimize), contentDescription = null, From 23f4847756c958c8c08bda5c3eea2ebf1e201499 Mon Sep 17 00:00:00 2001 From: Suraj Kumar Date: Sun, 2 Nov 2025 11:52:17 +0000 Subject: [PATCH 5/6] wip: remove info panel on editor --- .../com/wannaverse/wannacode/ide/editor/CodeEditor.kt | 7 ------- 1 file changed, 7 deletions(-) diff --git a/composeApp/src/jvmMain/kotlin/com/wannaverse/wannacode/ide/editor/CodeEditor.kt b/composeApp/src/jvmMain/kotlin/com/wannaverse/wannacode/ide/editor/CodeEditor.kt index 00ee206..01e215b 100644 --- a/composeApp/src/jvmMain/kotlin/com/wannaverse/wannacode/ide/editor/CodeEditor.kt +++ b/composeApp/src/jvmMain/kotlin/com/wannaverse/wannacode/ide/editor/CodeEditor.kt @@ -66,12 +66,5 @@ fun CodeEditor(viewModel: CodeEditorViewModel) { Scrollbar(scrollState, Modifier.align(Alignment.CenterEnd)) } - - InfoPanel( - viewModel = viewModel, - modifier = Modifier - .fillMaxWidth() - .height(150.dp) - ) } } From 56722743abd63273e60594c5a77cc0fe04f66ac1 Mon Sep 17 00:00:00 2001 From: Suraj Kumar Date: Sun, 2 Nov 2025 12:18:40 +0000 Subject: [PATCH 6/6] wip: add menu on editor --- .../wannacode/common/NoStyleDropdown.kt | 80 ++++++++++++++ .../com/wannaverse/wannacode/ide/Hamburger.kt | 1 - .../wannacode/ide/editor/CodeEditor.kt | 23 +++- .../wannacode/ide/editor/CodeEditorGutter.kt | 3 +- .../wannacode/ide/editor/CodeEditorInput.kt | 2 - .../wannacode/ide/editor/EditorMenu.kt | 102 ++++++++++++++++++ 6 files changed, 202 insertions(+), 9 deletions(-) create mode 100644 composeApp/src/jvmMain/kotlin/com/wannaverse/wannacode/common/NoStyleDropdown.kt create mode 100644 composeApp/src/jvmMain/kotlin/com/wannaverse/wannacode/ide/editor/EditorMenu.kt diff --git a/composeApp/src/jvmMain/kotlin/com/wannaverse/wannacode/common/NoStyleDropdown.kt b/composeApp/src/jvmMain/kotlin/com/wannaverse/wannacode/common/NoStyleDropdown.kt new file mode 100644 index 0000000..40c7937 --- /dev/null +++ b/composeApp/src/jvmMain/kotlin/com/wannaverse/wannacode/common/NoStyleDropdown.kt @@ -0,0 +1,80 @@ +package com.wannaverse.wannacode.common + +import androidx.compose.foundation.background +import androidx.compose.foundation.border +import androidx.compose.foundation.clickable +import androidx.compose.foundation.layout.Box +import androidx.compose.foundation.layout.Row +import androidx.compose.foundation.layout.fillMaxSize +import androidx.compose.foundation.layout.fillMaxWidth +import androidx.compose.foundation.layout.height +import androidx.compose.foundation.layout.padding +import androidx.compose.foundation.shape.RoundedCornerShape +import androidx.compose.material3.DropdownMenu +import androidx.compose.material3.DropdownMenuItem +import androidx.compose.material3.Icon +import androidx.compose.material3.Text +import androidx.compose.runtime.Composable +import androidx.compose.runtime.getValue +import androidx.compose.runtime.mutableStateOf +import androidx.compose.runtime.remember +import androidx.compose.runtime.setValue +import androidx.compose.ui.Alignment +import androidx.compose.ui.Modifier +import androidx.compose.ui.graphics.Color +import androidx.compose.ui.unit.dp +import androidx.compose.ui.unit.sp +import org.jetbrains.compose.resources.painterResource +import wannacode.composeapp.generated.resources.Res +import wannacode.composeapp.generated.resources.down_cheveron + +@Composable +fun NoStyleDropDown( + selectedOption: String, + options: List, + onOptionSelected: (String) -> Unit, + modifier: Modifier = Modifier +) { + var expanded by remember { mutableStateOf(false) } + + Box( + modifier = modifier + .clickable { expanded = !expanded }, + contentAlignment = Alignment.CenterStart + ) { + Row( + verticalAlignment = Alignment.CenterVertically + ) { + Text( + text = selectedOption, + color = Color(0xFF9F9F9F), + fontSize = 14.sp, + modifier = Modifier.weight(1f) + ) + } + + DropdownMenu( + expanded = expanded, + onDismissRequest = { expanded = false }, + modifier = Modifier + .background(Color(0xFF17171D)) + .border(1.dp, Color(0xFF373737), RoundedCornerShape(2.dp)) + ) { + options.forEach { option -> + DropdownMenuItem( + onClick = { + onOptionSelected(option) + expanded = false + }, + text = { + Text( + text = option, + color = Color(0xFFB6B6B6), + fontSize = 14.sp + ) + } + ) + } + } + } +} diff --git a/composeApp/src/jvmMain/kotlin/com/wannaverse/wannacode/ide/Hamburger.kt b/composeApp/src/jvmMain/kotlin/com/wannaverse/wannacode/ide/Hamburger.kt index 30205b8..f83646e 100644 --- a/composeApp/src/jvmMain/kotlin/com/wannaverse/wannacode/ide/Hamburger.kt +++ b/composeApp/src/jvmMain/kotlin/com/wannaverse/wannacode/ide/Hamburger.kt @@ -129,4 +129,3 @@ fun Hamburger() { } } } - diff --git a/composeApp/src/jvmMain/kotlin/com/wannaverse/wannacode/ide/editor/CodeEditor.kt b/composeApp/src/jvmMain/kotlin/com/wannaverse/wannacode/ide/editor/CodeEditor.kt index 01e215b..6724e97 100644 --- a/composeApp/src/jvmMain/kotlin/com/wannaverse/wannacode/ide/editor/CodeEditor.kt +++ b/composeApp/src/jvmMain/kotlin/com/wannaverse/wannacode/ide/editor/CodeEditor.kt @@ -44,6 +44,12 @@ fun CodeEditor(viewModel: CodeEditorViewModel) { var fontSize by remember { mutableStateOf(14.sp) } + EditorMenu( + tab = tab, + viewModel = viewModel, + fontSize = fontSize + ) + Column(modifier = Modifier.fillMaxSize()) { BoxWithConstraints( modifier = Modifier @@ -58,10 +64,19 @@ fun CodeEditor(viewModel: CodeEditorViewModel) { .heightIn(max = maxHeight) .verticalScroll(scrollState) ) { - CodeEditorGutter(tab, viewModel = viewModel, fontSize = fontSize) - CodeEditorInput(tab, viewModel = viewModel, onFontSizeChange = { - fontSize = it - }) + CodeEditorGutter( + tab = tab, + viewModel = viewModel, + fontSize = fontSize + ) + + CodeEditorInput( + tab = tab, + viewModel = viewModel, + onFontSizeChange = { + fontSize = it + } + ) } Scrollbar(scrollState, Modifier.align(Alignment.CenterEnd)) diff --git a/composeApp/src/jvmMain/kotlin/com/wannaverse/wannacode/ide/editor/CodeEditorGutter.kt b/composeApp/src/jvmMain/kotlin/com/wannaverse/wannacode/ide/editor/CodeEditorGutter.kt index af4ae88..db70b94 100644 --- a/composeApp/src/jvmMain/kotlin/com/wannaverse/wannacode/ide/editor/CodeEditorGutter.kt +++ b/composeApp/src/jvmMain/kotlin/com/wannaverse/wannacode/ide/editor/CodeEditorGutter.kt @@ -48,7 +48,7 @@ fun CodeEditorGutter( Column( modifier = Modifier .padding(end = 8.dp) - .background(Color(0xFF17171D)) + // .background(Color(0xFF17171D)) .padding(start = 5.dp, end = 10.dp) .fillMaxHeight() ) { @@ -56,7 +56,6 @@ fun CodeEditorGutter( val diagsForLine = diagnosticsByLine[index] ?: emptyList() Row(verticalAlignment = Alignment.CenterVertically) { - // Line number with dynamic fontSize Text( text = "${index + 1}", color = Color(0xFF383838), diff --git a/composeApp/src/jvmMain/kotlin/com/wannaverse/wannacode/ide/editor/CodeEditorInput.kt b/composeApp/src/jvmMain/kotlin/com/wannaverse/wannacode/ide/editor/CodeEditorInput.kt index 584fc56..404a0e3 100644 --- a/composeApp/src/jvmMain/kotlin/com/wannaverse/wannacode/ide/editor/CodeEditorInput.kt +++ b/composeApp/src/jvmMain/kotlin/com/wannaverse/wannacode/ide/editor/CodeEditorInput.kt @@ -2,7 +2,6 @@ package com.wannaverse.wannacode.ide.editor import androidx.compose.foundation.layout.Box import androidx.compose.foundation.layout.fillMaxWidth -import androidx.compose.foundation.layout.padding import androidx.compose.foundation.text.BasicTextField import androidx.compose.material3.Text import androidx.compose.runtime.Composable @@ -46,7 +45,6 @@ fun CodeEditorInput(tab: TabContent, viewModel: CodeEditorViewModel, onFontSizeC Box( modifier = Modifier .fillMaxWidth() - .padding(top = 5.dp) .pointerInput(Unit) { awaitPointerEventScope { while (true) { diff --git a/composeApp/src/jvmMain/kotlin/com/wannaverse/wannacode/ide/editor/EditorMenu.kt b/composeApp/src/jvmMain/kotlin/com/wannaverse/wannacode/ide/editor/EditorMenu.kt new file mode 100644 index 0000000..9cc4ba6 --- /dev/null +++ b/composeApp/src/jvmMain/kotlin/com/wannaverse/wannacode/ide/editor/EditorMenu.kt @@ -0,0 +1,102 @@ +package com.wannaverse.wannacode.ide.editor + +import androidx.compose.foundation.background +import androidx.compose.foundation.clickable +import androidx.compose.foundation.layout.Arrangement +import androidx.compose.foundation.layout.Box +import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.Row +import androidx.compose.foundation.layout.fillMaxWidth +import androidx.compose.foundation.layout.padding +import androidx.compose.material.Text +import androidx.compose.material3.DropdownMenu +import androidx.compose.material3.DropdownMenuItem +import androidx.compose.runtime.Composable +import androidx.compose.runtime.getValue +import androidx.compose.runtime.mutableStateOf +import androidx.compose.runtime.remember +import androidx.compose.runtime.setValue +import androidx.compose.ui.Modifier +import androidx.compose.ui.graphics.Color +import androidx.compose.ui.unit.TextUnit +import androidx.compose.ui.unit.dp +import com.wannaverse.wannacode.ide.editor.viewmodel.CodeEditorViewModel +import com.wannaverse.wannacode.ide.editor.viewmodel.TabContent + +@Composable +fun EditorMenu( + tab: TabContent, + fontSize: TextUnit, + viewModel: CodeEditorViewModel +) { + val color = Color.Gray + var expandedMenu by remember { mutableStateOf(null) } + + Column( + modifier = Modifier + .fillMaxWidth() + .background(Color(0xFF18181C)) + .padding(10.dp) + ) { + Row( + horizontalArrangement = Arrangement.spacedBy(10.dp), + modifier = Modifier.padding(start = 10.dp) + ) { + MenuDropdown( + title = "File", + color = color, + expandedMenu = expandedMenu, + onMenuClick = { expandedMenu = if (expandedMenu == "File") null else "File" }, + items = listOf("New", "Open", "Save", "Save As") + ) + + MenuDropdown( + title = "Edit", + color = color, + expandedMenu = expandedMenu, + onMenuClick = { expandedMenu = if (expandedMenu == "Edit") null else "Edit" }, + items = listOf("Undo", "Redo", "Cut", "Copy", "Paste") + ) + + MenuDropdown( + title = "View", + color = color, + expandedMenu = expandedMenu, + onMenuClick = { expandedMenu = if (expandedMenu == "View") null else "View" }, + items = listOf("Zoom In", "Zoom Out", "Toggle Sidebar") + ) + } + } +} + +@Composable +fun MenuDropdown( + title: String, + color: Color, + expandedMenu: String?, + onMenuClick: () -> Unit, + items: List +) { + Box { + Text( + text = title, + color = color, + modifier = Modifier + .clickable { onMenuClick() } + .padding(4.dp) + ) + DropdownMenu( + expanded = expandedMenu == title, + onDismissRequest = { onMenuClick() } + ) { + items.forEach { item -> + DropdownMenuItem( + text = { Text(item, color = color) }, + onClick = { + onMenuClick() + } + ) + } + } + } +}