Skip to content

Commit 393eeb3

Browse files
committed
Rework Fixture Name to be not dependent on PropertyGroup
1 parent 3121742 commit 393eeb3

File tree

4 files changed

+77
-48
lines changed

4 files changed

+77
-48
lines changed

dmx.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2035,6 +2035,7 @@ def addFixture(
20352035
fixture_id_numeric=0,
20362036
unit_number=0,
20372037
classing=None,
2038+
user_fixture_name="",
20382039
):
20392040
# TODO: fix order of attributes to match fixture.build()
20402041
dmx = bpy.context.scene.dmx
@@ -2057,6 +2058,7 @@ def addFixture(
20572058
fixture_id_numeric,
20582059
unit_number,
20592060
classing=classing,
2061+
user_fixture_name=user_fixture_name,
20602062
)
20612063
except Exception as e:
20622064
DMX_Log.log.error(f"Error while adding fixture {e}")

fixture.py

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -413,6 +413,11 @@ class DMX_Fixture(PropertyGroup):
413413
type = DMX_Fixture_Channel
414414
)
415415

416+
user_fixture_name: StringProperty(
417+
name = "Fixture name",
418+
description="User definable fixture name, can be non-unique, is for MVR export and all UI",
419+
default = "")
420+
416421
gdtf_long_name: StringProperty(
417422
name = "Fixture > Name",
418423
default = "")
@@ -530,6 +535,7 @@ def build(
530535
fixture_id_numeric=0,
531536
unit_number=0,
532537
classing="",
538+
user_fixture_name="",
533539
):
534540
bpy.ops.object.select_all(action="DESELECT")
535541
for obj in bpy.data.objects:
@@ -551,6 +557,7 @@ def build(
551557
self.name = name
552558
self.profile = profile
553559
self.mode = mode
560+
self.user_fixture_name = user_fixture_name
554561
if fixture_id is not None:
555562
self.fixture_id = fixture_id
556563
if custom_id is not None:
@@ -2750,7 +2757,7 @@ def to_mvr_fixture(self, universe_add=False):
27502757
]
27512758

27522759
return pymvr.Fixture(
2753-
name=self.name,
2760+
name=self.user_fixture_name,
27542761
uuid=self.uuid,
27552762
gdtf_spec=self.profile,
27562763
gdtf_mode=self.mode,
@@ -2775,7 +2782,7 @@ def focus_to_mvr_focus_point(self):
27752782
return pymvr.FocusPoint(
27762783
matrix=pymvr.Matrix(matrix),
27772784
uuid=uuid_,
2778-
name=f"Target for {self.name}",
2785+
name=f"Target for {self.user_fixture_name}",
27792786
)
27802787

27812788
def follow_target_constraint_enable(self, enabled):

panels/fixtures.py

Lines changed: 60 additions & 45 deletions
Original file line numberDiff line numberDiff line change
@@ -147,7 +147,7 @@ class DMX_OT_Fixture_Profiles(Operator):
147147

148148
def execute(self, context):
149149
context.add_edit_panel.profile = self.profile
150-
context.add_edit_panel.name = self.short_name
150+
context.add_edit_panel.user_fixture_name = self.short_name
151151
return {"FINISHED"}
152152

153153

@@ -177,7 +177,7 @@ def onProfile(self, context):
177177
update=onProfile,
178178
)
179179

180-
name: StringProperty(name=_("Name"), default="Fixture")
180+
user_fixture_name: StringProperty(name=_("Name"), default="Fixture")
181181

182182
dmx_breaks: CollectionProperty(name="DMX Break", type=DMX_Break)
183183

@@ -268,10 +268,10 @@ def draw(self, context):
268268
if self.units == 1:
269269
self.advanced_edit = True
270270
if self.advanced_edit:
271-
col.prop(self, "name")
271+
col.prop(self, "user_fixture_name")
272272
else:
273-
if self.name != "*":
274-
col.label(text=f"{self.name}")
273+
if self.user_fixture_name != "*":
274+
col.label(text=f"{self.user_fixture_name}")
275275

276276
col.context_pointer_set("add_edit_panel", self)
277277
text_profile = _("GDTF Profile")
@@ -378,11 +378,11 @@ def execute(self, context):
378378
bpy.context.scene.cursor.location = (0.0, 0.0, 0.0)
379379
bpy.context.scene.cursor.rotation_euler = (0.0, 0.0, 0.0)
380380

