comparison android/DWindows.kt @ 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 7d7eac751f7d
children dff8fb5ddadd
comparison
equal deleted inserted replaced
2780:9a3024fe719c 2781:c28602443759
163 isExpanded = false 163 isExpanded = false
164 isSelected = false 164 isSelected = false
165 } 165 }
166 } 166 }
167 167
168
169 class DWTreeItemView : LinearLayout {
170 var expandCollapseView: ImageView = ImageView(context)
171 var iconView: ImageView = ImageView(context)
172 var textView: TextView = TextView(context)
173
174 fun setup(context: Context?) {
175 var params = LinearLayout.LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.WRAP_CONTENT)
176 this.orientation = LinearLayout.HORIZONTAL
177 params.gravity = Gravity.CENTER
178 expandCollapseView.layoutParams = params
179 expandCollapseView.id = View.generateViewId()
180 this.addView(expandCollapseView)
181 iconView.layoutParams = params
182 iconView.id = View.generateViewId()
183 this.addView(iconView)
184 params = LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.WRAP_CONTENT)
185 params.gravity = Gravity.CENTER
186 textView.layoutParams = params
187 textView.id = View.generateViewId()
188 this.addView(textView)
189 }
190
191 constructor(context: Context?) : super(context) {
192 setup(context)
193 }
194 constructor(context: Context?, attrs: AttributeSet?) : super(context, attrs) {
195 setup(context)
196 }
197 constructor(context: Context?, attrs: AttributeSet?, defStyle: Int) : super(context, attrs, defStyle) {
198 setup(context)
199 }
200 }
201
168 class DWTreeItemManager { 202 class DWTreeItemManager {
169 // Collection to save the current tree nodes 203 // Collection to save the current tree nodes
170 private val rootsNodes: LinkedList<DWTreeItem> 204 private val rootsNodes: LinkedList<DWTreeItem>
171 205
172 // Get DWTreeItem from the current nodes by index 206 // Get DWTreeItem from the current nodes by index
352 386
353 // Bind method that provide padding and bind DWTreeItem to the view list item 387 // Bind method that provide padding and bind DWTreeItem to the view list item
354 // @param node the current DWTreeItem 388 // @param node the current DWTreeItem
355 fun bindTreeItem(node: DWTreeItem) { 389 fun bindTreeItem(node: DWTreeItem) {
356 val padding: Int = node.getLevel() * nodePadding 390 val padding: Int = node.getLevel() * nodePadding
391 val treeItemView = itemView as DWTreeItemView
392
357 itemView.setPadding( 393 itemView.setPadding(
358 padding, 394 padding,
359 itemView.paddingTop, 395 itemView.paddingTop,
360 itemView.paddingRight, 396 itemView.paddingRight,
361 itemView.paddingBottom 397 itemView.paddingBottom
362 ) 398 )
399 treeItemView.textView.text = node.getTitle()
400 treeItemView.iconView.setImageDrawable(node.getIcon())
401 if(node.getChildren().size == 0) {
402 treeItemView.expandCollapseView.setImageDrawable(null)
403 } else {
404 if(node.isExpanded()) {
405 treeItemView.expandCollapseView.setImageResource(R.drawable.star_on)
406 } else {
407 treeItemView.expandCollapseView.setImageResource(R.drawable.star_off)
408 }
409 }
363 } 410 }
364 } 411 }
365 412
366 interface DWTreeViewHolderFactory { 413 interface DWTreeViewHolderFactory {
367 // Provide a TreeViewHolder class depend on the current view 414 // Provide a TreeViewHolder class depend on the current view
426 treeViewHolderFactory = factory 473 treeViewHolderFactory = factory
427 treeItemManager = manager 474 treeItemManager = manager
428 } 475 }
429 476
430 override fun onCreateViewHolder(parent: ViewGroup, layoutId: Int): DWTreeViewHolder { 477 override fun onCreateViewHolder(parent: ViewGroup, layoutId: Int): DWTreeViewHolder {
431 val view = LayoutInflater.from(parent.context).inflate(layoutId, parent, false) 478 val view = DWTreeItemView(parent.context)
432 return treeViewHolderFactory.getTreeViewHolder(view, layoutId) 479 return treeViewHolderFactory.getTreeViewHolder(view, layoutId)
433 } 480 }
434 481
435 override fun onBindViewHolder(holder: DWTreeViewHolder, position: Int) { 482 override fun onBindViewHolder(holder: DWTreeViewHolder, position: Int) {
436 val currentNode: DWTreeItem = treeItemManager.get(position) 483 val currentNode: DWTreeItem = treeItemManager.get(position)