Skip to content

Commit

Permalink
chore: DRY-up UI panel rendering
Browse files Browse the repository at this point in the history
  • Loading branch information
tristan-hm committed May 7, 2022
1 parent 5e3eb6f commit 7b88654
Show file tree
Hide file tree
Showing 7 changed files with 140 additions and 183 deletions.
5 changes: 5 additions & 0 deletions interface/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,8 @@
from . import extrude_menu
from . import array_menu
from . import viewport_menu
from . import ops
from . import common


registerables = (
Expand All @@ -37,6 +39,9 @@


def reload():
importlib.reload(ops)
importlib.reload(common)

for registerable in registerables:
importlib.reload(registerable)

Expand Down
35 changes: 35 additions & 0 deletions interface/common.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
# “Commons Clause” License Condition v1.0
#
# See LICENSE for license details. If you did not receive a copy of the license,
# it may be obtained at https://github.com/hugemenace/nd/blob/main/LICENSE.
#
# Software: ND Blender Addon
# License: MIT
# Licensor: T.S. & I.J. (HugeMenace)

from .. import lib


def create_box(text, icon, layout):
box = layout.box()
box.label(text=text, icon=icon)

return box.column()


def render_ops(ops, layout):
for op, icon, label, mode, deprecated in ops:
if not deprecated or lib.preferences.get_preferences().enable_deprecated_features:
row = layout.row(align=True)
row.scale_y = 1.2
if mode:
row.operator(op, icon=icon, text=label).mode = mode
else:
row.operator(op, icon=icon, text=label)


def web_link(url, text, icon, layout):
if icon:
layout.operator("wm.url_open", text=text, icon=icon).url = url
else:
layout.operator("wm.url_open", text=text).url = url
133 changes: 17 additions & 116 deletions interface/main_ui_panel.py
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,8 @@
import bpy
from .. import bl_info
from .. import lib
from . ops import sketching_ops, power_mod_ops, generator_ops
from . common import create_box, render_ops, web_link


class ND_PT_main_ui_panel(bpy.types.Panel):
Expand All @@ -26,136 +28,35 @@ def draw(self, context):
if lib.preferences.get_preferences().update_available:
box = layout.box()
column = box.column()

row = column.row(align=True)
row.scale_y = 1.5
row.alert = True
row.operator("wm.url_open", text="Update Available!", icon='PACKAGE').url = "https://hugemenace.gumroad.com/l/nd-blender-addon"
row = column.row(align=True)
row.scale_y = 1.2
row.operator("wm.url_open", text="View Changelog", icon='DOCUMENTS').url = "https://docs.nd.hugemenace.co/#/getting-started/changelog"

box = layout.box()
box.label(text="Documentation", icon='INFO')
column = box.column()

row = column.row(align=True)
row.scale_y = 1.2
row.operator("wm.url_open", text="Website").url = "https://docs.nd.hugemenace.co"
row.operator("wm.url_open", text="YouTube").url = "https://www.youtube.com/channel/UCS9HsDPcaWQbo-4Brd7Yjmg"

row = column.row(align=True)
row.scale_y = 1.2
row.operator("wm.url_open", text="Discord").url = "https://discord.gg/FbhkhvKAn3"

box = layout.box()
box.label(text="Sketching", icon='GREASEPENCIL')
column = box.column()

row = column.row(align=True)
row.scale_y = 1.2
row.operator("nd.single_vertex", icon='DOT')

row = column.row(align=True)
row.scale_y = 1.2
row.operator("nd.make_manifold", icon='OUTLINER_DATA_SURFACE')
web_link("https://hugemenace.gumroad.com/l/nd-blender-addon", "Update Available!", "PACKAGE", row)

row = column.row(align=True)
row.scale_y = 1.2
row.operator("nd.geo_lift", icon='FACESEL')

row = column.row(align=True)
row.scale_y = 1.2
row.operator("nd.view_align", icon='ORIENTATION_VIEW')

if lib.preferences.get_preferences().enable_deprecated_features:
row = column.row(align=True)
row.scale_y = 1.2
row.operator("nd.blank_sketch", icon='GREASEPENCIL')

box = layout.box()
box.label(text="Power Mods", icon='MODIFIER')
column = box.column()

row = column.row(align=True)
row.scale_y = 1.2
row.operator("nd.bool_vanilla", text="Difference", icon='MOD_BOOLEAN').mode = 'DIFFERENCE'

row = column.row(align=True)
row.scale_y = 1.2
row.operator("nd.bool_vanilla", text="Union", icon='MOD_BOOLEAN').mode = 'UNION'

row = column.row(align=True)
row.scale_y = 1.2
row.operator("nd.bool_vanilla", text="Intersect", icon='MOD_BOOLEAN').mode = 'INTERSECT'

row = column.row(align=True)
row.scale_y = 1.2
row.operator("nd.bool_slice", icon='MOD_BOOLEAN')
web_link("https://docs.nd.hugemenace.co/#/getting-started/changelog", "View Changelog", "DOCUMENTS", row)

row = column.row(align=True)
row.scale_y = 1.2
row.operator("nd.bool_inset", icon='MOD_BOOLEAN')

row = column.row(align=True)
row.scale_y = 1.2
row.operator("nd.vertex_bevel", icon='VERTEXSEL')
box = create_box("Documentation", 'INFO', layout)

row = column.row(align=True)
row = box.row(align=True)
row.scale_y = 1.2
row.operator("nd.edge_bevel", icon='EDGESEL')
web_link("https://docs.nd.hugemenace.co", "Website", None, row)
web_link("https://www.youtube.com/channel/UCS9HsDPcaWQbo-4Brd7Yjmg", "YouTube", None, row)

row = column.row(align=True)
row = box.row(align=True)
row.scale_y = 1.2
row.operator("nd.bevel", icon='MOD_BEVEL')

row = column.row(align=True)
row.scale_y = 1.2
row.operator("nd.weighted_normal_bevel", icon='MOD_BEVEL')
web_link("https://discord.gg/FbhkhvKAn3", "Discord", None, row)

row = column.row(align=True)
row.scale_y = 1.2
row.operator("nd.solidify", icon='MOD_SOLIDIFY')

row = column.row(align=True)
row.scale_y = 1.2
row.operator("nd.screw", icon='MOD_SCREW')
box = create_box("Sketching", 'GREASEPENCIL', layout)
render_ops(sketching_ops, box)

row = column.row(align=True)
row.scale_y = 1.2
row.operator("nd.profile_extrude", icon='EMPTY_SINGLE_ARROW')

row = column.row(align=True)
row.scale_y = 1.2
row.operator("nd.array_cubed", icon='PARTICLES')

row = column.row(align=True)
row.scale_y = 1.2
row.operator("nd.circular_array", icon='DRIVER_ROTATIONAL_DIFFERENCE')

if lib.preferences.get_preferences().enable_deprecated_features:
row = column.row(align=True)
row.scale_y = 1.2
row.operator("nd.square_array", icon='LIGHTPROBE_GRID')

row = column.row(align=True)
row.scale_y = 1.2
row.operator("nd.mirror", icon='MOD_MIRROR')

row = column.row(align=True)
row.scale_y = 1.2
row.operator("nd.lattice", icon='MOD_LATTICE')

box = layout.box()
box.label(text="Generators", icon='GHOST_ENABLED')
column = box.column()
box = create_box("Power Mod", 'MODIFIER', layout)
render_ops(power_mod_ops, box)

row = column.row(align=True)
row.scale_y = 1.2
row.operator("nd.recon_poly", icon='SURFACE_NCURVE')

row = column.row(align=True)
row.scale_y = 1.2
row.operator("nd.screw_head", icon='CANCEL')
box = create_box("Generators", 'GHOST_ENABLED', layout)
render_ops(generator_ops, box)


def register():
Expand Down
69 changes: 69 additions & 0 deletions interface/ops.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,69 @@
# “Commons Clause” License Condition v1.0
#
# See LICENSE for license details. If you did not receive a copy of the license,
# it may be obtained at https://github.com/hugemenace/nd/blob/main/LICENSE.
#
# Software: ND Blender Addon
# License: MIT
# Licensor: T.S. & I.J. (HugeMenace)

# (ID!, ICON!, CUSTOM_LABEL, MODE, DEPRECATED?)

sketching_ops = [
("nd.single_vertex", 'DOT', None, None, False),
("nd.make_manifold", 'OUTLINER_DATA_SURFACE', None, None, False),
("nd.geo_lift", 'FACESEL', None, None, False),
("nd.view_align", 'ORIENTATION_VIEW', None, None, False),
("nd.blank_sketch", 'GREASEPENCIL', None, None, True),
]

power_mod_ops = [
("nd.bool_vanilla", 'MOD_BOOLEAN', "Difference", 'DIFFERENCE', False),
("nd.bool_vanilla", 'MOD_BOOLEAN', "Union", 'UNION', False),
("nd.bool_vanilla", 'MOD_BOOLEAN', "Intersect", 'INTERSECT', False),
("nd.bool_slice", 'MOD_BOOLEAN', None, None, False),
("nd.bool_inset", 'MOD_BOOLEAN', None, None, False),
("nd.vertex_bevel", 'VERTEXSEL', None, None, False),
("nd.edge_bevel", 'EDGESEL', None, None, False),
("nd.bevel", 'MOD_BEVEL', None, None, False),
("nd.weighted_normal_bevel", 'MOD_BEVEL', None, None, False),
("nd.solidify", 'MOD_SOLIDIFY', None, None, False),
("nd.screw", 'MOD_SCREW', None, None, False),
("nd.profile_extrude", 'EMPTY_SINGLE_ARROW', None, None, False),
("nd.array_cubed", 'PARTICLES', None, None, False),
("nd.circular_array", 'DRIVER_ROTATIONAL_DIFFERENCE', None, None, False),
("nd.square_array", 'LIGHTPROBE_GRID', None, None, True),
("nd.mirror", 'MOD_MIRROR', None, None, False),
("nd.lattice", 'MOD_LATTICE', None, None, False),
]

generator_ops = [
("nd.recon_poly", 'SURFACE_NCURVE', None, None, False),
("nd.screw_head", 'CANCEL', None, None, False),
]

object_names_ops = [
("nd.name_sync", 'FILE_REFRESH', None, None, False),
("nd.set_lod_suffix", 'ALIASED', "Low LOD", 'LOW', False),
("nd.set_lod_suffix", 'ANTIALIASED', "High LOD", 'HIGH', False),
]

object_transform_ops = [
("nd.set_origin", 'TRANSFORM_ORIGINS', None, None, False),
]

object_properties_ops = [
("nd.cycle", 'LONGDISPLAY', None, None, False),
("nd.smooth", 'MOD_SMOOTH', None, None, False),
("nd.seams", 'UV_DATA', None, None, False),
("nd.hydrate", 'SHADING_RENDERED', None, None, False),
("nd.clear_vgs", 'GROUP_VERTEX', None, None, False),
("nd.triangulate", 'MOD_TRIANGULATE', None, None, False),
]

toggle_ops = [
("nd.toggle_wireframes", 'MOD_WIREFRAME', None, None, False),
("nd.toggle_face_orientation", "ORIENTATION_NORMAL", None, None, False),
("nd.toggle_utils_collection", "OUTLINER_COLLECTION", None, None, False),
("nd.toggle_clear_view", "OUTLINER_DATA_VOLUME", None, None, False),
]
54 changes: 8 additions & 46 deletions interface/utils_ui_panel.py
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,8 @@

import bpy
from .. import bl_info
from . ops import object_names_ops, object_transform_ops, object_properties_ops
from . common import create_box, render_ops


class ND_PT_utils_ui_panel(bpy.types.Panel):
Expand All @@ -22,54 +24,14 @@ class ND_PT_utils_ui_panel(bpy.types.Panel):
def draw(self, context):
layout = self.layout

box = layout.box()
box.label(text="Object Names", icon='SCENE_DATA')
column = box.column()
box = create_box("Object Names", 'SCENE_DATA', layout)
render_ops(object_names_ops, box)

row = column.row(align=True)
row.scale_y = 1.2
row.operator("nd.name_sync", icon='FILE_REFRESH')
box = create_box("Object Transform", 'ORIENTATION_GIMBAL', layout)
render_ops(object_transform_ops, box)

row = column.row(align=True)
row.scale_y = 1.2
row.operator("nd.set_lod_suffix", text="Low LOD", icon='ALIASED').suffix = 'LOW'
row.operator("nd.set_lod_suffix", text="High LOD", icon='ANTIALIASED').suffix = 'HIGH'

box = layout.box()
box.label(text="Object Transform", icon='ORIENTATION_GIMBAL')
column = box.column()

row = column.row(align=True)
row.scale_y = 1.2
row.operator("nd.set_origin", icon='TRANSFORM_ORIGINS')

box = layout.box()
box.label(text="Object Properties", icon='MESH_DATA')
column = box.column()

row = column.row(align=True)
row.scale_y = 1.2
row.operator("nd.cycle", icon='LONGDISPLAY')

row = column.row(align=True)
row.scale_y = 1.2
row.operator("nd.smooth", icon='MOD_SMOOTH')

row = column.row(align=True)
row.scale_y = 1.2
row.operator("nd.seams", icon='UV_DATA')

row = column.row(align=True)
row.scale_y = 1.2
row.operator("nd.hydrate", icon='SHADING_RENDERED')

row = column.row(align=True)
row.scale_y = 1.2
row.operator("nd.clear_vgs", icon='GROUP_VERTEX')

row = column.row(align=True)
row.scale_y = 1.2
row.operator("nd.triangulate", icon='MOD_TRIANGULATE')
box = create_box("Object Properties", 'MESH_DATA', layout)
render_ops(object_properties_ops, box)


def register():
Expand Down
23 changes: 4 additions & 19 deletions interface/viewport_ui_panel.py
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,8 @@

import bpy
from .. import bl_info
from . ops import toggle_ops
from . common import create_box, render_ops


class ND_PT_viewport_ui_panel(bpy.types.Panel):
Expand All @@ -22,25 +24,8 @@ class ND_PT_viewport_ui_panel(bpy.types.Panel):
def draw(self, context):
layout = self.layout

box = layout.box()
box.label(text="Toggles", icon='CON_ACTION')
column = box.column()

row = column.row(align=True)
row.scale_y = 1.2
row.operator("nd.toggle_wireframes", icon='MOD_WIREFRAME')

row = column.row(align=True)
row.scale_y = 1.2
row.operator("nd.toggle_face_orientation", icon="ORIENTATION_NORMAL")

row = column.row(align=True)
row.scale_y = 1.2
row.operator("nd.toggle_utils_collection", icon="OUTLINER_COLLECTION")

row = column.row(align=True)
row.scale_y = 1.2
row.operator("nd.toggle_clear_view", icon="OUTLINER_DATA_VOLUME")
box = create_box("Toggles", 'CON_ACTION', layout)
render_ops(toggle_ops, box)


def register():
Expand Down
Loading

0 comments on commit 7b88654

Please sign in to comment.