select/set color/prefix improved
1.7.5 - feat: Select/set by color and by prefix now works on every displayed dopesheet layer (and react correctly to filters) - ui: exposed user prefs `Channel Group Color` prop in dopesheet > sidebar > View > Display panel
This commit is contained in:
@@ -3,6 +3,7 @@ import numpy as np
|
||||
import bmesh
|
||||
import mathutils
|
||||
from mathutils import Vector
|
||||
import math
|
||||
from math import sqrt
|
||||
from sys import platform
|
||||
import subprocess
|
||||
@@ -702,6 +703,11 @@ def detect_OS():
|
||||
print("Cannot detect OS, python 'sys.platform' give :", myOS)
|
||||
return None
|
||||
|
||||
def is_vector_close(a, b, rel_tol=1e-03):
|
||||
'''compare Vector or sequence of value
|
||||
by default tolerance is set on 1e-03 (0.001)'''
|
||||
return all([math.isclose(i, j, rel_tol=rel_tol) for i, j in zip(a,b)])
|
||||
|
||||
def convert_attr(Attr):
|
||||
'''Convert given value to a Json serializable format'''
|
||||
if isinstance(Attr, (mathutils.Vector,mathutils.Color)):
|
||||
@@ -741,4 +747,111 @@ def show_message_box(_message = "", _title = "Message Box", _icon = 'INFO'):
|
||||
|
||||
if isinstance(_message, str):
|
||||
_message = [_message]
|
||||
bpy.context.window_manager.popup_menu(draw, title = _title, icon = _icon)
|
||||
bpy.context.window_manager.popup_menu(draw, title = _title, icon = _icon)
|
||||
|
||||
|
||||
### UI utils
|
||||
|
||||
## kmi draw for addon without delete button
|
||||
def draw_kmi(km, kmi, layout):
|
||||
map_type = kmi.map_type
|
||||
|
||||
# col = _indented_layout(layout)
|
||||
col = layout.column()
|
||||
if kmi.show_expanded:
|
||||
col = col.column(align=True)
|
||||
box = col.box()
|
||||
else:
|
||||
box = col.column()
|
||||
|
||||
split = box.split()
|
||||
|
||||
# header bar
|
||||
row = split.row(align=True)
|
||||
row.prop(kmi, "show_expanded", text="", emboss=False)
|
||||
row.prop(kmi, "active", text="", emboss=False)
|
||||
|
||||
if km.is_modal:
|
||||
row.separator()
|
||||
row.prop(kmi, "propvalue", text="")
|
||||
else:
|
||||
row.label(text=kmi.name)
|
||||
|
||||
row = split.row()
|
||||
row.prop(kmi, "map_type", text="")
|
||||
if map_type == 'KEYBOARD':
|
||||
row.prop(kmi, "type", text="", full_event=True)
|
||||
elif map_type == 'MOUSE':
|
||||
row.prop(kmi, "type", text="", full_event=True)
|
||||
elif map_type == 'NDOF':
|
||||
row.prop(kmi, "type", text="", full_event=True)
|
||||
elif map_type == 'TWEAK':
|
||||
subrow = row.row()
|
||||
subrow.prop(kmi, "type", text="")
|
||||
subrow.prop(kmi, "value", text="")
|
||||
elif map_type == 'TIMER':
|
||||
row.prop(kmi, "type", text="")
|
||||
else:
|
||||
row.label()
|
||||
|
||||
|
||||
### / Hided delete button
|
||||
if (not kmi.is_user_defined) and kmi.is_user_modified:
|
||||
row.operator("preferences.keyitem_restore", text="", icon='BACK').item_id = kmi.id
|
||||
else:
|
||||
pass ### NO REMOVB
|
||||
# row.operator(
|
||||
# "preferences.keyitem_remove",
|
||||
# text="",
|
||||
# # Abusing the tracking icon, but it works pretty well here.
|
||||
# icon=('TRACKING_CLEAR_BACKWARDS' if kmi.is_user_defined else 'X')
|
||||
# ).item_id = kmi.id
|
||||
### Hided delete button /
|
||||
|
||||
# Expanded, additional event settings
|
||||
if kmi.show_expanded:
|
||||
box = col.box()
|
||||
|
||||
split = box.split(factor=0.4)
|
||||
sub = split.row()
|
||||
|
||||
if km.is_modal:
|
||||
sub.prop(kmi, "propvalue", text="")
|
||||
else:
|
||||
# One day...
|
||||
# sub.prop_search(kmi, "idname", bpy.context.window_manager, "operators_all", text="")
|
||||
sub.prop(kmi, "idname", text="")
|
||||
|
||||
if map_type not in {'TEXTINPUT', 'TIMER'}:
|
||||
sub = split.column()
|
||||
subrow = sub.row(align=True)
|
||||
|
||||
if map_type == 'KEYBOARD':
|
||||
subrow.prop(kmi, "type", text="", event=True)
|
||||
subrow.prop(kmi, "value", text="")
|
||||
subrow_repeat = subrow.row(align=True)
|
||||
subrow_repeat.active = kmi.value in {'ANY', 'PRESS'}
|
||||
subrow_repeat.prop(kmi, "repeat", text="Repeat")
|
||||
elif map_type in {'MOUSE', 'NDOF'}:
|
||||
subrow.prop(kmi, "type", text="")
|
||||
subrow.prop(kmi, "value", text="")
|
||||
|
||||
subrow = sub.row()
|
||||
subrow.scale_x = 0.75
|
||||
subrow.prop(kmi, "any", toggle=True)
|
||||
subrow.prop(kmi, "shift", toggle=True)
|
||||
subrow.prop(kmi, "ctrl", toggle=True)
|
||||
subrow.prop(kmi, "alt", toggle=True)
|
||||
subrow.prop(kmi, "oskey", text="Cmd", toggle=True)
|
||||
subrow.prop(kmi, "key_modifier", text="", event=True)
|
||||
|
||||
# Operator properties
|
||||
box.template_keymap_item_properties(kmi)
|
||||
|
||||
|
||||
## Modal key maps attached to this operator
|
||||
# if not km.is_modal:
|
||||
# kmm = kc.keymaps.find_modal(kmi.idname)
|
||||
# if kmm:
|
||||
# draw_km(display_keymaps, kc, kmm, None, layout + 1)
|
||||
# layout.context_pointer_set("keymap", km)
|
||||
Reference in New Issue
Block a user