From f812f0934456d8934e929968a022e62c37fb9f6b Mon Sep 17 00:00:00 2001 From: Olaf Wintermann Date: Wed, 10 Sep 2025 18:42:41 +0200 Subject: [PATCH] add ConfigWindow --- .../main/kotlin/de/unixwork/rssreader/App.kt | 19 ++++ .../de/unixwork/rssreader/ConfigWindow.kt | 96 +++++++++++++++++++ .../kotlin/de/unixwork/rssreader/Settings.kt | 3 + .../kotlin/de/unixwork/ui/kotlin/Window.kt | 6 +- 4 files changed, 121 insertions(+), 3 deletions(-) create mode 100644 rss-application/src/main/kotlin/de/unixwork/rssreader/ConfigWindow.kt diff --git a/rss-application/src/main/kotlin/de/unixwork/rssreader/App.kt b/rss-application/src/main/kotlin/de/unixwork/rssreader/App.kt index 2e26df6..d831cd0 100644 --- a/rss-application/src/main/kotlin/de/unixwork/rssreader/App.kt +++ b/rss-application/src/main/kotlin/de/unixwork/rssreader/App.kt @@ -1,21 +1,26 @@ package de.unixwork.rssreader import de.unixwork.ui.Application +import de.unixwork.ui.Container.grid +import de.unixwork.ui.Text.textfield import de.unixwork.ui.ToolbarPosition import de.unixwork.ui.Toolkit import de.unixwork.ui.kotlin.ToolkitDispatcher import de.unixwork.ui.kotlin.toolbarItem import de.unixwork.ui.kotlin.addToolbarDefault +import de.unixwork.ui.kotlin.toolbarAppMenu import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.GlobalScope import kotlinx.coroutines.IO import kotlinx.coroutines.delay import kotlinx.coroutines.launch +import org.h2.api.H2Type.row import java.io.IOException object App : Application { var window: MainWindow? = null var settings = Settings() + var configWindow: ConfigWindow? = null init { initToolbar() @@ -31,6 +36,20 @@ object App : Application { } } + toolbarAppMenu { + menuItem(label = "Update All") { + + } + separator() + menuItem(label = "Settings") { + if(configWindow == null) { + configWindow = ConfigWindow() + } + configWindow!!.show() + // TODO: cleanup configWindow after window closed + } + } + addToolbarDefault("reload", ToolbarPosition.LEFT) } diff --git a/rss-application/src/main/kotlin/de/unixwork/rssreader/ConfigWindow.kt b/rss-application/src/main/kotlin/de/unixwork/rssreader/ConfigWindow.kt new file mode 100644 index 0000000..9e47fc6 --- /dev/null +++ b/rss-application/src/main/kotlin/de/unixwork/rssreader/ConfigWindow.kt @@ -0,0 +1,96 @@ +package de.unixwork.rssreader + +import de.unixwork.ui.UiString +import de.unixwork.ui.kotlin.Toplevel +import de.unixwork.ui.kotlin.simpleWindow + +class ConfigWindow { + val window: Toplevel + + val dateFormat: UiString + val dateFormatToday: UiString + val defaultUpdateInterval: UiString + val minUpdateWaitTime: UiString + val autoUpdateStartDelay: UiString + + val message: UiString + + init { + window = simpleWindow("") + + dateFormat = window.ui.string() + dateFormatToday = window.ui.string() + defaultUpdateInterval = window.ui.string() + minUpdateWaitTime = window.ui.string() + autoUpdateStartDelay = window.ui.string() + + message = window.ui.string() + + window { + grid(margin = 12, rowspacing = 8, columnspacing = 8, defhfill = true, defvfill = true, fill = true) { + row { + rlabel("Date Format") + textfield(value = dateFormat, hexpand = true) + } + + row { + rlabel("Date Format Today") + textfield(value = dateFormatToday, hexpand = true) + } + + row { + rlabel("Default Update Interval") + textfield(value = defaultUpdateInterval) + } + + row { + rlabel("Minimum Update Wait Time") + textfield(value = minUpdateWaitTime) + } + + row { + rlabel("Auto Update Start Delay") + textfield(value = autoUpdateStartDelay) + } + } + grid(margin = 12, rowspacing = 12) { + row { + label(value = message, hexpand = true, hfill = true) + } + + row { + button("Save") { + try { + save() + window.close() + } catch (e: Exception) { + message.setString("Error: ${e.message}") + } + } + label(hexpand = true) + button("Cancel") { + window.close() + } + } + } + } + + dateFormat.setString(App.settings.dateFormat) + dateFormatToday.setString(App.settings.dateFormatToday) + defaultUpdateInterval.setString(App.settings.defaultRefreshInterval.toString()) + minUpdateWaitTime.setString(App.settings.minRefreshWaitTime.toString()) + autoUpdateStartDelay.setString(App.settings.autoRefreshStartDelay.toString()) + } + + fun save() { + App.settings.dateFormat = dateFormat.toString() + App.settings.dateFormatToday = dateFormatToday.toString() + App.settings.defaultRefreshInterval = defaultUpdateInterval.toString().toInt() + App.settings.minRefreshWaitTime = minUpdateWaitTime.toString().toInt() + App.settings.autoRefreshStartDelay = autoUpdateStartDelay.toString().toInt() + } + + fun show() { + window.show() + } +} \ No newline at end of file diff --git a/rss-application/src/main/kotlin/de/unixwork/rssreader/Settings.kt b/rss-application/src/main/kotlin/de/unixwork/rssreader/Settings.kt index 9656599..4f2061d 100644 --- a/rss-application/src/main/kotlin/de/unixwork/rssreader/Settings.kt +++ b/rss-application/src/main/kotlin/de/unixwork/rssreader/Settings.kt @@ -9,6 +9,7 @@ import java.util.Properties class Settings { var dateFormat = "yyyy-MM-dd HH:mm:ss" + var dateFormatToday = "HH:mm:ss" var autoRefreshStartDelay = 10 var defaultRefreshInterval = 3600 var minRefreshWaitTime = 60 @@ -23,6 +24,7 @@ class Settings { } dateFormat = properties.getProperty("DateFormat", dateFormat) + dateFormatToday = properties.getProperty("DateFormatToday", dateFormatToday) val autoRefreshStartDelay = properties.getProperty("AutoRefreshStartDelay") autoRefreshStartDelay?.let { try { @@ -56,6 +58,7 @@ class Settings { fun store(file: File = File(Toolkit.getConfigFilePath("rssreader.properties"))) { file.writeText(""" DateFormat = $dateFormat + DateFormatToday = $dateFormatToday AutoRefreshStartDelay = $autoRefreshStartDelay DefaultRefreshInterval = $defaultRefreshInterval MinRefreshWaitTime = $minRefreshWaitTime diff --git a/ui-kotlin/src/main/kotlin/de/unixwork/ui/kotlin/Window.kt b/ui-kotlin/src/main/kotlin/de/unixwork/ui/kotlin/Window.kt index aeae125..c99ca61 100644 --- a/ui-kotlin/src/main/kotlin/de/unixwork/ui/kotlin/Window.kt +++ b/ui-kotlin/src/main/kotlin/de/unixwork/ui/kotlin/Window.kt @@ -5,21 +5,21 @@ import de.unixwork.ui.DialogWindowBuilder import de.unixwork.ui.EventHandler import de.unixwork.ui.UiObject -fun window(title: String, ui: (Toplevel.() -> Unit)?): Toplevel { +fun window(title: String, ui: (Toplevel.() -> Unit)? = null): Toplevel { val obj = UiObject.createWindow(title) val toplevel = Toplevel(obj) ui?.invoke(toplevel) return toplevel } -fun simpleWindow(title: String, ui: (Toplevel.() -> Unit)?): Toplevel { +fun simpleWindow(title: String, ui: (Toplevel.() -> Unit)? = null): Toplevel { val obj = UiObject.createSimpleWindow(title) val toplevel = Toplevel(obj) ui?.invoke(toplevel) return toplevel } -fun sidebarWindow(title: String, ui: (Toplevel.() -> Unit)?): Toplevel { +fun sidebarWindow(title: String, ui: (Toplevel.() -> Unit)? = null): Toplevel { val obj = UiObject.createSidebarWindow(title) val toplevel = Toplevel(obj) ui?.invoke(toplevel) -- 2.47.3