Skip to content

Commit 8de033c

Browse files
committed
Add missing Universe remove, use Blender style UI
1 parent 8a6076d commit 8de033c

2 files changed

Lines changed: 42 additions & 10 deletions

File tree

‎dmx.py‎

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -154,6 +154,7 @@ class DMX(PropertyGroup):
154154
panels_universes.DMX_UL_Universe,
155155
panels_universes.DMX_MT_Universe,
156156
panels_universes.DMX_OP_Universe_Add,
157+
panels_universes.DMX_OP_Universe_Remove,
157158
panels_universes.DMX_PT_DMX_Universes,
158159
panels_live.DMX_PT_DMX_LiveDMX,
159160
panels_artnet.DMX_PT_DMX_ArtNet,

‎panels/protocols/universes.py‎

Lines changed: 41 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919
from bpy.props import EnumProperty, IntProperty
2020
from bpy.types import Menu, Operator, Panel, UIList
2121

22+
from ...data import DMX_Data
2223
from ...i18n import DMX_Lang
2324
from ...universe import network_options_list
2425

@@ -70,14 +71,41 @@ def execute(self, context):
7071

7172
def invoke(self, context, event):
7273
dmx = context.scene.dmx
73-
universe = dmx.get_selected_universe()
74-
if universe is not None:
75-
self.universe_id = universe.id
76-
self.input = universe.input
74+
self.universe_id = len(dmx.universes)
7775
wm = context.window_manager
7876
return wm.invoke_props_dialog(self)
7977

8078

79+
class DMX_OP_Universe_Remove(Operator):
80+
bl_label = _("Remove Universe")
81+
bl_idname = "dmx.remove_universe"
82+
bl_description = _("Remove the selected DMX universe")
83+
bl_options = {"UNDO"}
84+
85+
def execute(self, context):
86+
dmx = context.scene.dmx
87+
index = dmx.universe_list_i
88+
if index < 0 or index >= len(dmx.universes):
89+
return {"CANCELLED"}
90+
91+
replacement = max(0, index - 1)
92+
for fixture in dmx.fixtures:
93+
for dmx_break in fixture.dmx_breaks:
94+
if dmx_break.universe == index:
95+
dmx_break.universe = replacement
96+
elif dmx_break.universe > index:
97+
dmx_break.universe -= 1
98+
99+
dmx.removeUniverse(index)
100+
for universe_index, universe in enumerate(dmx.universes):
101+
universe.id = universe_index
102+
103+
dmx.universes_n = len(dmx.universes)
104+
dmx.universe_list_i = min(index, len(dmx.universes) - 1)
105+
DMX_Data.setup(dmx.universes_n)
106+
return {"FINISHED"}
107+
108+
81109
class DMX_UL_Universe(UIList):
82110
def filter_items(self, context, data, propname):
83111
visible_indices = set(data.get_visible_universe_indices())
@@ -129,13 +157,16 @@ def draw(self, context):
129157
)
130158

131159
row = layout.row()
132-
row.operator("dmx.add_universe", text=_("Add Universe"), icon="ADD")
133-
134-
layout.template_list(
135-
"DMX_UL_Universe", "", dmx, "universes", dmx, "universe_list_i"
160+
row.template_list(
161+
"DMX_UL_Universe", "", dmx, "universes", dmx, "universe_list_i", rows=4
136162
)
163+
controls = row.column(align=True)
164+
controls.operator("dmx.add_universe", text="", icon="ADD")
165+
controls.operator("dmx.remove_universe", text="", icon="REMOVE")
137166

138167
universe = dmx.get_selected_universe()
139168
if universe is not None:
140-
layout.prop(universe, "name")
141-
layout.prop(universe, "input")
169+
box = layout.box()
170+
box.label(text=f"{_('Universe')} {universe.id}")
171+
box.prop(universe, "name")
172+
box.prop(universe, "input")

0 commit comments

Comments
 (0)