381-
if self.name in bpy.data.collections:
382-
self.report(
383-
{"ERROR"}, _("Fixture named {} already exists").format(self.name)
384-
)
385-
return {"CANCELLED"}
381+
# if self.name in bpy.data.collections:
382+
# self.report(
383+
# {"ERROR"}, _("Fixture named {} already exists").format(self.name)
384+
# )
385+
# return {"CANCELLED"}
386386
if not len(self.profile):
387387
self.report({"ERROR"}, _("No GDTF Profile selected."))
388388
return {"CANCELLED"}
@@ -392,8 +392,8 @@ def execute(self, context):
392392
dmx_breaks = self.dmx_breaks
393393
fixture_id = self.fixture_id
394394
for i in range(self.units):
395-
DMX_Log.log.debug(f"Adding fixture {self.name}")
396-
new_name = generate_fixture_name(self.name, i + 1)
395+
DMX_Log.log.debug(f"Adding fixture {self.user_fixture_name}")
396+
new_name = generate_fixture_name(self.profile, i + 1)
397397
dmx.addFixture(
398398
new_name,
399399
self.profile,
@@ -403,6 +403,7 @@ def execute(self, context):
403403
self.display_beams,
404404
self.add_target,
405405
fixture_id=fixture_id,
406+
user_fixture_name=self.user_fixture_name,
406407
)
407408
fixture = dmx.fixtures[-1]
408409
DMX_Log.log.debug(f"Added fixture {fixture}")
@@ -427,7 +428,7 @@ def execute(self, context):
427428
def invoke(self, context, event):
428429
# fixtures_len = len(context.scene.dmx.fixtures)
429430
# self.name = generate_fixture_name("Fixture", fixtures_len + 1)
430-
self.name = "Fixture"
431+
self.user_fixture_name = "Fixture Name"
431432
self.units = 1
432433
DMX_Fixture_AddEdit.profile_list_items = []
433434
wm = context.window_manager
@@ -454,15 +455,15 @@ def execute(self, context):
454455
# Single fixture
455456
if len(selected) == 1:
456457
fixture = selected[0]
457-
if self.name != fixture.name and self.name in bpy.data.collections:
458-
self.report(
459-
{"ERROR"}, _("Fixture named {} already exists").format(self.name)
460-
)
461-
return {"CANCELLED"}
458+
# if self.name != fixture.name and self.name in bpy.data.collections:
459+
# self.report(
460+
# {"ERROR"}, _("Fixture named {} already exists").format(self.name)
461+
# )
462+
# return {"CANCELLED"}
462463

