import kotlinx.coroutines.GlobalScope
import kotlinx.coroutines.IO
import kotlinx.coroutines.launch
+import java.awt.Desktop
+import java.net.URI
+import java.net.URISyntaxException
class FeedList(window: MainWindow) : Document() {
val window = window
val feedName = string("feedname")
val author = string("author")
val linkstr = string("link")
+ val linkstr2 = string("link2")
val link = UiLinkData(linkstr)
+ val link2 = UiLinkData(linkstr2)
val category = string("category")
val webview = webview("webview")
val tabview = integer("tabview")
val starred = integer("starred")
+ val preview = integer("preview")
// Feed that is currently shown
var currentFeed: FeedCollection? = null
window.window.ui.unsetState(MainWindow.ITEM_HAS_AUTHOR)
}
link.set(item.link, item.link)
+ link2.set("Browser", item.link)
category.setString(item.category ?: "")
if(!item.category.isNullOrEmpty()) {
category.setString(item.category)
items.update(items.selectedIndex)
}
}
+
+ fun togglePreview() {
+ currentItem?.let { item ->
+ if(preview.intValue() == 0) {
+ // TODO: codedup with selectItem, can we fix this?
+ var mimeType: String? = null
+ var content: String? = null
+ if(item.contentHtml != null) {
+ content = item.contentHtml
+ mimeType = "text/html"
+ } else if(item.contentText != null) {
+ content = item.contentText
+ mimeType = "text/plain"
+ } else if(item.description != null) {
+ content = item.description
+ mimeType = "text/html"
+ } else {
+ content = ""
+ mimeType = "text/plain"
+ }
+ webview.loadContent(item.link, content, mimeType, "utf-8")
+ } else {
+ webview.loadUrl(item.link)
+ }
+ }
+ }
}
\ No newline at end of file
package de.unixwork.rssreader
import de.unixwork.ui.ColumnType
+import de.unixwork.ui.LinkButtonType
import de.unixwork.ui.SubListItem
import de.unixwork.ui.TabViewType
import de.unixwork.ui.TableModel
w1.setVisibilityStates(ITEM_HAS_AUTHOR)
w2.setVisibilityStates(ITEM_HAS_AUTHOR)
}
- row {
- rlabel("Link:", hfill = true)
- linkbutton(varname = "link", styleClass = "ui-nopadding");
- }
row {
val w1 = rlabel("Category: ", hfill = true)
val w2 = llabel(varname = "category")
w1.setVisibilityStates(ITEM_HAS_CATEGORY)
w2.setVisibilityStates(ITEM_HAS_CATEGORY)
}
+ row {
+ rlabel("Link:", hfill = true)
+ linkbutton(varname = "link", styleClass = "ui-nopadding");
+ }
+ row {
+ hbox(spacing = 4, colspan = 2) {
+ linkbutton(label = "Browser", varname = "link2", type = LinkButtonType.BUTTON)
+ togglebutton (label = "Preview", tooltip = "Open article in the internal webview", varname = "preview") {
+ feedList.togglePreview()
+ }
+ }
+ }
row {
webview(varname = "webview", hfill = true, vfill = true, hexpand = true, vexpand = true, colspan = 2)
}
if(onChange != null) {
- // TODO
+ EventWrapper event = new EventWrapper(obj, onChange);
+
+ // set toolkit args
+ ui.toggle_args_set_onchange.invoke(args, event.getCallback());
+ ui.toggle_args_set_onchangedata.invoke(args, event.getUserData());
}
return args;
}
}
- public int intValue() {
+ public long longValue() {
ToolkitFuncs ui = ToolkitFuncs.getInstance();
try {
- Integer value = (Integer) ui.int_get.invoke(valuePtr);
- return value.intValue();
+ return (long)ui.int_get.invoke(valuePtr);
} catch (Throwable e) {
throw new RuntimeException(e);
}
}
- public void setIntValue(int value) {
+ public void setLongValue(long value) {
ToolkitFuncs ui = ToolkitFuncs.getInstance();
try (Arena arena = Arena.ofConfined()) {
ui.int_set.invoke(valuePtr, value);
throw new RuntimeException(e);
}
}
+
+ public int intValue() {
+ return (int) longValue();
+ }
+
+ public void setIntValue(int value) {
+ setLongValue(value);
+ }
}