From ce0db0d329985e44930e32322012e5f2d6bca3b8 Mon Sep 17 00:00:00 2001 From: Hans Goudey Date: Mon, 25 May 2020 10:53:17 -0400 Subject: [PATCH] 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. Note: Separate commit for 2.83 because UI layouts features have diverged. Differential Revision: https://developer.blender.org/D7806 --- .../scripts/startup/bl_ui/space_userpref.py | 126 +++++++++--------- 1 file changed, 60 insertions(+), 66 deletions(-) diff --git a/release/scripts/startup/bl_ui/space_userpref.py b/release/scripts/startup/bl_ui/space_userpref.py index 89f4bfd4c83..8686c6a2327 100644 --- a/release/scripts/startup/bl_ui/space_userpref.py +++ b/release/scripts/startup/bl_ui/space_userpref.py @@ -1455,16 +1455,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) # ----------------------------------------------------------------------------- @@ -1598,6 +1589,64 @@ class USERPREF_PT_ndof_settings(Panel): bl_label = "3D Mouse Settings" bl_space_type = 'TOPBAR' # dummy. bl_region_type = 'HEADER' + bl_ui_units_x = 10 + + @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") + col.prop(props, "ndof_pan_yz_swap_axis", text="Swap Y and Z Pan Axes") + + layout.separator() + + split = layout.split() + col = split.column() + col.alignment = 'RIGHT' + col.label(text="Invert Axis Pan" if show_3dview_settings else "Invert Pan Axis") + col = split.column() + row = col.row(align=True) + 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: + split = layout.split() + col = split.column() + col.alignment = 'RIGHT' + col.label(text="Invert Axis Orbit") + col = split.column() + row = col.row(align=True) + 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() + col.prop(props, "ndof_lock_horizon", text="Fly/Walk Lock Horizon") + col.prop(props, "ndof_fly_helicopter") def draw(self, context): layout = self.layout @@ -1607,62 +1656,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