import de.unixwork.ui.kotlin.toolbarItem
import de.unixwork.ui.kotlin.addToolbarDefault
import de.unixwork.ui.kotlin.toolbarAppMenu
+import de.unixwork.ui.kotlin.toolbarToggleItem
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.GlobalScope
import kotlinx.coroutines.IO
}
}
+ fun setBookmark(starred: Boolean) {
+ window?.feedList?.currentItem?.let {
+ GlobalScope.launch(Dispatchers.IO) {
+ Database.setBookmark(it, starred)
+ }
+ }
+ }
+
fun initToolbar() {
toolbarItem(name = "reloadFeed", icon = "view-refresh") { event ->
syncCurrent()
}
+ toolbarToggleItem(name = "starred", icon = "starred", varname = "starred") { event ->
+ setBookmark(event.intValue == 1)
+ }
+
toolbarAppMenu {
menuItem(label = "Update All") {
syncAll()
}
addToolbarDefault("reloadFeed", ToolbarPosition.LEFT)
+ addToolbarDefault("starred", ToolbarPosition.RIGHTPANEL_LEFT)
}
override fun startup() {
}
}
}
+
+ public fun setBookmark(item: Item, bookmark: Boolean) {
+ dataSource.connection.use { conn ->
+ conn.prepareStatement("""
+ update items set is_bookmarked = ? where item_id = ?
+ """.trimIndent()).use { stmt ->
+ stmt.setBoolean(1, bookmark)
+ stmt.setInt(2, item.id)
+ stmt.execute()
+ item.isBookmark = bookmark
+ }
+ }
+ }
}
val category = string("category")
val webview = webview("webview")
val tabview = integer("tabview")
+ val starred = integer("starred")
// Feed that is currently shown
var currentFeed: FeedCollection? = null
+ var currentItem: Item? = null
// Currently requested feed
var showFeed: FeedCollection? = null
}
fun selectItem(item: Item) {
+ currentItem = item
+
feedName.setString(item.feedName)
if(!item.author.isNullOrEmpty()) {
author.setString(item.author)
mimeType = "text/plain"
}
+ if(item.isBookmark) {
+ starred.setIntValue(1)
+ } else {
+ starred.setIntValue(0)
+ }
+
webview.loadContent(item.link, content, mimeType, "utf-8")
tabview.setIntValue(1)
}
}
+ public static void toggleItem(String name, String label, String icon, String varname, EventHandler onChange) {
+ MenuFuncs ui = MenuFuncs.getInstance();
+ ArgFuncs a = ArgFuncs.getInstance();
+ Toolkit toolkit = Toolkit.getInstance();
+ Arena arena = toolkit.getStaticArena();
+ try {
+ MemorySegment args = (MemorySegment) a.toolbar_toggleitem_args_new.invoke();
+ if(label != null) {
+ MemorySegment cstr = arena.allocateFrom(label);
+ a.toolbar_toggleitem_args_set_label.invoke(args, cstr);
+ }
+ if(icon != null) {
+ MemorySegment cstr = arena.allocateFrom(icon);
+ a.toolbar_toggleitem_args_set_icon.invoke(args, cstr);
+ }
+ if(varname != null) {
+ MemorySegment cstr = arena.allocateFrom(varname);
+ a.toolbar_toggleitem_args_set_varname.invoke(args, cstr);
+ }
+ if(onChange != null) {
+ EventWrapper event = new EventWrapper(onChange);
+
+ // set toolkit args
+ a.toolbar_toggleitem_args_set_onchange.invoke(args, event.getCallback());
+ a.toolbar_toggleitem_args_set_onchangedata.invoke(args, event.getUserData());
+ }
+ MemorySegment itemName = arena.allocateFrom(name);
+ ui.toolbar_toggleitem_create.invoke(itemName, args);
+ a.toolbar_toggleitem_args_free.invoke(args);
+ } catch (Throwable e) {
+ throw new RuntimeException(e);
+ }
+ }
+
public static void menu(String name, String label, String icon, Menu menu) {
MenuFuncs ui = MenuFuncs.getInstance();
ArgFuncs a = ArgFuncs.getInstance();
}
}
+fun toolbarToggleItem(name: String, label: String? = null, icon: String? = null, stockId: String? = null, varname: String? = null, onChange: EventHandler? = null) {
+ // TODO: stockId
+ Toolbar.toggleItem(name, label, icon, varname, onChange)
+}
+
fun toolbarMenu(name: String?, label: String? = null, icon: String? = null, stockId: String? = null, block: MenuBuilder.() -> Unit) {
// TODO: stockId
Toolbar.menu(name, label, icon, menuBuilder(block))