Skip to content

Commit

Permalink
feat(demo): better menu layout
Browse files Browse the repository at this point in the history
  • Loading branch information
dingyi222666 committed Aug 23, 2023
1 parent 4cc7dab commit cb43675
Show file tree
Hide file tree
Showing 4 changed files with 106 additions and 37 deletions.
42 changes: 36 additions & 6 deletions app/src/main/kotlin/com/dingyi/treeview/MainActivity.kt
Original file line number Diff line number Diff line change
Expand Up @@ -61,7 +61,7 @@ class MainActivity : AppCompatActivity() {
this.tree = tree
binder = ViewBinder()
nodeEventListener = binder as ViewBinder
selectionMode = TreeView.SelectionMode.MULTIPLE_WITH_CHILDREN
selectionMode = TreeView.SelectionMode.NONE
}

lifecycleScope.launch {
Expand All @@ -78,6 +78,25 @@ class MainActivity : AppCompatActivity() {
return true
}

override fun onPrepareOptionsMenu(menu: Menu): Boolean {
menu.findItem(R.id.drag_node).apply {
isChecked = binding.treeview.supportDragging
isEnabled =
binding.treeview.selectionMode != TreeView.SelectionMode.MULTIPLE_WITH_CHILDREN
}
menu.findItem(R.id.select_mode).apply {
isChecked =
binding.treeview.selectionMode == TreeView.SelectionMode.MULTIPLE_WITH_CHILDREN
isEnabled = !binding.treeview.supportDragging
}
menu.findItem(R.id.slow_mode).apply {
isChecked = isSlow
}
menu.findItem(R.id.selected_group).apply {
isEnabled = binding.treeview.selectionMode == TreeView.SelectionMode.MULTIPLE_WITH_CHILDREN
}
return super.onPrepareOptionsMenu(menu)
}

override fun onOptionsItemSelected(item: MenuItem): Boolean {
lifecycleScope.launch {
Expand All @@ -103,6 +122,19 @@ class MainActivity : AppCompatActivity() {
item.isChecked = binding.treeview.supportDragging
}

R.id.select_mode -> {
binding.treeview.selectionMode =
if (binding.treeview.selectionMode == TreeView.SelectionMode.MULTIPLE_WITH_CHILDREN) {
deselectAllNode()
TreeView.SelectionMode.NONE
} else {
TreeView.SelectionMode.MULTIPLE_WITH_CHILDREN
}

item.isChecked =
binding.treeview.selectionMode == TreeView.SelectionMode.MULTIPLE_WITH_CHILDREN
}

R.id.slow_mode -> {
isSlow = !isSlow
item.isChecked = isSlow
Expand All @@ -120,7 +152,7 @@ class MainActivity : AppCompatActivity() {
selectionMode = TreeView.SelectionMode.MULTIPLE_WITH_CHILDREN
selectNode(binding.treeview.tree.rootNode, true)
expandAll()
selectionMode = TreeView.SelectionMode.MULTIPLE
selectionMode = TreeView.SelectionMode.MULTIPLE_WITH_CHILDREN
}
}
}
Expand All @@ -129,9 +161,7 @@ class MainActivity : AppCompatActivity() {
lifecycleScope.launch {
binding.treeview.apply {
// select node and it's children
selectionMode = TreeView.SelectionMode.MULTIPLE_WITH_CHILDREN
selectNode(binding.treeview.tree.rootNode, false)
selectionMode = TreeView.SelectionMode.MULTIPLE
selectionMode = TreeView.SelectionMode.NONE
}
}
}
Expand Down Expand Up @@ -219,7 +249,7 @@ class MainActivity : AppCompatActivity() {
tree.generator = object : TreeNodeGenerator<DataSource<String>> {
override suspend fun fetchChildData(targetNode: TreeNode<DataSource<String>>): Set<DataSource<String>> {
if (isSlow) {
delay(5000L)
delay(2000L)
}
return oldGenerator.fetchChildData(targetNode)
}
Expand Down
85 changes: 56 additions & 29 deletions app/src/main/res/menu/main.xml
Original file line number Diff line number Diff line change
@@ -1,49 +1,76 @@
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto">

<item
android:id="@+id/expand_all"
android:orderInCategory="200"
android:title="Expand All"
app:showAsAction="never" />
<item
android:id="@+id/collapse_all"
android:orderInCategory="200"
android:title="Collapse All"
app:showAsAction="never" />
<item
android:id="@+id/expand_level"
android:orderInCategory="200"
android:title="Expand Level 2"
app:showAsAction="never" />
app:showAsAction="never"
android:title="Node Action">
<menu>
<group>
<item
android:id="@+id/expand_all"
android:orderInCategory="200"
android:title="Expand All"
app:showAsAction="never" />
<item
android:id="@+id/collapse_all"
android:orderInCategory="200"
android:title="Collapse All"
app:showAsAction="never" />
<item
android:id="@+id/expand_level"
android:orderInCategory="200"
android:title="Expand Level 2"
app:showAsAction="never" />
<item
android:id="@+id/collapse_level"
android:orderInCategory="200"
android:title="Collapse Level 2"
app:showAsAction="never" />
</group>
</menu>
</item>
<item
android:id="@+id/collapse_level"
android:orderInCategory="200"
android:title="Collapse Level 2"
app:showAsAction="never" />
android:id="@+id/selected_group"
app:showAsAction="never"
android:title="Select Action">
<menu>
<group>
<item
android:id="@+id/select_all"
android:orderInCategory="200"
android:title="Select All"
app:showAsAction="never" />
<item
android:id="@+id/deselect_all"
android:orderInCategory="200"
android:title="Deselect All"
app:showAsAction="never" />
</group>
</menu>
</item>

<item
android:id="@+id/select_all"
android:id="@+id/select_mode"
android:checkable="true"
android:checked="false"
android:orderInCategory="200"
android:title="Select All"
android:title="Selection Mode"
app:showAsAction="never" />
<item
android:id="@+id/deselect_all"
android:id="@+id/drag_node"
android:checkable="true"
android:checked="false"
android:orderInCategory="200"
android:title="Deselect All"
android:title="Drag Node"
app:showAsAction="never" />
<item
android:id="@+id/slow_mode"
android:orderInCategory="200"
android:checkable="true"
android:checked="false"
android:title="Slow Mode"
app:showAsAction="never" />
<item
android:id="@+id/drag_node"
android:orderInCategory="200"
android:checkable="true"
android:checked="false"
android:title="Drag Node"
android:title="Slow Mode"
app:showAsAction="never" />
<item
android:id="@+id/print_selected"
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -87,7 +87,7 @@ class TreeView<T : Any>(context: Context, attrs: AttributeSet?, defStyleAttr: In
if (old == new) {
return@observable
}
defaultRefresh()
selectionRefresh(old, new)
}

/**
Expand Down Expand Up @@ -457,6 +457,18 @@ class TreeView<T : Any>(context: Context, attrs: AttributeSet?, defStyleAttr: In
}
}

private fun selectionRefresh(old: SelectionMode, new: SelectionMode) {
if (old == new) {
return
}
coroutineScope.launch {
if (old !== SelectionMode.NONE) {
tree.selectAllNode(false)
}
refresh(true)
}
}

override fun onLongClick(node: TreeNode<T>, holder: ViewHolder): Boolean {
val clickResult = nodeEventListener.onLongClick(node, holder)
coroutineScope.launch(Dispatchers.Main) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -245,7 +245,7 @@ class DataSourceNodeGenerator<T : Any>(
val targetDataSource = if (targetData is MultipleDataSourceSupport<*>) {
targetData as MultipleDataSourceSupport<T>
} else {
(targetDataParent as MultipleDataSourceSupport<T>)
targetDataParent as MultipleDataSourceSupport<T>
}

val srcDataParentDataSource =
Expand Down

0 comments on commit cb43675

Please sign in to comment.