Mercurial > dwindows
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) |