diff android/DWindows.kt @ 2777:7d7eac751f7d

Android: Connect the C API to the Kotlin tree implementation.
author bsmith@81767d24-ef19-dc11-ae90-00e081727c95
date Wed, 22 Jun 2022 07:13:32 +0000
parents 858155527b05
children c28602443759
line wrap: on
line diff
--- a/android/DWindows.kt	Tue Jun 21 07:55:53 2022 +0000
+++ b/android/DWindows.kt	Wed Jun 22 07:13:32 2022 +0000
@@ -69,17 +69,15 @@
 
 
 // Tree View section
-class DWTreeItem(value: Any, layoutId: Int) {
-    private var value: Any
+class DWTreeItem(title: String, icon: Drawable?, data: Long, parent: DWTreeItem?) {
+    private var title: String
     private var parent: DWTreeItem?
     private val children: LinkedList<DWTreeItem>
-    private val layoutId: Int
     private var level: Int
     private var isExpanded: Boolean
     private var isSelected: Boolean
-    var itemData: Long = 0
-    var itemIcon: Drawable? = null
-    var parentItem: DWTreeItem? = null
+    private var data: Long = 0
+    private var icon: Drawable? = null
 
     fun addChild(child: DWTreeItem) {
         child.setParent(this)
@@ -88,30 +86,42 @@
         updateNodeChildrenDepth(child)
     }
 
-    fun setValue(value: Any) {
-        this.value = value
-    }
-
-    fun getValue(): Any {
-        return value
+    fun setTitle(title: String) {
+        this.title = title
+    }
+
+    fun getTitle(): String {
+        return title
+    }
+
+    fun setIcon(icon: Drawable?) {
+        this.icon = icon
+    }
+
+    fun getIcon(): Drawable? {
+        return icon
+    }
+
+    fun setData(data: Long) {
+        this.data = data
+    }
+
+    fun getData(): Long {
+        return data
+    }
+
+    fun getParent(): DWTreeItem? {
+        return parent
     }
 
     fun setParent(parent: DWTreeItem?) {
         this.parent = parent
     }
 
-    fun getParent(): DWTreeItem? {
-        return parent
-    }
-
     fun getChildren(): LinkedList<DWTreeItem> {
         return children
     }
 
-    fun getLayoutId(): Int {
-        return layoutId
-    }
-
     fun setLevel(level: Int) {
         this.level = level
     }
@@ -144,15 +154,17 @@
     }
 
     init {
-        this.value = value
-        parent = null
+        this.title = title
+        this.icon = icon
+        this.data = data
+        this.parent = parent
         children = LinkedList()
-        this.layoutId = layoutId
         level = 0
         isExpanded = false
         isSelected = false
     }
 }
+
 class DWTreeItemManager {
     // Collection to save the current tree nodes
     private val rootsNodes: LinkedList<DWTreeItem>
@@ -457,7 +469,8 @@
     }
 
     override fun getItemViewType(position: Int): Int {
-        return treeItemManager.get(position).getLayoutId()
+        // TODO: Fix this with no layoutId
+        return 0
     }
 
     override fun getItemCount(): Int {
@@ -530,6 +543,11 @@
         notifyItemRangeInserted(0, treeItems.size)
     }
 
+    // Clear all the items from the tree
+    fun clear() {
+        treeItemManager.clearItems()
+    }
+
     // Register a callback to be invoked when this DWTreeItem is clicked
     // @param listener The callback that will run
     fun setTreeItemClickListener(listener: OnTreeItemClickListener?) {
@@ -4530,19 +4548,98 @@
         waitOnUiThread {
             var treeViewAdapter = tree.adapter as DWTreeViewAdapter
 
-            treeitem = DWTreeItem(title, 0)
+            treeitem = DWTreeItem(title, icon, itemdata, parent)
             if(parent == null) {
                 tree.roots.add(treeitem!!)
             } else {
                 parent.addChild(treeitem!!)
-                treeitem!!.parentItem = parent
-            }
-            treeitem!!.itemData = itemdata
-            treeitem!!.itemIcon = icon
+            }
         }
         return treeitem
     }
 
+    fun treeGetTitle(tree: DWTree, item: DWTreeItem): String?
+    {
+        var retval: String? = null
+
+        waitOnUiThread {
+            retval = item.getTitle()
+        }
+        return retval
+    }
+
+    fun treeGetParent(tree: DWTree, item: DWTreeItem): DWTreeItem?
+    {
+        var retval: DWTreeItem? = null
+
+        waitOnUiThread {
+            retval = item.getParent()
+        }
+        return retval
+    }
+
+    fun treeItemChange(tree: DWTree, item: DWTreeItem, title: String?, icon: Drawable?)
+    {
+        waitOnUiThread {
+            if(title != null) {
+                item.setTitle(title)
+            }
+            if(icon != null) {
+                item.setIcon(icon)
+            }
+        }
+    }
+
+    fun treeItemSetData(tree: DWTree, item: DWTreeItem, data: Long)
+    {
+        waitOnUiThread {
+            item.setData(data)
+        }
+    }
+
+    fun treeItemGetData(tree: DWTree, item: DWTreeItem): Long
+    {
+        var retval: Long = 0
+
+        waitOnUiThread {
+            retval = item.getData()
+        }
+        return retval
+    }
+
+    fun treeItemSelect(tree: DWTree, item: DWTreeItem)
+    {
+        waitOnUiThread {
+            item.setSelected(true)
+        }
+    }
+
+    fun treeItemExpand(tree: DWTree, item: DWTreeItem, state: Int)
+    {
+        waitOnUiThread {
+            val treeViewAdapter = tree.adapter as DWTreeViewAdapter
+
+            if(state != 0) {
+                treeViewAdapter.expandNode(item)
+            } else {
+                treeViewAdapter.collapseNode(item)
+            }
+        }
+    }
+
+    fun treeItemDelete(tree: DWTree, item: DWTreeItem)
+    {
+        // TODO: Implement this
+    }
+
+    fun treeClear(tree: DWTree)
+    {
+        waitOnUiThread {
+            val treeViewAdapter = tree.adapter as DWTreeViewAdapter
+            treeViewAdapter.clear()
+        }
+    }
+
     fun containerNew(cid: Int, multi: Int): ListView?
     {
         var cont: ListView? = null