changeset 2781:c28602443759

Android: Add DWTreeItemView class based on LinearLayout. Create a DWTreeItemView instead of inflating a layout.
author bsmith@81767d24-ef19-dc11-ae90-00e081727c95
date Thu, 07 Jul 2022 00:47:25 +0000
parents 9a3024fe719c
children dff8fb5ddadd
files android/DWindows.kt
diffstat 1 files changed, 48 insertions(+), 1 deletions(-) [+]
line wrap: on
line diff
--- a/android/DWindows.kt	Tue Jun 28 09:33:38 2022 +0000
+++ b/android/DWindows.kt	Thu Jul 07 00:47:25 2022 +0000
@@ -165,6 +165,40 @@
     }
 }
 
+
+class DWTreeItemView : LinearLayout {
+    var expandCollapseView: ImageView = ImageView(context)
+    var iconView: ImageView = ImageView(context)
+    var textView: TextView = TextView(context)
+
+    fun setup(context: Context?) {
+        var params = LinearLayout.LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.WRAP_CONTENT)
+        this.orientation = LinearLayout.HORIZONTAL
+        params.gravity = Gravity.CENTER
+        expandCollapseView.layoutParams = params
+        expandCollapseView.id = View.generateViewId()
+        this.addView(expandCollapseView)
+        iconView.layoutParams = params
+        iconView.id = View.generateViewId()
+        this.addView(iconView)
+        params = LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.WRAP_CONTENT)
+        params.gravity = Gravity.CENTER
+        textView.layoutParams = params
+        textView.id = View.generateViewId()
+        this.addView(textView)
+    }
+
+    constructor(context: Context?) : super(context) {
+        setup(context)
+    }
+    constructor(context: Context?, attrs: AttributeSet?) : super(context, attrs) {
+        setup(context)
+    }
+    constructor(context: Context?, attrs: AttributeSet?, defStyle: Int) : super(context, attrs, defStyle) {
+        setup(context)
+    }
+}
+
 class DWTreeItemManager {
     // Collection to save the current tree nodes
     private val rootsNodes: LinkedList<DWTreeItem>
@@ -354,12 +388,25 @@
     // @param node the current DWTreeItem
     fun bindTreeItem(node: DWTreeItem) {
         val padding: Int = node.getLevel() * nodePadding
+        val treeItemView = itemView as DWTreeItemView
+
         itemView.setPadding(
             padding,
             itemView.paddingTop,
             itemView.paddingRight,
             itemView.paddingBottom
         )
+        treeItemView.textView.text = node.getTitle()
+        treeItemView.iconView.setImageDrawable(node.getIcon())
+        if(node.getChildren().size == 0) {
+            treeItemView.expandCollapseView.setImageDrawable(null)
+        } else {
+            if(node.isExpanded()) {
+                treeItemView.expandCollapseView.setImageResource(R.drawable.star_on)
+            } else {
+                treeItemView.expandCollapseView.setImageResource(R.drawable.star_off)
+            }
+        }
     }
 }
 
@@ -428,7 +475,7 @@
     }
 
     override fun onCreateViewHolder(parent: ViewGroup, layoutId: Int): DWTreeViewHolder {
-        val view = LayoutInflater.from(parent.context).inflate(layoutId, parent, false)
+        val view = DWTreeItemView(parent.context)
         return treeViewHolderFactory.getTreeViewHolder(view, layoutId)
     }