From 341463cbb4b3f7bffd29609c20806129c6eaced7 Mon Sep 17 00:00:00 2001 From: smarasca5 Date: Wed, 8 Apr 2026 14:36:21 -0400 Subject: [PATCH 01/11] testing testing --- app/src/processing/app/ui/Editor.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/src/processing/app/ui/Editor.java b/app/src/processing/app/ui/Editor.java index 52650ad65..56f7c01d7 100644 --- a/app/src/processing/app/ui/Editor.java +++ b/app/src/processing/app/ui/Editor.java @@ -20,7 +20,7 @@ along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - +// comment comment hi hi hi package processing.app.ui; import com.formdev.flatlaf.util.SystemInfo; From 5ffb3dae4308302998cb970f29aa0390a31bfc84 Mon Sep 17 00:00:00 2001 From: smarasca5 Date: Mon, 13 Apr 2026 14:13:00 -0400 Subject: [PATCH 02/11] made new editor.kt file --- app/src/processing/app/ui/Editor.kt | 2 ++ 1 file changed, 2 insertions(+) create mode 100644 app/src/processing/app/ui/Editor.kt diff --git a/app/src/processing/app/ui/Editor.kt b/app/src/processing/app/ui/Editor.kt new file mode 100644 index 000000000..034f938bb --- /dev/null +++ b/app/src/processing/app/ui/Editor.kt @@ -0,0 +1,2 @@ +package processing.app.ui + From e55a28160101e1d9b1fa28eb2780916f8dd524d7 Mon Sep 17 00:00:00 2001 From: Elijah Baron Date: Mon, 13 Apr 2026 14:48:24 -0400 Subject: [PATCH 03/11] added jetpack elements --- app/src/processing/app/ui/Editor.kt | 71 +++++++++++++++++++++++++++++ 1 file changed, 71 insertions(+) diff --git a/app/src/processing/app/ui/Editor.kt b/app/src/processing/app/ui/Editor.kt index 034f938bb..f815e67b9 100644 --- a/app/src/processing/app/ui/Editor.kt +++ b/app/src/processing/app/ui/Editor.kt @@ -1,2 +1,73 @@ package processing.app.ui + +//package com.example.compose.snippets.components + +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.fillMaxSize +import androidx.compose.foundation.layout.fillMaxWidth +import androidx.compose.foundation.layout.padding +import androidx.compose.foundation.layout.wrapContentSize +import androidx.compose.material.icons.Icons +import androidx.compose.material.icons.automirrored.filled.DirectionsBike +import androidx.compose.material.icons.automirrored.filled.DirectionsRun +import androidx.compose.material.icons.automirrored.filled.DirectionsWalk +import androidx.compose.material.icons.automirrored.outlined.Help +import androidx.compose.material.icons.automirrored.outlined.OpenInNew +import androidx.compose.material.icons.automirrored.outlined.Send +import androidx.compose.material.icons.filled.ArrowDropDown +import androidx.compose.material.icons.filled.Check +import androidx.compose.material.icons.filled.Hiking +import androidx.compose.material.icons.filled.MoreVert +import androidx.compose.material.icons.filled.Tune +import androidx.compose.material.icons.outlined.Feedback +import androidx.compose.material.icons.outlined.Info +import androidx.compose.material.icons.outlined.Person +import androidx.compose.material.icons.outlined.Settings +import androidx.compose.material3.Button +import androidx.compose.material3.DropdownMenu +import androidx.compose.material3.DropdownMenuItem +import androidx.compose.material3.FilterChip +import androidx.compose.material3.FloatingActionButton +import androidx.compose.material3.HorizontalDivider +import androidx.compose.material3.Icon +import androidx.compose.material3.IconButton +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.tooling.preview.Preview +import androidx.compose.ui.unit.dp + +@Composable +fun MinimalDropdownMenu() { + var expanded by remember { mutableStateOf(false) } + Box( + modifier = Modifier + .padding(16.dp) + ) { + IconButton(onClick = { expanded = !expanded }) { + Icon(Icons.Default.MoreVert, contentDescription = "More options") + } + DropdownMenu( + expanded = expanded, + onDismissRequest = { expanded = false } + ) { + DropdownMenuItem( + text = { Text("Option 1") }, + onClick = { /* Do something... */ } + ) + DropdownMenuItem( + text = { Text("Option 2") }, + onClick = { /* Do something... */ } + ) + } + } +} \ No newline at end of file From 012cd898aa2241c902287a5a91be8b2107001c76 Mon Sep 17 00:00:00 2001 From: Elijah Baron Date: Tue, 14 Apr 2026 18:05:39 -0400 Subject: [PATCH 04/11] Turned off existing top bar. Inserted compose top bar where the swing one was. Added one working drop down, but its not ideal at all. --- app/src/processing/app/ui/ComposeTopBar.kt | 100 +++++++++++++++++++++ app/src/processing/app/ui/Editor.java | 15 +++- app/src/processing/app/ui/Editor.kt | 73 --------------- 3 files changed, 113 insertions(+), 75 deletions(-) create mode 100644 app/src/processing/app/ui/ComposeTopBar.kt delete mode 100644 app/src/processing/app/ui/Editor.kt diff --git a/app/src/processing/app/ui/ComposeTopBar.kt b/app/src/processing/app/ui/ComposeTopBar.kt new file mode 100644 index 000000000..704571dd4 --- /dev/null +++ b/app/src/processing/app/ui/ComposeTopBar.kt @@ -0,0 +1,100 @@ +@file:JvmName("ComposeTopBarBridge") +package processing.app.ui + +import androidx.compose.foundation.background +import androidx.compose.foundation.clickable +import androidx.compose.foundation.layout.Box +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.runtime.Composable +import androidx.compose.runtime.mutableStateOf +import androidx.compose.runtime.remember +import androidx.compose.ui.Modifier +import androidx.compose.ui.awt.ComposePanel +import androidx.compose.ui.graphics.Color +import androidx.compose.ui.layout.onGloballyPositioned +import androidx.compose.ui.layout.positionInRoot +import androidx.compose.ui.unit.IntOffset +import androidx.compose.ui.unit.dp +import processing.app.Base +import processing.app.Preferences +import processing.app.UpdateCheck +import java.awt.Color as AwtColor +import javax.swing.JMenuItem +import javax.swing.JPopupMenu + +fun awtToCompose(c: AwtColor): Color { + return Color(c.red, c.green, c.blue, c.alpha) +} + +fun themeColorOrFallback(key: String, fallback: AwtColor): Color { + val awt = Theme.getColor(key) ?: fallback + return awtToCompose(awt) +} + +@Composable +fun TopBar(panel: ComposePanel, base: Base) { + val blueBarColor = themeColorOrFallback("toolbar.gradient.top", AwtColor(107, 160, 204)) + val textColor = themeColorOrFallback("toolbar.rollover.color", AwtColor(0, 0, 0)) + + val developAnchor = remember { mutableStateOf(IntOffset.Zero) } + val developHeight = remember { mutableStateOf(0) } + + Row( + modifier = Modifier + .fillMaxWidth() + .background(blueBarColor) + .padding(start = 8.dp) + ) { + Box( + modifier = Modifier.onGloballyPositioned { coordinates -> + val position = coordinates.positionInRoot() + developAnchor.value = IntOffset( + position.x.toInt(), + position.y.toInt() + ) + developHeight.value = coordinates.size.height + } + ) { + Text( + text = "Develop", + color = textColor, + modifier = Modifier + .padding(horizontal = 8.dp, vertical = 4.dp) + .clickable { + showDevelopPopup( + panel = panel, + base = base, + x = developAnchor.value.x, + y = developAnchor.value.y + developHeight.value + ) + } + ) + } + } +} + +private fun showDevelopPopup(panel: ComposePanel, base: Base, x: Int, y: Int) { + val popup = JPopupMenu() + + val updatesItem = JMenuItem("Check for Updates") + updatesItem.addActionListener { + Preferences.unset("update.last") + Preferences.setInteger("update.beta_welcome", 0) + UpdateCheck(base) + } + + popup.add(updatesItem) + popup.show(panel, x, y) +} + +fun mountTopBar(panel: ComposePanel, base: Base) { + val awtBg = Theme.getColor("toolbar.gradient.top") ?: AwtColor(107, 160, 204) + panel.background = awtBg + + panel.setContent { + TopBar(panel, base) + } +} \ No newline at end of file diff --git a/app/src/processing/app/ui/Editor.java b/app/src/processing/app/ui/Editor.java index 56f7c01d7..3f96cac32 100644 --- a/app/src/processing/app/ui/Editor.java +++ b/app/src/processing/app/ui/Editor.java @@ -59,6 +59,8 @@ import java.util.List; import java.util.Timer; import java.util.stream.Collectors; +import androidx.compose.ui.awt.ComposePanel; +import processing.app.ui.ComposeTopBarBridge; /** @@ -226,8 +228,14 @@ public void windowDeactivated(WindowEvent e) { rebuildModePopup(); + ComposePanel composeTopBar = new ComposePanel(); + ComposeTopBarBridge.mountTopBar(composeTopBar, base); + + + toolbar = createToolbar(); - upper.add(toolbar); + // upper.add(toolbar); + upper.add(composeTopBar); header = createHeader(); upper.add(header); @@ -691,10 +699,13 @@ protected void buildMenuBar() { updateDevelopMenu(menubar); Toolkit.setMenuMnemonics(menubar); - setJMenuBar(menubar); + //setJMenuBar(menubar); + setJMenuBar(null); } + + abstract public JMenu buildFileMenu(); diff --git a/app/src/processing/app/ui/Editor.kt b/app/src/processing/app/ui/Editor.kt deleted file mode 100644 index f815e67b9..000000000 --- a/app/src/processing/app/ui/Editor.kt +++ /dev/null @@ -1,73 +0,0 @@ -package processing.app.ui - - -//package com.example.compose.snippets.components - -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.fillMaxSize -import androidx.compose.foundation.layout.fillMaxWidth -import androidx.compose.foundation.layout.padding -import androidx.compose.foundation.layout.wrapContentSize -import androidx.compose.material.icons.Icons -import androidx.compose.material.icons.automirrored.filled.DirectionsBike -import androidx.compose.material.icons.automirrored.filled.DirectionsRun -import androidx.compose.material.icons.automirrored.filled.DirectionsWalk -import androidx.compose.material.icons.automirrored.outlined.Help -import androidx.compose.material.icons.automirrored.outlined.OpenInNew -import androidx.compose.material.icons.automirrored.outlined.Send -import androidx.compose.material.icons.filled.ArrowDropDown -import androidx.compose.material.icons.filled.Check -import androidx.compose.material.icons.filled.Hiking -import androidx.compose.material.icons.filled.MoreVert -import androidx.compose.material.icons.filled.Tune -import androidx.compose.material.icons.outlined.Feedback -import androidx.compose.material.icons.outlined.Info -import androidx.compose.material.icons.outlined.Person -import androidx.compose.material.icons.outlined.Settings -import androidx.compose.material3.Button -import androidx.compose.material3.DropdownMenu -import androidx.compose.material3.DropdownMenuItem -import androidx.compose.material3.FilterChip -import androidx.compose.material3.FloatingActionButton -import androidx.compose.material3.HorizontalDivider -import androidx.compose.material3.Icon -import androidx.compose.material3.IconButton -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.tooling.preview.Preview -import androidx.compose.ui.unit.dp - -@Composable -fun MinimalDropdownMenu() { - var expanded by remember { mutableStateOf(false) } - Box( - modifier = Modifier - .padding(16.dp) - ) { - IconButton(onClick = { expanded = !expanded }) { - Icon(Icons.Default.MoreVert, contentDescription = "More options") - } - DropdownMenu( - expanded = expanded, - onDismissRequest = { expanded = false } - ) { - DropdownMenuItem( - text = { Text("Option 1") }, - onClick = { /* Do something... */ } - ) - DropdownMenuItem( - text = { Text("Option 2") }, - onClick = { /* Do something... */ } - ) - } - } -} \ No newline at end of file From 10c9de3f975d0cb425ecbc3901b594b8660eee8c Mon Sep 17 00:00:00 2001 From: smarasca5 Date: Wed, 15 Apr 2026 13:47:05 -0400 Subject: [PATCH 05/11] started work --- --force-with-leas | 0 --force-with-lease | 0 app/src/processing/app/ui/ComposeTopBar.kt | 2 +- 3 files changed, 1 insertion(+), 1 deletion(-) create mode 100644 --force-with-leas create mode 100644 --force-with-lease diff --git a/--force-with-leas b/--force-with-leas new file mode 100644 index 000000000..e69de29bb diff --git a/--force-with-lease b/--force-with-lease new file mode 100644 index 000000000..e69de29bb diff --git a/app/src/processing/app/ui/ComposeTopBar.kt b/app/src/processing/app/ui/ComposeTopBar.kt index 704571dd4..dc7f59151 100644 --- a/app/src/processing/app/ui/ComposeTopBar.kt +++ b/app/src/processing/app/ui/ComposeTopBar.kt @@ -87,7 +87,7 @@ private fun showDevelopPopup(panel: ComposePanel, base: Base, x: Int, y: Int) { } popup.add(updatesItem) - popup.show(panel, x, y) + popup.show(panel, x, y) //this is ignoring the os differences } fun mountTopBar(panel: ComposePanel, base: Base) { From 0a1944a6799e8d9d7122008bcb4a485cd3d1f600 Mon Sep 17 00:00:00 2001 From: Elijah Baron Date: Wed, 15 Apr 2026 14:06:53 -0400 Subject: [PATCH 06/11] added one more tab in the hot bar. --- app/src/processing/app/ui/ComposeTopBar.kt | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/app/src/processing/app/ui/ComposeTopBar.kt b/app/src/processing/app/ui/ComposeTopBar.kt index 704571dd4..ccb9d9fbd 100644 --- a/app/src/processing/app/ui/ComposeTopBar.kt +++ b/app/src/processing/app/ui/ComposeTopBar.kt @@ -57,6 +57,7 @@ fun TopBar(panel: ComposePanel, base: Base) { ) developHeight.value = coordinates.size.height } + ) { Text( text = "Develop", @@ -72,6 +73,21 @@ fun TopBar(panel: ComposePanel, base: Base) { ) } ) + Text ( + text = "New Button", + color = textColor, + modifier = Modifier + + .padding(horizontal = 40.dp, vertical = 4.dp) + .clickable { + showDevelopPopup( + panel = panel, + base = base, + x = developAnchor.value.x, + y = developAnchor.value.y + developHeight.value + ) + } + ) } } } From a8f0c3e2f3027f475592eed2c53ee0713fd41a50 Mon Sep 17 00:00:00 2001 From: Elijah Baron Date: Wed, 22 Apr 2026 16:05:36 -0400 Subject: [PATCH 07/11] Starting to work on drop downs. --- app/src/processing/app/ui/ComposeTopBar.kt | 152 +++++++++++++++------ app/src/processing/app/ui/Editor.java | 3 +- 2 files changed, 109 insertions(+), 46 deletions(-) diff --git a/app/src/processing/app/ui/ComposeTopBar.kt b/app/src/processing/app/ui/ComposeTopBar.kt index f2f46de5b..0d514883c 100644 --- a/app/src/processing/app/ui/ComposeTopBar.kt +++ b/app/src/processing/app/ui/ComposeTopBar.kt @@ -3,19 +3,23 @@ package processing.app.ui 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.Row import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.padding +import androidx.compose.foundation.layout.heightIn import androidx.compose.material.Text import androidx.compose.runtime.Composable import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.remember +import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.awt.ComposePanel import androidx.compose.ui.graphics.Color import androidx.compose.ui.layout.onGloballyPositioned import androidx.compose.ui.layout.positionInRoot +import androidx.compose.ui.text.style.TextAlign import androidx.compose.ui.unit.IntOffset import androidx.compose.ui.unit.dp import processing.app.Base @@ -34,64 +38,96 @@ fun themeColorOrFallback(key: String, fallback: AwtColor): Color { return awtToCompose(awt) } +data class TopBarItemData( + val label: String, + val onClick: (ComposePanel, Base, Int, Int) -> Unit +) + @Composable fun TopBar(panel: ComposePanel, base: Base) { val blueBarColor = themeColorOrFallback("toolbar.gradient.top", AwtColor(107, 160, 204)) val textColor = themeColorOrFallback("toolbar.rollover.color", AwtColor(0, 0, 0)) - val developAnchor = remember { mutableStateOf(IntOffset.Zero) } - val developHeight = remember { mutableStateOf(0) } + val items = listOf( + TopBarItemData("File") { p, b, x, y -> + showMenuPopup(p, b, x, y) + }, + TopBarItemData("Edit") { p, b, x, y -> + showMenuPopup(p, b, x, y) + }, + TopBarItemData("Sketch") { p, b, x, y -> + showMenuPopup(p, b, x, y) + }, + TopBarItemData("Debug") { p, b, x, y -> + showMenuPopup(p, b, x, y) + }, + TopBarItemData("Tools") { p, b, x, y -> + showMenuPopup(p, b, x, y) + }, + TopBarItemData("Help") { p, b, x, y -> + showMenuPopup(p, b, x, y) + }, + TopBarItemData("Develop") { p, b, x, y -> + showDevelopPopup(p, b, x, y) + } + ) Row( modifier = Modifier .fillMaxWidth() - .background(blueBarColor) - .padding(start = 8.dp) + .background(blueBarColor), + horizontalArrangement = Arrangement.SpaceEvenly, + verticalAlignment = Alignment.CenterVertically ) { - Box( - modifier = Modifier.onGloballyPositioned { coordinates -> - val position = coordinates.positionInRoot() - developAnchor.value = IntOffset( - position.x.toInt(), - position.y.toInt() - ) - developHeight.value = coordinates.size.height + items.forEach { item -> + TopBarItem( + label = item.label, + textColor = textColor, + modifier = Modifier.weight(1f) + ) { x, y -> + item.onClick(panel, base, x, y) } - - ) { - Text( - text = "Develop", - color = textColor, - modifier = Modifier - .padding(horizontal = 8.dp, vertical = 4.dp) - .clickable { - showDevelopPopup( - panel = panel, - base = base, - x = developAnchor.value.x, - y = developAnchor.value.y + developHeight.value - ) - } - ) - Text ( - text = "New Button", - color = textColor, - modifier = Modifier - - .padding(horizontal = 40.dp, vertical = 4.dp) - .clickable { - showDevelopPopup( - panel = panel, - base = base, - x = developAnchor.value.x, - y = developAnchor.value.y + developHeight.value - ) - } - ) } } } +@Composable +private fun TopBarItem( + label: String, + textColor: Color, + modifier: Modifier = Modifier, + onClick: (x: Int, y: Int) -> Unit +) { + val anchor = remember { mutableStateOf(IntOffset.Zero) } //stores the location of the top bar item + val height = remember { mutableStateOf(0) } //stores the height of the top bar item + + Box( + modifier = modifier + .heightIn(min = 32.dp) + .onGloballyPositioned { coordinates -> + val position = coordinates.positionInRoot() //top left corner of drop down + anchor.value = IntOffset(position.x.toInt(), position.y.toInt()) //x and y positioning + height.value = coordinates.size.height //height of the menu + } + .clickable { + onClick(anchor.value.x, anchor.value.y + height.value) + //anchor x lines up menu with top left edge of the clicked menu + //anchor y + height value moves the pop up below the tool bar item + } + .padding(vertical = 4.dp), + contentAlignment = Alignment.Center + ) { + Text( + text = label, + color = textColor, + textAlign = TextAlign.Center, + modifier = Modifier + .fillMaxWidth() + .padding(horizontal = 0.dp, vertical = 4.dp) + ) + } +} + private fun showDevelopPopup(panel: ComposePanel, base: Base, x: Int, y: Int) { val popup = JPopupMenu() @@ -103,9 +139,33 @@ private fun showDevelopPopup(panel: ComposePanel, base: Base, x: Int, y: Int) { } popup.add(updatesItem) - popup.show(panel, x, y) //this is ignoring the os differences + popup.show(panel, x, y) +} + +private fun showMenuPopup(panel: ComposePanel, base: Base, x: Int, y: Int) { + val popup = JPopupMenu() + + val fileNew = JMenuItem("New") + fileNew.addActionListener { + base.handleNew() + } + popup.add(fileNew); + + val fileOpen = JMenuItem("Open") + fileOpen.addActionListener { + base.handleOpenPrompt(); + } + + popup.add(fileOpen); + + + + + popup.show(panel, x, y) } + + fun mountTopBar(panel: ComposePanel, base: Base) { val awtBg = Theme.getColor("toolbar.gradient.top") ?: AwtColor(107, 160, 204) panel.background = awtBg @@ -113,4 +173,6 @@ fun mountTopBar(panel: ComposePanel, base: Base) { panel.setContent { TopBar(panel, base) } -} \ No newline at end of file +} + + diff --git a/app/src/processing/app/ui/Editor.java b/app/src/processing/app/ui/Editor.java index 3f96cac32..fe1268fcb 100644 --- a/app/src/processing/app/ui/Editor.java +++ b/app/src/processing/app/ui/Editor.java @@ -234,8 +234,9 @@ public void windowDeactivated(WindowEvent e) { toolbar = createToolbar(); - // upper.add(toolbar); upper.add(composeTopBar); + upper.add(toolbar); + header = createHeader(); upper.add(header); From 27e6ec72688252750d1bb06bdfc947b91a62c18e Mon Sep 17 00:00:00 2001 From: Elijah Baron Date: Wed, 22 Apr 2026 17:02:24 -0400 Subject: [PATCH 08/11] File drop down is completed. --- app/src/processing/app/ui/ComposeTopBar.kt | 119 ++++++++++++++++----- app/src/processing/app/ui/Editor.java | 2 +- 2 files changed, 91 insertions(+), 30 deletions(-) diff --git a/app/src/processing/app/ui/ComposeTopBar.kt b/app/src/processing/app/ui/ComposeTopBar.kt index 0d514883c..33b5e2d8e 100644 --- a/app/src/processing/app/ui/ComposeTopBar.kt +++ b/app/src/processing/app/ui/ComposeTopBar.kt @@ -3,12 +3,7 @@ package processing.app.ui 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.Row -import androidx.compose.foundation.layout.fillMaxWidth -import androidx.compose.foundation.layout.padding -import androidx.compose.foundation.layout.heightIn +import androidx.compose.foundation.layout.* import androidx.compose.material.Text import androidx.compose.runtime.Composable import androidx.compose.runtime.mutableStateOf @@ -23,11 +18,12 @@ import androidx.compose.ui.text.style.TextAlign import androidx.compose.ui.unit.IntOffset import androidx.compose.ui.unit.dp import processing.app.Base +import processing.app.Language import processing.app.Preferences import processing.app.UpdateCheck -import java.awt.Color as AwtColor import javax.swing.JMenuItem import javax.swing.JPopupMenu +import java.awt.Color as AwtColor fun awtToCompose(c: AwtColor): Color { return Color(c.red, c.green, c.blue, c.alpha) @@ -40,34 +36,34 @@ fun themeColorOrFallback(key: String, fallback: AwtColor): Color { data class TopBarItemData( val label: String, - val onClick: (ComposePanel, Base, Int, Int) -> Unit + val onClick: (ComposePanel, Base, Editor, Int, Int) -> Unit ) @Composable -fun TopBar(panel: ComposePanel, base: Base) { +fun TopBar(panel: ComposePanel, base: Base, editor: Editor) { val blueBarColor = themeColorOrFallback("toolbar.gradient.top", AwtColor(107, 160, 204)) val textColor = themeColorOrFallback("toolbar.rollover.color", AwtColor(0, 0, 0)) val items = listOf( - TopBarItemData("File") { p, b, x, y -> - showMenuPopup(p, b, x, y) + TopBarItemData("File") { p, b, e, x, y -> + showMenuPopup(p, b, e, x, y) }, - TopBarItemData("Edit") { p, b, x, y -> - showMenuPopup(p, b, x, y) + TopBarItemData("Edit") { p, b, e, x, y -> + //showMenuPopup(p, b, e, x, y) }, - TopBarItemData("Sketch") { p, b, x, y -> - showMenuPopup(p, b, x, y) + TopBarItemData("Sketch") { p, b, e, x, y -> + //showMenuPopup(p, b, e, x, y) }, - TopBarItemData("Debug") { p, b, x, y -> - showMenuPopup(p, b, x, y) + TopBarItemData("Debug") { p, b, e, x, y -> + //showMenuPopup(p, b, e, x, y) }, - TopBarItemData("Tools") { p, b, x, y -> - showMenuPopup(p, b, x, y) + TopBarItemData("Tools") { p, b, e, x, y -> + //showMenuPopup(p, b, e, x, y) }, - TopBarItemData("Help") { p, b, x, y -> - showMenuPopup(p, b, x, y) + TopBarItemData("Help") { p, b, e, x, y -> + //showMenuPopup(p, b, e, x, y) }, - TopBarItemData("Develop") { p, b, x, y -> + TopBarItemData("Develop") { p, b, e, x, y -> showDevelopPopup(p, b, x, y) } ) @@ -85,7 +81,7 @@ fun TopBar(panel: ComposePanel, base: Base) { textColor = textColor, modifier = Modifier.weight(1f) ) { x, y -> - item.onClick(panel, base, x, y) + item.onClick(panel, base, editor, x, y) } } } @@ -128,6 +124,10 @@ private fun TopBarItem( } } + + + +///pop up menus/// private fun showDevelopPopup(panel: ComposePanel, base: Base, x: Int, y: Int) { val popup = JPopupMenu() @@ -142,22 +142,78 @@ private fun showDevelopPopup(panel: ComposePanel, base: Base, x: Int, y: Int) { popup.show(panel, x, y) } -private fun showMenuPopup(panel: ComposePanel, base: Base, x: Int, y: Int) { +private fun showMenuPopup(panel: ComposePanel, base: Base, editor: Editor, x: Int, y: Int) { val popup = JPopupMenu() - val fileNew = JMenuItem("New") + val fileNew = Toolkit.newJMenuItem(Language.text("menu.file.new"), 'N'.code); fileNew.addActionListener { base.handleNew() } popup.add(fileNew); - val fileOpen = JMenuItem("Open") + val fileOpen = Toolkit.newJMenuItem(Language.text("menu.file.open"), 'O'.code); fileOpen.addActionListener { base.handleOpenPrompt(); } - popup.add(fileOpen); + val fileSketchbook = Toolkit.newJMenuItemShift(Language.text("menu.file.sketchbook"), 'K'.code); + fileSketchbook.addActionListener { + base.showSketchbookFrame() + } + popup.add(fileSketchbook); + + val fileExamples = Toolkit.newJMenuItemShift(Language.text("menu.file.examples"), 'O'.code); + fileExamples.addActionListener { + base.showExamplesFrame() + } + popup.add(fileExamples); + + val fileClose = Toolkit.newJMenuItem(Language.text("menu.file.close"), 'W'.code); + fileClose.addActionListener { + base.handleClose(editor, false); + } + popup.add(fileClose); + + val fileSave = Toolkit.newJMenuItem(Language.text("menu.file.save"), 'S'.code) + fileSave.addActionListener { + editor.handleSave(false); + } + popup.add(fileSave); + + val fileSaveAs = Toolkit.newJMenuItemShift(Language.text("menu.file.save_as"), 'S'.code); + fileSaveAs.addActionListener { + editor.handleSaveAs(); + } + popup.add(fileSaveAs); + + val filePageSetup = Toolkit.newJMenuItemShift(Language.text("menu.file.page_setup"), 'P'.code); + filePageSetup.addActionListener { + editor.handlePageSetup(); + } + popup.add(filePageSetup); + + val filePrint = Toolkit.newJMenuItem(Language.text("menu.file.print"), 'P'.code); + filePrint.addActionListener { + editor.handlePrint(); + } + popup.add(filePrint); + + + // UNDER MAC OS ONLY SECTION /// - will have to deal with this. + val filePreferences = Toolkit.newJMenuItem(Language.text("menu.file.preferences"), ','.code); + filePreferences.addActionListener { + base.handlePrefs() + } + popup.add(filePreferences); + + val fileQuit = Toolkit.newJMenuItem(Language.text("menu.file.quit"), 'Q'.code); + fileQuit.addActionListener { + base.handleQuit() + } + popup.add(fileQuit); + + //^^^ UNDER MAC OS ONLY SECTION ^^^///// @@ -166,12 +222,17 @@ private fun showMenuPopup(panel: ComposePanel, base: Base, x: Int, y: Int) { -fun mountTopBar(panel: ComposePanel, base: Base) { + +///^^^ pop up menus ^^^//// + + + +fun mountTopBar(panel: ComposePanel, base: Base, editor: Editor) { val awtBg = Theme.getColor("toolbar.gradient.top") ?: AwtColor(107, 160, 204) panel.background = awtBg panel.setContent { - TopBar(panel, base) + TopBar(panel, base, editor) } } diff --git a/app/src/processing/app/ui/Editor.java b/app/src/processing/app/ui/Editor.java index fe1268fcb..2f07b2a54 100644 --- a/app/src/processing/app/ui/Editor.java +++ b/app/src/processing/app/ui/Editor.java @@ -229,7 +229,7 @@ public void windowDeactivated(WindowEvent e) { rebuildModePopup(); ComposePanel composeTopBar = new ComposePanel(); - ComposeTopBarBridge.mountTopBar(composeTopBar, base); + ComposeTopBarBridge.mountTopBar(composeTopBar, base, this); From 3fb3f3f6abf5f70a1b9bfb456296a137c356f1ba Mon Sep 17 00:00:00 2001 From: Elijah Baron Date: Wed, 22 Apr 2026 20:10:37 -0400 Subject: [PATCH 09/11] Passing the torch, so done with this --- app/src/processing/app/ui/ComposeTopBar.kt | 216 ++++++++++++--------- app/src/processing/app/ui/Editor.java | 13 +- 2 files changed, 135 insertions(+), 94 deletions(-) diff --git a/app/src/processing/app/ui/ComposeTopBar.kt b/app/src/processing/app/ui/ComposeTopBar.kt index 33b5e2d8e..b18d3ebc0 100644 --- a/app/src/processing/app/ui/ComposeTopBar.kt +++ b/app/src/processing/app/ui/ComposeTopBar.kt @@ -18,12 +18,14 @@ import androidx.compose.ui.text.style.TextAlign import androidx.compose.ui.unit.IntOffset import androidx.compose.ui.unit.dp import processing.app.Base -import processing.app.Language -import processing.app.Preferences -import processing.app.UpdateCheck -import javax.swing.JMenuItem -import javax.swing.JPopupMenu import java.awt.Color as AwtColor +import processing.app.Platform +import java.awt.event.ActionEvent +import javax.swing.AbstractAction +import javax.swing.JComponent +import javax.swing.JMenu +import javax.swing.KeyStroke +import javax.swing.event.MenuEvent fun awtToCompose(c: AwtColor): Color { return Color(c.red, c.green, c.blue, c.alpha) @@ -45,14 +47,14 @@ fun TopBar(panel: ComposePanel, base: Base, editor: Editor) { val textColor = themeColorOrFallback("toolbar.rollover.color", AwtColor(0, 0, 0)) val items = listOf( - TopBarItemData("File") { p, b, e, x, y -> - showMenuPopup(p, b, e, x, y) + TopBarItemData("File") { p, _, e, x, y -> + showFilePopup(p, e, x, y) }, - TopBarItemData("Edit") { p, b, e, x, y -> - //showMenuPopup(p, b, e, x, y) + TopBarItemData("Edit") { p, _, e, x, y -> + showEditPopup(p, e, x, y) }, - TopBarItemData("Sketch") { p, b, e, x, y -> - //showMenuPopup(p, b, e, x, y) + TopBarItemData("Sketch") { p, _, e, x, y -> + showSketchPopup(p, e, x, y) }, TopBarItemData("Debug") { p, b, e, x, y -> //showMenuPopup(p, b, e, x, y) @@ -63,8 +65,8 @@ fun TopBar(panel: ComposePanel, base: Base, editor: Editor) { TopBarItemData("Help") { p, b, e, x, y -> //showMenuPopup(p, b, e, x, y) }, - TopBarItemData("Develop") { p, b, e, x, y -> - showDevelopPopup(p, b, x, y) + TopBarItemData("Develop") { p, _, e, x, y -> + showDevelopPopup(p, e, x, y) } ) @@ -128,112 +130,148 @@ private fun TopBarItem( ///pop up menus/// -private fun showDevelopPopup(panel: ComposePanel, base: Base, x: Int, y: Int) { - val popup = JPopupMenu() - - val updatesItem = JMenuItem("Check for Updates") - updatesItem.addActionListener { - Preferences.unset("update.last") - Preferences.setInteger("update.beta_welcome", 0) - UpdateCheck(base) - } - popup.add(updatesItem) - popup.show(panel, x, y) +private fun showFilePopup(panel: ComposePanel, editor: Editor, x: Int, y: Int) { + val menu = editor.buildFileMenu() + showPopupFromMenu(panel, menu, x, y) } -private fun showMenuPopup(panel: ComposePanel, base: Base, editor: Editor, x: Int, y: Int) { - val popup = JPopupMenu() - - val fileNew = Toolkit.newJMenuItem(Language.text("menu.file.new"), 'N'.code); - fileNew.addActionListener { - base.handleNew() - } - popup.add(fileNew); - - val fileOpen = Toolkit.newJMenuItem(Language.text("menu.file.open"), 'O'.code); - fileOpen.addActionListener { - base.handleOpenPrompt(); - } - popup.add(fileOpen); - - val fileSketchbook = Toolkit.newJMenuItemShift(Language.text("menu.file.sketchbook"), 'K'.code); - fileSketchbook.addActionListener { - base.showSketchbookFrame() - } - popup.add(fileSketchbook); - - val fileExamples = Toolkit.newJMenuItemShift(Language.text("menu.file.examples"), 'O'.code); - fileExamples.addActionListener { - base.showExamplesFrame() - } - popup.add(fileExamples); - - val fileClose = Toolkit.newJMenuItem(Language.text("menu.file.close"), 'W'.code); - fileClose.addActionListener { - base.handleClose(editor, false); - } - popup.add(fileClose); - val fileSave = Toolkit.newJMenuItem(Language.text("menu.file.save"), 'S'.code) - fileSave.addActionListener { - editor.handleSave(false); - } - popup.add(fileSave); +private fun showEditPopup(panel: ComposePanel, editor: Editor, x: Int, y: Int) { + val method = editor.javaClass.superclass.getDeclaredMethod("buildEditMenu") + method.isAccessible = true + val menu = method.invoke(editor) as JMenu + showPopupFromMenu(panel, menu, x, y) +} - val fileSaveAs = Toolkit.newJMenuItemShift(Language.text("menu.file.save_as"), 'S'.code); - fileSaveAs.addActionListener { - editor.handleSaveAs(); - } - popup.add(fileSaveAs); +private fun showSketchPopup(panel: ComposePanel, editor: Editor, x: Int, y: Int) { + val menu = editor.buildSketchMenu() + showPopupFromMenu(panel, menu, x, y) +} - val filePageSetup = Toolkit.newJMenuItemShift(Language.text("menu.file.page_setup"), 'P'.code); - filePageSetup.addActionListener { - editor.handlePageSetup(); - } - popup.add(filePageSetup); +private fun showDevelopPopup(panel: ComposePanel, editor: Editor, x: Int, y: Int) { + editor.buildDevelopMenu() - val filePrint = Toolkit.newJMenuItem(Language.text("menu.file.print"), 'P'.code); - filePrint.addActionListener { - editor.handlePrint(); - } - popup.add(filePrint); + val field = editor.javaClass.superclass.getDeclaredField("developMenu") + field.isAccessible = true + val menu = field.get(editor) as JMenu + showPopupFromMenu(panel, menu, x, y) +} - // UNDER MAC OS ONLY SECTION /// - will have to deal with this. - val filePreferences = Toolkit.newJMenuItem(Language.text("menu.file.preferences"), ','.code); - filePreferences.addActionListener { - base.handlePrefs() - } - popup.add(filePreferences); +private fun showPopupFromMenu(panel: ComposePanel, menu: JMenu, x: Int, y: Int) { + val popup = menu.popupMenu - val fileQuit = Toolkit.newJMenuItem(Language.text("menu.file.quit"), 'Q'.code); - fileQuit.addActionListener { - base.handleQuit() + fun refreshTopBar() { + javax.swing.SwingUtilities.invokeLater { + panel.revalidate() + panel.repaint() + } } - popup.add(fileQuit); - //^^^ UNDER MAC OS ONLY SECTION ^^^///// + popup.addPopupMenuListener(object : javax.swing.event.PopupMenuListener { + override fun popupMenuWillBecomeVisible(e: javax.swing.event.PopupMenuEvent?) = Unit // nothing needed right before the popup becomes visible + override fun popupMenuWillBecomeInvisible(e: javax.swing.event.PopupMenuEvent?) { // called when the popup closes normally + refreshTopBar() //redraw top bar + } + override fun popupMenuCanceled(e: javax.swing.event.PopupMenuEvent?) { // called when the popup is canceled, like clicking away + refreshTopBar() //redrawing... + } + }) + val event = MenuEvent(menu) + menu.menuListeners.forEach { it.menuSelected(event) } popup.show(panel, x, y) } +///^^^ pop up menus ^^^//// -///^^^ pop up menus ^^^//// - +//keyboard shortcuts do not work right now unless the dropdown is opened, this did not fix that. +//but it still has potential to be reworked. + +//private fun bindShortcuts(editor: Editor, base: Base) { +// val root = editor.rootPane +// +// val input = root.getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW) +// val actions = root.actionMap +// +// fun bind(name: String, key: KeyStroke?, action: () -> Unit) { +// if (key == null) return +// input.put(key, name) +// actions.put(name, object : AbstractAction() { +// override fun actionPerformed(e: ActionEvent?) { +// action() +// } +// }) +// } +// +// bind("new", Toolkit.getKeyStrokeExt("menu.file.new")) { +// base.handleNew() +// } +// +// bind("open", Toolkit.getKeyStrokeExt("menu.file.open")) { +// base.handleOpenPrompt() +// } +// +// bind("close", Toolkit.getKeyStrokeExt("menu.file.close")) { +// base.handleClose(editor, false) +// } +// +// bind("save", Toolkit.getKeyStrokeExt("menu.file.save")) { +// editor.handleSave(false) +// } +// +// bind("saveAs", Toolkit.getKeyStrokeExt("menu.file.save_as")) { +// editor.handleSaveAs() +// } +// +// bind("print", Toolkit.getKeyStrokeExt("menu.file.print")) { +// editor.handlePrint() +// } +// +// bind("pageSetup", Toolkit.getKeyStrokeExt("menu.file.page_setup")) { +// editor.handlePageSetup() +// } +// +// if (!Platform.isMacOS()) { +// bind("prefs", Toolkit.getKeyStrokeExt("menu.file.preferences")) { +// base.handlePrefs() +// } +// +// bind("quit", Toolkit.getKeyStrokeExt("menu.file.quit")) { +// base.handleQuit() +// } +// } +//} fun mountTopBar(panel: ComposePanel, base: Base, editor: Editor) { val awtBg = Theme.getColor("toolbar.gradient.top") ?: AwtColor(107, 160, 204) panel.background = awtBg +// bindShortcuts(editor, base) + panel.setContent { TopBar(panel, base, editor) } } + +//Hi, so... +//line 1050 in editor.java, is the tool menu, so inside your function call editor.getToolMenu() to access the drop down stuff there +//without manually re-entering everything! +//the class is public so you should get away with copying and pasting the showSketchPopup and replace the names and what +//its calling obvi + +//then line 1085 in editor.java, is the Help menu. This should be built the same way as showSketchPopup as well! +//good luck! if you happen to feel up to it Debug is the last one, but I have no idea where that is. + + + + + diff --git a/app/src/processing/app/ui/Editor.java b/app/src/processing/app/ui/Editor.java index 2f07b2a54..fd2c33cde 100644 --- a/app/src/processing/app/ui/Editor.java +++ b/app/src/processing/app/ui/Editor.java @@ -668,14 +668,17 @@ public void updateTheme() { // . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . + //I FOUND MY FUNCTION IN HERE TO CALL **** + protected void buildMenuBar() { JMenuBar menubar = new JMenuBar(); - fileMenu = buildFileMenu(); + fileMenu = buildFileMenu(); //here is the file menu call menubar.add(fileMenu); - menubar.add(buildEditMenu()); - menubar.add(buildSketchMenu()); + menubar.add(buildEditMenu()); //here is the edit menu call + menubar.add(buildSketchMenu()); //here is the sketch menu call // For 3.0a4 move mode menu to the left of the Tool menu + JMenu modeMenu = buildModeMenu(); if (modeMenu != null) { menubar.add(modeMenu); @@ -1046,7 +1049,7 @@ public void sketchChanged() { } public JMenu getToolMenu() { return toolsMenu; - } + } //TOOL MENU CODE!!!!!1 /** @@ -1079,7 +1082,7 @@ public JMenu buildModeMenu() { } - abstract public JMenu buildHelpMenu(); + abstract public JMenu buildHelpMenu(); //HELP MENU CODE!!!! public void buildDevelopMenu(){ developMenu = new JMenu(Language.text("menu.develop")); From 44d1161233fcbfbc4f4b9c7447dfd137c44c59aa Mon Sep 17 00:00:00 2001 From: smarasca5 Date: Fri, 24 Apr 2026 12:49:22 -0400 Subject: [PATCH 10/11] tools and help dropdown --- app/src/processing/app/ui/ComposeTopBar.kt | 14 +++++++++++-- app/src/processing/app/ui/Editor.java | 23 +++++++++++++++++++++- 2 files changed, 34 insertions(+), 3 deletions(-) diff --git a/app/src/processing/app/ui/ComposeTopBar.kt b/app/src/processing/app/ui/ComposeTopBar.kt index b18d3ebc0..ac3520383 100644 --- a/app/src/processing/app/ui/ComposeTopBar.kt +++ b/app/src/processing/app/ui/ComposeTopBar.kt @@ -60,10 +60,10 @@ fun TopBar(panel: ComposePanel, base: Base, editor: Editor) { //showMenuPopup(p, b, e, x, y) }, TopBarItemData("Tools") { p, b, e, x, y -> - //showMenuPopup(p, b, e, x, y) + showMenuPopup(p, b, e, x, y) }, TopBarItemData("Help") { p, b, e, x, y -> - //showMenuPopup(p, b, e, x, y) + showMenuPopup(p, b, e, x, y) }, TopBarItemData("Develop") { p, _, e, x, y -> showDevelopPopup(p, e, x, y) @@ -149,6 +149,16 @@ private fun showSketchPopup(panel: ComposePanel, editor: Editor, x: Int, y: Int) showPopupFromMenu(panel, menu, x, y) } +private fun showToolsPopup(panel: ComposePanel, editor: Editor, x: Int, y: Int) { + val menu = editor.buildToolsMenu() + showPopupFromMenu(panel, menu, x, y) +} + +private fun showHelpPopup(panel: ComposePanel, editor: Editor, x: Int, y: Int) { + val menu = editor.buildHelpMenu() + showPopupFromMenu(panel, menu, x, y) +} + private fun showDevelopPopup(panel: ComposePanel, editor: Editor, x: Int, y: Int) { editor.buildDevelopMenu() diff --git a/app/src/processing/app/ui/Editor.java b/app/src/processing/app/ui/Editor.java index fd2c33cde..d1d77f44b 100644 --- a/app/src/processing/app/ui/Editor.java +++ b/app/src/processing/app/ui/Editor.java @@ -1081,8 +1081,29 @@ public JMenu buildModeMenu() { return null; } + public void buildToolsMenu() { + toolsMenu = new JMenu(Language.text("menu.tools")); + + var updateTrigger = new JMenuItem(Language.text("menu.tools.check_for_updates")); + updateTrigger.addActionListener(e -> { + Preferences.unset("update.last"); + Preferences.setInteger("update.beta_welcome", 0); + new UpdateCheck(base); + }); + toolsMenu.add(updateTrigger); + } - abstract public JMenu buildHelpMenu(); //HELP MENU CODE!!!! + public void buildHelpMenu(){ + JMenu helpMenu = new JMenu(Language.text("menu.develop")); + + var updateTrigger = new JMenuItem(Language.text("menu.help.check_for_updates")); + updateTrigger.addActionListener(e -> { + Preferences.unset("update.last"); + Preferences.setInteger("update.beta_welcome", 0); + new UpdateCheck(base); + }); + helpMenu.add(updateTrigger); + } //HELP MENU CODE!!!! public void buildDevelopMenu(){ developMenu = new JMenu(Language.text("menu.develop")); From 6f668b2294ccb666424d1afd247d729d0b611894 Mon Sep 17 00:00:00 2001 From: smarasca5 Date: Mon, 27 Apr 2026 14:22:51 -0400 Subject: [PATCH 11/11] tools and help kt works --- --force-with-leas | 0 --force-with-lease | 0 app/src/processing/app/ui/ComposeTopBar.kt | 8 ++--- app/src/processing/app/ui/Editor.java | 37 ++++------------------ 4 files changed, 10 insertions(+), 35 deletions(-) delete mode 100644 --force-with-leas delete mode 100644 --force-with-lease diff --git a/--force-with-leas b/--force-with-leas deleted file mode 100644 index e69de29bb..000000000 diff --git a/--force-with-lease b/--force-with-lease deleted file mode 100644 index e69de29bb..000000000 diff --git a/app/src/processing/app/ui/ComposeTopBar.kt b/app/src/processing/app/ui/ComposeTopBar.kt index ac3520383..cfae232bb 100644 --- a/app/src/processing/app/ui/ComposeTopBar.kt +++ b/app/src/processing/app/ui/ComposeTopBar.kt @@ -60,10 +60,10 @@ fun TopBar(panel: ComposePanel, base: Base, editor: Editor) { //showMenuPopup(p, b, e, x, y) }, TopBarItemData("Tools") { p, b, e, x, y -> - showMenuPopup(p, b, e, x, y) + showToolsPopup(p, e,x,y ) }, - TopBarItemData("Help") { p, b, e, x, y -> - showMenuPopup(p, b, e, x, y) + TopBarItemData("Help") { p, _, e, x, y -> + showHelpPopup(p, e, x, y) }, TopBarItemData("Develop") { p, _, e, x, y -> showDevelopPopup(p, e, x, y) @@ -150,7 +150,7 @@ private fun showSketchPopup(panel: ComposePanel, editor: Editor, x: Int, y: Int) } private fun showToolsPopup(panel: ComposePanel, editor: Editor, x: Int, y: Int) { - val menu = editor.buildToolsMenu() + val menu = editor.getToolMenu() showPopupFromMenu(panel, menu, x, y) } diff --git a/app/src/processing/app/ui/Editor.java b/app/src/processing/app/ui/Editor.java index d1d77f44b..b0420213a 100644 --- a/app/src/processing/app/ui/Editor.java +++ b/app/src/processing/app/ui/Editor.java @@ -20,7 +20,7 @@ along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ -// comment comment hi hi hi + package processing.app.ui; import com.formdev.flatlaf.util.SystemInfo; @@ -664,12 +664,6 @@ public void updateTheme() { repaint(); // for good measure } - - // . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . - - - //I FOUND MY FUNCTION IN HERE TO CALL **** - protected void buildMenuBar() { JMenuBar menubar = new JMenuBar(); fileMenu = buildFileMenu(); //here is the file menu call @@ -1049,7 +1043,7 @@ public void sketchChanged() { } public JMenu getToolMenu() { return toolsMenu; - } //TOOL MENU CODE!!!!!1 + } /** @@ -1081,30 +1075,11 @@ public JMenu buildModeMenu() { return null; } - public void buildToolsMenu() { - toolsMenu = new JMenu(Language.text("menu.tools")); - var updateTrigger = new JMenuItem(Language.text("menu.tools.check_for_updates")); - updateTrigger.addActionListener(e -> { - Preferences.unset("update.last"); - Preferences.setInteger("update.beta_welcome", 0); - new UpdateCheck(base); - }); - toolsMenu.add(updateTrigger); + public JMenu buildHelpMenu(){ + return null; } - public void buildHelpMenu(){ - JMenu helpMenu = new JMenu(Language.text("menu.develop")); - - var updateTrigger = new JMenuItem(Language.text("menu.help.check_for_updates")); - updateTrigger.addActionListener(e -> { - Preferences.unset("update.last"); - Preferences.setInteger("update.beta_welcome", 0); - new UpdateCheck(base); - }); - helpMenu.add(updateTrigger); - } //HELP MENU CODE!!!! - public void buildDevelopMenu(){ developMenu = new JMenu(Language.text("menu.develop")); @@ -2040,7 +2015,7 @@ public void handleIndentOutdent(boolean indent) { sketch.setModified(true); } - + /** * Moves the selected lines up or down in the text editor. * @@ -2890,7 +2865,7 @@ public List findProblems(int line) { int stopOffset = p.getStopOffset(); int pEndOffset = lineOffset + (stopOffset == -1 ? 0 : stopOffset); int pEndLine = textarea.getLineOfOffset(pEndOffset); - + return line >= pStartLine && line <= pEndLine; }) .collect(Collectors.toList());