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()
}
}
+ 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)
}
--- /dev/null
+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
class Settings {
var dateFormat = "yyyy-MM-dd HH:mm:ss"
+ var dateFormatToday = "HH:mm:ss"
var autoRefreshStartDelay = 10
var defaultRefreshInterval = 3600
var minRefreshWaitTime = 60
}
dateFormat = properties.getProperty("DateFormat", dateFormat)
+ dateFormatToday = properties.getProperty("DateFormatToday", dateFormatToday)
val autoRefreshStartDelay = properties.getProperty("AutoRefreshStartDelay")
autoRefreshStartDelay?.let {
try {
fun store(file: File = File(Toolkit.getConfigFilePath("rssreader.properties"))) {
file.writeText("""
DateFormat = $dateFormat
+ DateFormatToday = $dateFormatToday
AutoRefreshStartDelay = $autoRefreshStartDelay
DefaultRefreshInterval = $defaultRefreshInterval
MinRefreshWaitTime = $minRefreshWaitTime
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)