UI: Fix T76918: 3D Mouse Inconsistent / Inaccessible UI

This consolidates the UI code for NDOF input settings, making all
settings accessible from the preferences. This works around an issue
where the Space Navigator's "Menu" button doesn't trigger the settings
menu in Blender.

I also took the opportunity to redo the UI layout.

Differential Revision: https://developer.blender.org/D7806
This commit is contained in:
Hans Goudey 2020-05-21 11:42:23 -04:00
parent df14b11526
commit 7e4654e4ce
Notes: blender-bot 2023-07-10 10:12:37 +02:00
Referenced by issue #76918, 3D Mouse Inconsistent / Inaccessible UI
1 changed files with 51 additions and 66 deletions

View File

@ -1436,16 +1436,7 @@ class USERPREF_PT_input_ndof(InputPanel, CenterAlignMixIn, Panel):
prefs = context.preferences
inputs = prefs.inputs
flow = layout.grid_flow(row_major=False, columns=0, even_columns=True, even_rows=False, align=False)
flow.prop(inputs, "ndof_sensitivity", text="Pan Sensitivity")
flow.prop(inputs, "ndof_orbit_sensitivity", text="Orbit Sensitivity")
flow.prop(inputs, "ndof_deadzone", text="Deadzone")
layout.separator()
flow.row().prop(inputs, "ndof_view_navigate_method", expand=True)
flow.row().prop(inputs, "ndof_view_rotate_method", expand=True)
USERPREF_PT_ndof_settings.draw_settings(layout, inputs)
# -----------------------------------------------------------------------------
@ -1584,6 +1575,55 @@ class USERPREF_PT_ndof_settings(Panel):
bl_label = "3D Mouse Settings"
bl_space_type = 'TOPBAR' # dummy.
bl_region_type = 'HEADER'
bl_ui_units_x = 12
@staticmethod
def draw_settings(layout, props, show_3dview_settings=True):
col = layout.column()
col.prop(props, "ndof_sensitivity", text="Pan Sensitivity")
col.prop(props, "ndof_orbit_sensitivity")
col.prop(props, "ndof_deadzone")
layout.separator()
if show_3dview_settings:
col = layout.column()
col.row().prop(props, "ndof_view_navigate_method", expand=True, text="Navigation")
col.row().prop(props, "ndof_view_rotate_method", expand=True, text="Rotation")
layout.separator()
col = layout.column()
if show_3dview_settings:
col.prop(props, "ndof_show_guide")
col.prop(props, "ndof_zoom_invert")
row = col.row(heading="Pan")
row.prop(props, "ndof_pan_yz_swap_axis", text="Swap Y and Z Axes")
layout.separator()
row = layout.row(heading=("Invert Axis Pan" if show_3dview_settings else "Invert Pan Axis"))
for text, attr in (
("X", "ndof_panx_invert_axis"),
("Y", "ndof_pany_invert_axis"),
("Z", "ndof_panz_invert_axis"),
):
row.prop(props, attr, text=text, toggle=True)
if show_3dview_settings:
row = layout.row(heading="Orbit")
for text, attr in (
("X", "ndof_rotx_invert_axis"),
("Y", "ndof_roty_invert_axis"),
("Z", "ndof_rotz_invert_axis"),
):
row.prop(props, attr, text=text, toggle=True)
layout.separator()
col = layout.column(heading="Fly/Walk")
col.prop(props, "ndof_lock_horizon")
col.prop(props, "ndof_fly_helicopter")
def draw(self, context):
layout = self.layout
@ -1593,62 +1633,7 @@ class USERPREF_PT_ndof_settings(Panel):
input_prefs = context.preferences.inputs
is_view3d = context.space_data.type == 'VIEW_3D'
col = layout.column(align=True)
col.prop(input_prefs, "ndof_sensitivity")
col.prop(input_prefs, "ndof_orbit_sensitivity")
col.prop(input_prefs, "ndof_deadzone")
if is_view3d:
layout.separator()
layout.prop(input_prefs, "ndof_show_guide")
layout.separator()
layout.label(text="Orbit Style")
layout.row().prop(input_prefs, "ndof_view_navigate_method", text="Navigate")
layout.row().prop(input_prefs, "ndof_view_rotate_method", text="Orbit")
layout.separator()
layout.label(text="Orbit Options")
split = layout.split(factor=0.6)
row = split.row()
row.alignment = 'RIGHT'
row.label(text="Invert Axis")
row = split.row(align=True)
for text, attr in (
("X", "ndof_rotx_invert_axis"),
("Y", "ndof_roty_invert_axis"),
("Z", "ndof_rotz_invert_axis"),
):
row.prop(input_prefs, attr, text=text, toggle=True)
# view2d use pan/zoom
layout.separator()
layout.label(text="Pan Options")
split = layout.split(factor=0.6)
row = split.row()
row.alignment = 'RIGHT'
row.label(text="Invert Axis")
row = split.row(align=True)
for text, attr in (
("X", "ndof_panx_invert_axis"),
("Y", "ndof_pany_invert_axis"),
("Z", "ndof_panz_invert_axis"),
):
row.prop(input_prefs, attr, text=text, toggle=True)
layout.prop(input_prefs, "ndof_pan_yz_swap_axis")
layout.label(text="Zoom Options")
layout.prop(input_prefs, "ndof_zoom_invert")
if is_view3d:
layout.separator()
layout.label(text="Fly/Walk Options")
layout.prop(input_prefs, "ndof_fly_helicopter")
layout.prop(input_prefs, "ndof_lock_horizon")
self.draw_settings(layout, input_prefs, is_view3d)
# -----------------------------------------------------------------------------
# Key-Map Editor Panels