package de.unixwork.rssreader
import de.unixwork.ui.Application
+import de.unixwork.ui.IconName
import de.unixwork.ui.ToolbarPosition
import de.unixwork.ui.Toolkit
import de.unixwork.ui.kotlin.ToolkitDispatcher
}
fun initToolbar() {
- toolbarItem(name = "reloadFeed", icon = "view-refresh", tooltip = "Refresh current feed") { event ->
+ toolbarItem(name = "reloadFeed", icon = IconName.REFRESH.toString(), tooltip = "Refresh current feed") { event ->
syncCurrent()
}
- toolbarItem(name = "markCurrentFeed", icon = "checkbox-checked", tooltip = "Mark items in this feed as read") { event ->
+ toolbarItem(name = "markCurrentFeed", icon = IconName.CHECKBOX.toString(), tooltip = "Mark items in this feed as read") { event ->
markCurrentFeedAsRead()
}
- toolbarToggleItem(name = "starred", icon = "starred", varname = "starred", tooltip = "Star the current item") { event ->
+ toolbarToggleItem(name = "starred", icon = IconName.STAR.toString(), varname = "starred", tooltip = "Star the current item") { event ->
setBookmark(event.intValue == 1)
}
- toolbarToggleItem(name = "preview", icon = "view-reveal", varname = "browser", tooltip = "Open the current item uri in the internal webview") { event ->
+ toolbarToggleItem(name = "preview", icon = IconName.VIEW_REVEAL.toString(), varname = "browser", tooltip = "Open the current item uri in the internal webview") { event ->
window?.feedList?.updateWebView()
}
import de.unixwork.ui.UiObject
import de.unixwork.ui.ColumnType
+import de.unixwork.ui.IconName
import de.unixwork.ui.LabelStyle
import de.unixwork.ui.SubListItem
import de.unixwork.ui.TableModel
item
}
hbox(margin = 4, spacing = 4) {
- button(icon = "list-add", states = intArrayOf(HAS_FOLDERS)) {
+ button(icon = IconName.ADD.toString(), states = intArrayOf(HAS_FOLDERS)) {
createFeedDialog()
}
- button(icon = "folder-new") {
+ button(icon = IconName.NEW_FOLDER.toString()) {
createCategoryDialog()
}
}
--- /dev/null
+package de.unixwork.ui;
+
+import java.lang.foreign.MemorySegment;
+
+public enum IconName {
+ HOME(0),
+ NEW_WINDOW(1),
+ NEW_TAB(2),
+ NEW_FOLDER(3),
+ NEW_DOCUMENT(4),
+ NEW_APPOINTMENT(5),
+ NEW_CHAT_MESSAGE(6),
+ NEW_CONTACT(7),
+ NEW_MAIL(8),
+ ADD_BOOKMARK(9),
+ ADD_IMAGE(10),
+ ADD_LINK(11),
+ ADD_TEXT(12),
+ ADD(13),
+ REMOVE(14),
+ REFRESH(15),
+ UPLOAD(16),
+ SAVE_LOCAL(17),
+ EDIT_COPY(18),
+ EDIT_CUT(19),
+ EDIT_DELETE(20),
+ EDIT_PASTE(21),
+ UNDO(22),
+ REDO(23),
+ SIDEBAR_LEFT(24),
+ SIDEBAR_RIGHT(25),
+ GO_BACK(26),
+ GO_FORWARD(27),
+ GO_UP(28),
+ GO_DOWN(29),
+ VIEW_LIST(30),
+ VIEW_GRID(31),
+ VIEW_DUAL(32),
+ VIEW_FULLSCREEN(33),
+ VIEW_RESTORE(34),
+ TEXT_BOLD(35),
+ TEXT_ITALIC(36),
+ TEXT_UNDERLINE(37),
+ LIST_BULLET(38),
+ LIST_ORDERED(39),
+ LIST_CHECK(40),
+ CHECKBOX(41),
+ STAR(42),
+ VIEW_REVEAL(43),
+ VIEW_CONCEAL(44),
+ SETTINGS(45),
+ MEDIA_PLAY(46),
+ MEDIA_STOP(47),
+ MEDIA_PAUSE(48),
+ MEDIA_SEEK_BACKWARD(49),
+ MEDIA_SEEK_FORWARD(50),
+ MEDIA_SKIP_BACKWARD(51),
+ MEDIA_SKIP_FORWARD(52),
+ CALL_START(53),
+ CALL_STOP(54),
+ CALL_INCOMING(55),
+ CALL_OUTGOING(56),
+ MICROPHONE_ON(57),
+ MICROPHONE_OFF(58),
+ LOCKED(59),
+ UNLOCKED(60),
+ SECURE(61),
+ INSECURE(62);
+
+ private final int value;
+
+ IconName(int value) {
+ this.value = value;
+ }
+
+ public int value() {
+ return value;
+ }
+
+ public String toString() {
+ var ui = ToolkitFuncs.getInstance();
+ try {
+ MemorySegment cstr = (MemorySegment)ui.icon_name.invoke(value);
+ if(cstr.address() == 0) {
+ return "";
+ }
+ long length = (long)ui.strlen.invoke(cstr);
+ cstr = cstr.reinterpret(length+1);
+ return cstr.getString(0);
+ } catch (Throwable e) {
+ throw new RuntimeException(e);
+ }
+ }
+}
public MethodHandle set_widget_groups2;
public MethodHandle set_widget_visibility_states;
+ public MethodHandle icon_name;
+
public MethodHandle set_state;
public MethodHandle unset_state;
private ToolkitFuncs(Linker linker, SymbolLookup lib) {
FunctionDescriptor sigm = FunctionDescriptor.of(ValueLayout.ADDRESS);
FunctionDescriptor sigm_m = FunctionDescriptor.of(ValueLayout.ADDRESS, ValueLayout.ADDRESS);
+ FunctionDescriptor sigm_i = FunctionDescriptor.of(ValueLayout.ADDRESS, ValueLayout.JAVA_INT);
FunctionDescriptor sigi_m = FunctionDescriptor.of(ValueLayout.JAVA_INT, ValueLayout.ADDRESS);
FunctionDescriptor sigl_m = FunctionDescriptor.of(ValueLayout.JAVA_LONG, ValueLayout.ADDRESS);
FunctionDescriptor sigm_mm = FunctionDescriptor.of(ValueLayout.ADDRESS, ValueLayout.ADDRESS, ValueLayout.ADDRESS);
MemorySegment ui_widget_set_states2_addr = lib.find("ui_widget_set_states2").orElseThrow();
MemorySegment ui_widget_set_visibility_states_addr = lib.find("ui_widget_set_visibility_states").orElseThrow();
+ MemorySegment ui_icon_name_addr = lib.find("ui_icon_name").orElseThrow();
+
MemorySegment set_state_addr = lib.find("ui_set_state").orElseThrow();
MemorySegment unset_state_addr = lib.find("ui_unset_state").orElseThrow();
set_widget_groups2 = linker.downcallHandle(ui_widget_set_states2_addr, sigv_mmmmi);
set_widget_visibility_states = linker.downcallHandle(ui_widget_set_visibility_states_addr, sigv_mmmi);
+ icon_name = linker.downcallHandle(ui_icon_name_addr, sigm_i);
+
set_state = linker.downcallHandle(set_state_addr, sigv_mi);
unset_state = linker.downcallHandle(unset_state_addr, sigv_mi);