]> uap-core.de Git - rssreader.git/commitdiff
use icon ids instead of paltform specific icon names
authorOlaf Wintermann <olaf.wintermann@gmail.com>
Fri, 19 Jun 2026 15:42:15 +0000 (17:42 +0200)
committerOlaf Wintermann <olaf.wintermann@gmail.com>
Fri, 19 Jun 2026 15:42:15 +0000 (17:42 +0200)
rss-application/src/main/kotlin/de/unixwork/rssreader/App.kt
rss-application/src/main/kotlin/de/unixwork/rssreader/MainWindow.kt
ui-java/src/main/java/de/unixwork/ui/IconName.java [new file with mode: 0644]
ui-java/src/main/java/de/unixwork/ui/ToolkitFuncs.java

index de021aaf0e097c3fce75ac321f5250007af0d43b..2a1c7b7af8cc89952e5eee66f7a49e5e5275bf5d 100644 (file)
@@ -1,6 +1,7 @@
 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
@@ -144,17 +145,17 @@ object App : Application {
     }
 
     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()
         }
 
index 7badc9ed74bc7c01a87b17a37920e9d256e8acd1..8aaa807c87c3a8dfad47e54a6625d80188c1956b 100644 (file)
@@ -2,6 +2,7 @@ package de.unixwork.rssreader
 
 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
@@ -241,10 +242,10 @@ class MainWindow() {
                         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()
                         }
                     }
diff --git a/ui-java/src/main/java/de/unixwork/ui/IconName.java b/ui-java/src/main/java/de/unixwork/ui/IconName.java
new file mode 100644 (file)
index 0000000..b150f95
--- /dev/null
@@ -0,0 +1,94 @@
+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);
+        }
+    }
+}
index 8a07f23d3b4c79f53b323c6585e87ad8efa07013..e764840393250d807fa7f71400dfc12a6a45e140 100644 (file)
@@ -119,6 +119,8 @@ public class ToolkitFuncs {
     public MethodHandle set_widget_groups2;
     public MethodHandle set_widget_visibility_states;
 
+    public MethodHandle icon_name;
+
     public MethodHandle set_state;
     public MethodHandle unset_state;
 
@@ -140,6 +142,7 @@ public class ToolkitFuncs {
     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);
@@ -271,6 +274,8 @@ public class ToolkitFuncs {
         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();
 
@@ -395,6 +400,8 @@ public class ToolkitFuncs {
         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);