From 05c4ec9af29e90f21baf05646a7bdc28b8602a5b Mon Sep 17 00:00:00 2001 From: hstyi Date: Fri, 7 Feb 2025 09:22:01 +0800 Subject: [PATCH] feat: support for turning off beep (#155) --- src/main/kotlin/app/termora/Database.kt | 5 +++++ src/main/kotlin/app/termora/Icons.kt | 1 + .../kotlin/app/termora/SettingsOptionsPane.kt | 21 ++++++++++++++++++- .../kotlin/app/termora/TerminalFactory.kt | 5 +++++ src/main/resources/i18n/messages.properties | 1 + .../resources/i18n/messages_zh_CN.properties | 1 + .../resources/i18n/messages_zh_TW.properties | 1 + src/main/resources/icons/run.svg | 4 ++++ src/main/resources/icons/run_dark.svg | 4 ++++ 9 files changed, 42 insertions(+), 1 deletion(-) create mode 100644 src/main/resources/icons/run.svg create mode 100644 src/main/resources/icons/run_dark.svg diff --git a/src/main/kotlin/app/termora/Database.kt b/src/main/kotlin/app/termora/Database.kt index 89e434a..f96cea3 100644 --- a/src/main/kotlin/app/termora/Database.kt +++ b/src/main/kotlin/app/termora/Database.kt @@ -454,6 +454,11 @@ class Database private constructor(private val env: Environment) : Disposable { */ var debug by BooleanPropertyDelegate(false) + /** + * 蜂鸣声 + */ + var beep by BooleanPropertyDelegate(true) + /** * 选中复制 */ diff --git a/src/main/kotlin/app/termora/Icons.kt b/src/main/kotlin/app/termora/Icons.kt index dde49f2..d1cc91e 100644 --- a/src/main/kotlin/app/termora/Icons.kt +++ b/src/main/kotlin/app/termora/Icons.kt @@ -68,6 +68,7 @@ object Icons { val network by lazy { DynamicIcon("icons/network.svg", "icons/network_dark.svg") } val server by lazy { DynamicIcon("icons/server.svg", "icons/server_dark.svg") } val runAnything by lazy { DynamicIcon("icons/runAnything.svg", "icons/runAnything_dark.svg") } + val run by lazy { DynamicIcon("icons/run.svg", "icons/run_dark.svg") } val uiForm by lazy { DynamicIcon("icons/uiForm.svg", "icons/uiForm_dark.svg") } val cloud by lazy { DynamicIcon("icons/cloud.svg", "icons/cloud_dark.svg") } val externalLink by lazy { DynamicIcon("icons/externalLink.svg", "icons/externalLink_dark.svg") } diff --git a/src/main/kotlin/app/termora/SettingsOptionsPane.kt b/src/main/kotlin/app/termora/SettingsOptionsPane.kt index e821fe8..afb868e 100644 --- a/src/main/kotlin/app/termora/SettingsOptionsPane.kt +++ b/src/main/kotlin/app/termora/SettingsOptionsPane.kt @@ -22,6 +22,7 @@ import app.termora.terminal.CursorStyle import app.termora.terminal.DataKey import app.termora.terminal.panel.TerminalPanel import cash.z.ecc.android.bip39.Mnemonics +import com.formdev.flatlaf.FlatClientProperties import com.formdev.flatlaf.extras.FlatSVGIcon import com.formdev.flatlaf.extras.components.* import com.formdev.flatlaf.util.FontUtils @@ -43,6 +44,7 @@ import org.jdesktop.swingx.JXEditorPane import org.slf4j.LoggerFactory import java.awt.BorderLayout import java.awt.Component +import java.awt.Toolkit import java.awt.datatransfer.StringSelection import java.awt.event.ItemEvent import java.io.File @@ -298,6 +300,7 @@ class SettingsOptionsPane : OptionsPane() { private inner class TerminalOption : JPanel(BorderLayout()), Option { private val cursorStyleComboBox = FlatComboBox() private val debugComboBox = YesOrNoComboBox() + private val beepComboBox = YesOrNoComboBox() private val fontComboBox = FlatComboBox() private val shellComboBox = FlatComboBox() private val maxRowsTextField = IntSpinner(0, 0) @@ -355,6 +358,13 @@ class SettingsOptionsPane : OptionsPane() { } + beepComboBox.addItemListener { e -> + if (e.stateChange == ItemEvent.SELECTED) { + terminalSetting.beep = beepComboBox.selectedItem as Boolean + } + } + + shellComboBox.addItemListener { if (it.stateChange == ItemEvent.SELECTED) { terminalSetting.localShell = shellComboBox.selectedItem as String @@ -453,6 +463,7 @@ class SettingsOptionsPane : OptionsPane() { fontComboBox.selectedItem = terminalSetting.font debugComboBox.selectedItem = terminalSetting.debug + beepComboBox.selectedItem = terminalSetting.beep cursorStyleComboBox.selectedItem = terminalSetting.cursor selectCopyComboBox.selectedItem = terminalSetting.selectCopy } @@ -472,9 +483,14 @@ class SettingsOptionsPane : OptionsPane() { private fun getCenterComponent(): JComponent { val layout = FormLayout( "left:pref, $formMargin, default:grow, $formMargin, left:pref, $formMargin, pref, default:grow", - "pref, $formMargin, pref, $formMargin, pref, $formMargin, pref, $formMargin, pref, $formMargin, pref" + "pref, $formMargin, pref, $formMargin, pref, $formMargin, pref, $formMargin, pref, $formMargin, pref, $formMargin, pref" ) + val beepBtn = JButton(Icons.run) + beepBtn.isFocusable = false + beepBtn.putClientProperty(FlatClientProperties.BUTTON_TYPE, FlatClientProperties.BUTTON_TYPE_TOOLBAR_BUTTON) + beepBtn.addActionListener { Toolkit.getDefaultToolkit().beep() } + var rows = 1 val step = 2 val panel = FormBuilder.create().layout(layout) @@ -487,6 +503,9 @@ class SettingsOptionsPane : OptionsPane() { .add(maxRowsTextField).xy(3, rows).apply { rows += step } .add("${I18n.getString("termora.settings.terminal.debug")}:").xy(1, rows) .add(debugComboBox).xy(3, rows).apply { rows += step } + .add("${I18n.getString("termora.settings.terminal.beep")}:").xy(1, rows) + .add(beepComboBox).xy(3, rows) + .add(beepBtn).xy(5, rows).apply { rows += step } .add("${I18n.getString("termora.settings.terminal.select-copy")}:").xy(1, rows) .add(selectCopyComboBox).xy(3, rows).apply { rows += step } .add("${I18n.getString("termora.settings.terminal.cursor-style")}:").xy(1, rows) diff --git a/src/main/kotlin/app/termora/TerminalFactory.kt b/src/main/kotlin/app/termora/TerminalFactory.kt index 888cc39..fc955db 100644 --- a/src/main/kotlin/app/termora/TerminalFactory.kt +++ b/src/main/kotlin/app/termora/TerminalFactory.kt @@ -51,6 +51,11 @@ class TerminalFactory private constructor() : Disposable { return colorPalette } + override fun bell() { + if (config.beep) { + super.bell() + } + } @Suppress("UNCHECKED_CAST") override fun getData(key: DataKey): T { diff --git a/src/main/resources/i18n/messages.properties b/src/main/resources/i18n/messages.properties index 44dfbae..13bd480 100644 --- a/src/main/resources/i18n/messages.properties +++ b/src/main/resources/i18n/messages.properties @@ -61,6 +61,7 @@ termora.settings.terminal.font=Font termora.settings.terminal.size=Size termora.settings.terminal.max-rows=Max rows termora.settings.terminal.debug=Debug mode +termora.settings.terminal.beep=Beep termora.settings.terminal.select-copy=Select copy termora.settings.terminal.cursor-style=Cursor type termora.settings.terminal.local-shell=Local shell diff --git a/src/main/resources/i18n/messages_zh_CN.properties b/src/main/resources/i18n/messages_zh_CN.properties index 09d6b23..cb25899 100644 --- a/src/main/resources/i18n/messages_zh_CN.properties +++ b/src/main/resources/i18n/messages_zh_CN.properties @@ -65,6 +65,7 @@ termora.settings.terminal.font=字体 termora.settings.terminal.size=大小 termora.settings.terminal.max-rows=最大行数 termora.settings.terminal.debug=调试模式 +termora.settings.terminal.beep=蜂鸣声 termora.settings.terminal.select-copy=选中复制 termora.settings.terminal.cursor-style=光标样式 termora.settings.terminal.local-shell=本地终端 diff --git a/src/main/resources/i18n/messages_zh_TW.properties b/src/main/resources/i18n/messages_zh_TW.properties index a67de0c..6e9b4c4 100644 --- a/src/main/resources/i18n/messages_zh_TW.properties +++ b/src/main/resources/i18n/messages_zh_TW.properties @@ -70,6 +70,7 @@ termora.settings.terminal.font=字體 termora.settings.terminal.size=大小 termora.settings.terminal.max-rows=最大行數 termora.settings.terminal.debug=偵錯模式 +termora.settings.terminal.beep=蜂鳴聲 termora.settings.terminal.select-copy=選取複製 termora.settings.terminal.cursor-style=遊標風格 termora.settings.terminal.local-shell=本地端 diff --git a/src/main/resources/icons/run.svg b/src/main/resources/icons/run.svg new file mode 100644 index 0000000..dc1a756 --- /dev/null +++ b/src/main/resources/icons/run.svg @@ -0,0 +1,4 @@ + + + + diff --git a/src/main/resources/icons/run_dark.svg b/src/main/resources/icons/run_dark.svg new file mode 100644 index 0000000..d9eee73 --- /dev/null +++ b/src/main/resources/icons/run_dark.svg @@ -0,0 +1,4 @@ + + + +