[vcs-log] allow to not reset other filters when one filter is set

GitOrigin-RevId: bb6f5bae41275234a7add6e756c50da1a27a3f4c
This commit is contained in:
Julia Beliaeva
2024-03-22 17:31:01 +00:00
committed by intellij-monorepo-bot
parent dbfaecfaef
commit 5f4f444f69
2 changed files with 15 additions and 4 deletions
@@ -52,8 +52,8 @@ class FileFilterModel(val roots: Set<VirtualFile>, uiProperties: MainVcsLogUiPro
}
}
var rootFilter by filterProperty(VcsLogFilterCollection.ROOT_FILTER)
var structureFilter by filterProperty(VcsLogFilterCollection.STRUCTURE_FILTER)
var rootFilter by filterProperty(VcsLogFilterCollection.ROOT_FILTER, exclusive = true)
var structureFilter by filterProperty(VcsLogFilterCollection.STRUCTURE_FILTER, exclusive = true)
companion object {
private const val DIR: @NonNls String = "dir:"
@@ -6,6 +6,7 @@ import com.intellij.vcs.log.VcsLogFilterCollection
import com.intellij.vcs.log.impl.MainVcsLogUiProperties
import com.intellij.vcs.log.statistics.VcsLogUsageTriggerCollector
import com.intellij.vcs.log.visible.filters.VcsLogFilterObject
import com.intellij.vcs.log.visible.filters.with
import com.intellij.vcs.log.visible.filters.without
import kotlin.properties.ReadWriteProperty
import kotlin.reflect.KProperty
@@ -126,11 +127,21 @@ abstract class FilterModel<Filter> internal constructor(@JvmField protected val
protected abstract fun getFilterValues(filter: VcsLogFilter): List<String>?
protected abstract fun createFilter(key: VcsLogFilterCollection.FilterKey<*>, values: List<String>): VcsLogFilter?
protected fun <F : VcsLogFilter?> filterProperty(key: VcsLogFilterCollection.FilterKey<F>): ReadWriteProperty<MultipleFilterModel, F?> {
protected fun <F : VcsLogFilter?> filterProperty(key: VcsLogFilterCollection.FilterKey<F>, exclusive: Boolean = false): ReadWriteProperty<MultipleFilterModel, F?> {
return object : ReadWriteProperty<MultipleFilterModel, F?> {
override fun getValue(thisRef: MultipleFilterModel, property: KProperty<*>): F? = thisRef.getFilter(key)
override fun setValue(thisRef: MultipleFilterModel, property: KProperty<*>, value: F?) {
setFilter(if (value == null) getFilter()?.without(key) else VcsLogFilterObject.collection(value))
val oldFilter = getFilter()
val newFilter = if (value == null) {
oldFilter?.without(key)
}
else if (exclusive || oldFilter == null) {
VcsLogFilterObject.collection(value)
}
else {
oldFilter.with(value)
}
setFilter(newFilter)
}
}
}