463464
if self.advanced_edit:
464465
fixture.build(
465-
self.name,
466+
fixture.name,
466467
self.profile,
467468
self.mode,
468469
self.dmx_breaks,
@@ -471,6 +472,7 @@ def execute(self, context):
471472
self.add_target,
472473
uuid=fixture.uuid,
473474
fixture_id=fixture.fixture_id,
475+
user_fixture_name=self.user_fixture_name,
474476
)
475477
context.window_manager.dmx.pause_render = False
476478
else:
@@ -504,21 +506,26 @@ def execute(self, context):
504506
else:
505507
dmx_breaks = self.dmx_breaks
506508
fixture_id = self.fixture_id
509+
# for i, fixture in enumerate(selected):
510+
# name = generate_fixture_name(self.name, i + 1)
511+
# if name != fixture.name and name in bpy.data.collections:
512+
# self.report(
513+
# {"ERROR"},
514+
# _("Fixture named {} already exists".format(self.name)),
515+
# )
516+
# return {"CANCELLED"}
507517
for i, fixture in enumerate(selected):
508-
name = generate_fixture_name(self.name, i + 1)
509-
if name != fixture.name and name in bpy.data.collections:
510-
self.report(
511-
{"ERROR"},
512-
_("Fixture named {} already exists".format(self.name)),
513-
)
514-
return {"CANCELLED"}
515-
for i, fixture in enumerate(selected):
516-
name = (
517-
generate_fixture_name(self.name, i + 1)
518-
if (self.name != "*")
519-
else fixture.name
520-
)
518+
# name = (
519+
# generate_fixture_name(self.name, i + 1)
520+
# if (self.name != "*")
521+
# else fixture.name
522+
# )
521523
# fixture_id = f"{self.fixture_id}{i+1}" if (self.name != '*') else fixture.name
524+
if self.user_fixture_name == "*":
525+
new_fixture_name = fixture.user_fixture_name
526+
else:
527+
new_fixture_name = self.user_fixture_name
528+
522529
profile = self.profile if (self.profile != "") else fixture.profile
523530
mode = self.mode if (self.mode != "") else fixture.mode
524531
if not self.modify_address:
@@ -536,7 +543,7 @@ def execute(self, context):
536543
_fixture_id = fixture.fixture_id
537544
if self.advanced_edit:
538545
fixture.build(
539-
name,
546+
fixture.name,
540547
profile,
541548
mode,
542549
dmx_breaks,
@@ -545,6 +552,7 @@ def execute(self, context):
545552
self.add_target,
546553
uuid=fixture.uuid,
547554
fixture_id=_fixture_id,
555+
user_fixture_name=new_fixture_name,
548556
)
549557
if self.modify_address:
550558
for fixture_break, edit_break in zip(
@@ -581,8 +589,8 @@ def invoke(self, context, event):
581589
# Single fixture edit
582590
if len(selected) == 1:
583591
fixture = selected[0]
584-
self.name = fixture.name
585592
self.profile = fixture.profile
593+
self.user_fixture_name = fixture.user_fixture_name
586594
self.dmx_breaks.clear()
587595
for dmx_break in fixture.dmx_breaks:
588596
new_break = self.dmx_breaks.add()
@@ -609,7 +617,7 @@ def invoke(self, context, event):
609617
self.use_target = fixture.use_target
610618
# Multiple fixtures edit
611619
else:
612-
self.name = "*"
620+
self.user_fixture_name = "*"
613621
self.profile = ""
614622
self.dmx_breaks.clear()
615623
for selected_dmx_break in selected[0].dmx_breaks:
@@ -946,7 +954,7 @@ def filter_items(self, context, data, propname):
946954
flt_neworder = []
947955

948956
flt_flags = helper_funcs.filter_items_by_name(
949-
self.filter_name, self.bitflag_filter_item, vgroups, "name"
957+
self.filter_name, self.bitflag_filter_item, vgroups, "user_fixture_name"
950958
)
951959
if not flt_flags:
952960
flt_flags = [self.bitflag_filter_item] * len(vgroups)
@@ -965,7 +973,7 @@ def filter_items(self, context, data, propname):
965973
]
966974
flt_neworder = helper_funcs.sort_items_helper(_sort, lambda e: e[1], False)
967975
elif sorting_order == "NAME":
968-
flt_neworder = helper_funcs.sort_items_by_name(vgroups, "name")
976+
flt_neworder = helper_funcs.sort_items_by_name(vgroups, "user_fixture_name")
969977
elif sorting_order == "FIXTURE_ID":
970978
_sort = [
971979
(idx, self.str_to_digit(vgroups[vg.name].fixture_id))
@@ -989,15 +997,22 @@ def draw_item(
989997
dmx = scene.dmx
990998

991999
has_ies = len(item.ies_data) > 0
992-
item_dmx_break = item.dmx_breaks[0] # just get the first breake for now
1000+
item_dmx_break = item.dmx_breaks[0] # just get the first break for now
9931001
col = layout.column()
9941002
col.context_pointer_set("fixture", item)
995-
col.operator(
996-
"dmx.fixture_item",
997-
text=f"{item.name}{' 📈' if has_ies else ''} {'*' if item.dmx_cache_dirty else ''}",
998-
depress=item.is_selected(),
999-
icon="LOCKED" if item.ignore_movement_dmx else "OUTLINER_DATA_LIGHT",
1000-
)
1003+
1004+
if dmx.fixture_properties_editable:
1005+
col = layout.column()
1006+
col.label(text=f"{item.gdtf_long_name}")
1007+
col = layout.column()
1008+
col.prop(item, "user_fixture_name", text="")
1009+
else:
1010+
col.operator(
1011+
"dmx.fixture_item",
1012+
text=f"{item.user_fixture_name}{' 📈' if has_ies else ''} {'🖊' if item.dmx_cache_dirty else ''}",
1013+
depress=item.is_selected(),
1014+
icon="LOCKED" if item.ignore_movement_dmx else "OUTLINER_DATA_LIGHT",
1015+
)
10011016
col.ui_units_x = 6
10021017

10031018
if dmx.column_fixture_id:
@@ -1050,7 +1065,7 @@ def draw_item(
10501065
] # just get the first break for now
10511066
if overlapping:
10521067
break
1053-
if fixture.name == item.name:
1068+
if fixture.name == item.name: # TODO user_fixture_name
10541069
continue
10551070
if fixture_dmx_break.universe == item_dmx_break.universe:
10561071
channels = set(

panels/programmer.py

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -514,7 +514,12 @@ def draw(self, context):
514514
if len(selected_fixtures) == 0:
515515
selected_fixture_label = _("Nothing selected")
516516
elif len(selected_fixtures) == 1:
517-
selected_fixture_label = selected_fixtures[0].name
517+
my_id = f"{selected_fixtures[0].fixture_id or selected_fixtures[0].custom_id or selected_fixtures[0].unit_number or selected_fixtures[0].fixture_id_numeric}"
518+
my_addr = f"{selected_fixtures[0].dmx_breaks[0].universe}/{selected_fixtures[0].dmx_breaks[0].address}"
519+
selected_fixture_label = (
520+
f"{selected_fixtures[0].user_fixture_name}: {my_id} - {my_addr}"
521+
)
522+
518523
selected_fixture_class = selected_fixtures[0]
519524
else:
520525
profiles = []

0 commit comments

Comments
 (0)