]> uap-core.de Git - rssreader.git/commitdiff
add ConfigWindow
authorOlaf Wintermann <olaf.wintermann@gmail.com>
Wed, 10 Sep 2025 16:42:41 +0000 (18:42 +0200)
committerOlaf Wintermann <olaf.wintermann@gmail.com>
Wed, 10 Sep 2025 16:42:41 +0000 (18:42 +0200)
rss-application/src/main/kotlin/de/unixwork/rssreader/App.kt
rss-application/src/main/kotlin/de/unixwork/rssreader/ConfigWindow.kt [new file with mode: 0644]
rss-application/src/main/kotlin/de/unixwork/rssreader/Settings.kt
ui-kotlin/src/main/kotlin/de/unixwork/ui/kotlin/Window.kt

index 2e26df61fd112a5d86e226b11484558ed38f3e8e..d831cd01d82b60f9eb77ea7780e71d3a604f1d4b 100644 (file)
@@ -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 (file)
index 0000000..9e47fc6
--- /dev/null
@@ -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
index 96565994c34bc586a916fa82bba86c235e5fc6da..4f2061d3ad961e302e8477f42e3e38d81960b57d 100644 (file)
@@ -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
index aeae125610aa03ec932242fd4c9be67e22f5b5c5..c99ca610e6ce5a96b6b5467da6fe22d9741deae8 100644 (file)
@@ -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)