|
19 | 19 | from bpy.props import EnumProperty, IntProperty |
20 | 20 | from bpy.types import Menu, Operator, Panel, UIList |
21 | 21 |
|
| 22 | +from ...data import DMX_Data |
22 | 23 | from ...i18n import DMX_Lang |
23 | 24 | from ...universe import network_options_list |
24 | 25 |
|
@@ -70,14 +71,41 @@ def execute(self, context): |
70 | 71 |
|
71 | 72 | def invoke(self, context, event): |
72 | 73 | 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) |
77 | 75 | wm = context.window_manager |
78 | 76 | return wm.invoke_props_dialog(self) |
79 | 77 |
|
80 | 78 |
|
| 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 | + |
81 | 109 | class DMX_UL_Universe(UIList): |
82 | 110 | def filter_items(self, context, data, propname): |
83 | 111 | visible_indices = set(data.get_visible_universe_indices()) |
@@ -129,13 +157,16 @@ def draw(self, context): |
129 | 157 | ) |
130 | 158 |
|
131 | 159 | 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 |
136 | 162 | ) |
| 163 | + controls = row.column(align=True) |
| 164 | + controls.operator("dmx.add_universe", text="", icon="ADD") |
| 165 | + controls.operator("dmx.remove_universe", text="", icon="REMOVE") |
137 | 166 |
|
138 | 167 | universe = dmx.get_selected_universe() |
139 | 168 | 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