Skip to content
This repository was archived by the owner on Jun 8, 2023. It is now read-only.

Commit b79a9b4

Browse files
'backup'
1 parent 5f48da4 commit b79a9b4

22 files changed

Lines changed: 154 additions & 42 deletions

application/CommandBus.py

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,9 @@
77
import protocol0.application.command as command_package
88
import protocol0.application.command_handler as command_handler_package
99
from protocol0.application.ContainerInterface import ContainerInterface
10+
from protocol0.application.command.ScrollScenePositionCommand import ScrollScenePositionCommand
11+
from protocol0.application.command.ScrollSceneTracksCommand import ScrollSceneTracksCommand
12+
from protocol0.application.command.ScrollScenesCommand import ScrollScenesCommand
1013
from protocol0.application.command.SerializableCommand import SerializableCommand
1114
from protocol0.application.command_handler.CommandHandlerInterface import \
1215
CommandHandlerInterface
@@ -24,6 +27,9 @@
2427
class CommandBus(object):
2528
_DEBUG = True
2629
_INSTANCE = None # type: Optional[CommandBus]
30+
_DUPLICATE_COMMAND_WHITELIST = (
31+
ScrollScenePositionCommand, ScrollScenesCommand, ScrollSceneTracksCommand
32+
)
2733
_DUPLICATE_COMMAND_WARNING_COUNT = 10
2834

2935
def __init__(self, container):
@@ -106,6 +112,7 @@ def _is_duplicate_command(self, command):
106112
107113
We mitigate it by forbidding duplicate messages in a certain delay
108114
"""
109-
return type(self._last_command) is type(command) \
115+
return type(command) not in self._DUPLICATE_COMMAND_WHITELIST \
116+
and type(self._last_command) is type(command) \
110117
and self._last_command_processed_at is not None \
111118
and time.time() - self._last_command_processed_at < 0.100

domain/lom/device/DeviceEnum.py

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@ class DeviceEnum(AbstractEnum):
2222
EQ_ROOM = "EQ_ROOM"
2323
EXTERNAL_AUDIO_EFFECT = "EXTERNAL_AUDIO_EFFECT"
2424
EXTERNAL_INSTRUMENT = "EXTERNAL_INSTRUMENT"
25+
FREE_CLIP = "FREE_CLIP"
2526
LFO_TOOL = "LFO_TOOL"
2627
LIMITER = "LIMITER"
2728
MINITAUR_EDITOR = "MINITAUR_EDITOR"
@@ -56,6 +57,7 @@ def device_name(self):
5657
DeviceEnum.EQ_ROOM: "EQ Room",
5758
DeviceEnum.EXTERNAL_AUDIO_EFFECT: "Ext. Audio Effect",
5859
DeviceEnum.EXTERNAL_INSTRUMENT: "Ext. Instrument",
60+
DeviceEnum.FREE_CLIP: "FreeClip",
5961
DeviceEnum.LFO_TOOL: "LFOTool_x64",
6062
DeviceEnum.LIMITER: "Limiter",
6163
DeviceEnum.MINITAUR_EDITOR: "Minitaur Editor(x64)",
@@ -82,14 +84,15 @@ def browser_name(self):
8284
DeviceEnum.ARPEGGIATOR_RACK: "Arpeggiator rack.adg",
8385
DeviceEnum.AUTO_FILTER_HIGH_PASS: "Auto Filter High Pass.adv",
8486
DeviceEnum.AUTO_FILTER_LOW_PASS: "Auto Filter Low Pass.adv",
85-
DeviceEnum.EXTERNAL_AUDIO_EFFECT: "External Audio Effect",
86-
DeviceEnum.EXTERNAL_INSTRUMENT: "External Instrument",
8787
DeviceEnum.COMPRESSOR: "Compressor",
8888
DeviceEnum.DRUM_RACK: "Drum Rack",
8989
DeviceEnum.DUMMY_RACK: "Dummy Rack.adg",
9090
DeviceEnum.EQ_EIGHT: "EQ Eight",
9191
DeviceEnum.EQ_EIGHT_RACK: "EQ Eight Rack.adg",
9292
DeviceEnum.EQ_ROOM: "EQ Room.adv",
93+
DeviceEnum.EXTERNAL_AUDIO_EFFECT: "External Audio Effect",
94+
DeviceEnum.EXTERNAL_INSTRUMENT: "External Instrument",
95+
DeviceEnum.FREE_CLIP: "FreeClip",
9396
DeviceEnum.LFO_TOOL: "LFOTool_x64",
9497
DeviceEnum.LIMITER: "Limiter",
9598
DeviceEnum.MIX_RACK: "Mix Rack.adg",
@@ -115,8 +118,8 @@ def favorites(cls):
115118
], [
116119
cls.COMPRESSOR,
117120
cls.SSL_COMP,
118-
cls.API_2500,
119121
cls.LIMITER,
122+
cls.FREE_CLIP,
120123
],
121124
[
122125
cls.SATURATOR,

domain/lom/instrument/InstrumentDisplayService.py

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -56,7 +56,9 @@ def _on_simple_track_armed_event(self, event):
5656

5757
seq = Sequence()
5858
seq.add(partial(self.activate_plugin_window, track))
59-
seq.add(Backend.client().hide_plugins)
59+
if not track.instrument.force_show:
60+
seq.add(Backend.client().hide_plugins)
61+
track.instrument.force_show
6062
return seq.done()
6163

6264
def activate_plugin_window(self, track, force_activate=False):

domain/lom/instrument/InstrumentInterface.py

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,9 +6,12 @@
66
from protocol0.domain.lom.instrument.preset.InstrumentPreset import InstrumentPreset
77
from protocol0.domain.lom.instrument.preset.InstrumentPresetList import InstrumentPresetList
88
from protocol0.domain.lom.instrument.preset.PresetDisplayOptionEnum import PresetDisplayOptionEnum
9-
from protocol0.domain.lom.instrument.preset.preset_changer.PresetChangerInterface import PresetChangerInterface
10-
from protocol0.domain.lom.instrument.preset.preset_changer.ProgramChangePresetChanger import ProgramChangePresetChanger
11-
from protocol0.domain.lom.instrument.preset.preset_importer.PresetImporterFactory import PresetImporterFactory
9+
from protocol0.domain.lom.instrument.preset.preset_changer.PresetChangerInterface import \
10+
PresetChangerInterface
11+
from protocol0.domain.lom.instrument.preset.preset_changer.ProgramChangePresetChanger import \
12+
ProgramChangePresetChanger
13+
from protocol0.domain.lom.instrument.preset.preset_importer.PresetImporterFactory import \
14+
PresetImporterFactory
1215
from protocol0.domain.lom.instrument.preset.preset_initializer.PresetInitializerDevicePresetName import \
1316
PresetInitializerDevicePresetName
1417
from protocol0.domain.lom.instrument.preset.preset_initializer.PresetInitializerInterface import \
@@ -36,6 +39,9 @@ def __init__(self, device, track_name):
3639
self._track_name = track_name
3740
self.device = device
3841
self.activated = False
42+
# setting to True will keep the editor shown for the next time only.
43+
# used when duplicating a track
44+
self.force_show = False
3945
preset_importer = PresetImporterFactory.create_importer(device, self.PRESETS_PATH, self.PRESET_EXTENSION)
4046
preset_initializer = self.PRESET_INITIALIZER(device, track_name)
4147
preset_changer = self.PRESET_CHANGER(device, self.PRESET_OFFSET)

domain/lom/scene/SceneService.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -126,7 +126,8 @@ def _on_track_added_event(self, _):
126126
empty_scenes = []
127127
seq = Sequence()
128128
for scene in list(reversed(SongFacade.scenes()))[1:]:
129-
if scene.length == 0:
129+
# nb : scene.length == 0 would suppress the template dummy clip
130+
if len(scene.clips.all) == 0:
130131
empty_scenes.append(scene)
131132
else:
132133
break

domain/lom/song/components/TrackCrudComponent.py

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,8 @@
22

33
from protocol0.domain.lom.track.TracksMappedEvent import TracksMappedEvent
44
from protocol0.domain.lom.track.abstract_track.AbstractTrack import AbstractTrack
5+
from protocol0.domain.lom.track.simple_track.SimpleTrackDeletedEvent import SimpleTrackDeletedEvent
6+
from protocol0.domain.shared.event.DomainEventBus import DomainEventBus
57
from protocol0.shared.sequence.Sequence import Sequence
68

79

@@ -13,6 +15,12 @@ def __init__(self, create_midi_track, create_audio_track, duplicate_track, delet
1315
self._duplicate_track = duplicate_track
1416
self._delete_track = delete_track
1517

18+
DomainEventBus.subscribe(SimpleTrackDeletedEvent, self._on_simple_track_deleted_event)
19+
20+
def _on_simple_track_deleted_event(self, event):
21+
# type: (SimpleTrackDeletedEvent) -> None
22+
self.delete_track(event.track.index)
23+
1624
def create_midi_track(self, index):
1725
# type: (int) -> Sequence
1826
seq = Sequence()

domain/lom/track/abstract_track/AbstractTrack.py

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,7 @@
22

33
import Live
44
from _Framework.SubjectSlot import SlotManager
5-
from typing import Optional, List, Iterator, cast
6-
from typing import TYPE_CHECKING
5+
from typing import Optional, List, Iterator, cast, TYPE_CHECKING
76

87
from protocol0.domain.lom.clip.Clip import Clip
98
from protocol0.domain.lom.clip.ClipSlotSelectedEvent import ClipSlotSelectedEvent

domain/lom/track/abstract_track/AbstractTrackAppearance.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,8 @@ def set_instrument(self, instrument):
2929
def _name_listener(self):
3030
# type: () -> None
3131
if len(self.name) > 2:
32-
self.name = self.name.title()
32+
# .title is not good because of words starting with numbers
33+
self.name = " ".join([word.capitalize() for word in self.name.split(" ")])
3334

3435
@property
3536
def name(self):
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,11 @@
11
from protocol0.domain.lom.track.group_track.NormalGroupTrack import NormalGroupTrack
2+
from protocol0.domain.lom.track.simple_track.SimpleTrack import SimpleTrack
23

34

45
class DrumsTrack(NormalGroupTrack):
56
TRACK_NAME = "Drums"
7+
8+
@classmethod
9+
def is_track_valid(cls, track):
10+
# type: (SimpleTrack) -> bool
11+
return track.name.split(" ")[0] == cls.TRACK_NAME

domain/lom/track/group_track/AbstractGroupTrack.py

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -58,6 +58,10 @@ def _map_dummy_tracks(self):
5858
# type: () -> None
5959
dummy_track, dummy_return_track = self._get_dummy_tracks()
6060

61+
# no change
62+
if dummy_track == self.dummy_track and dummy_return_track == self.dummy_return_track:
63+
return None
64+
6165
if dummy_track is not None:
6266
if dummy_track._track != getattr(self.dummy_track, "_track", None):
6367
self.dummy_track = SimpleDummyTrack(dummy_track._track, dummy_track.index)
@@ -72,7 +76,7 @@ def _map_dummy_tracks(self):
7276
if dummy_return_track._track != getattr(self.dummy_return_track, "_track", None):
7377
self.dummy_return_track = SimpleDummyReturnTrack(dummy_return_track._track,
7478
dummy_return_track.index)
75-
self.add_or_replace_sub_track(self.dummy_return_track, dummy_track)
79+
self.add_or_replace_sub_track(self.dummy_return_track, dummy_return_track)
7680
self._link_sub_track(self.dummy_return_track)
7781
else:
7882
if self.dummy_return_track is not None:
@@ -101,8 +105,7 @@ def _route_sub_tracks(self):
101105
output_track = self.dummy_track if self.dummy_track is not None else self.base_track
102106

103107
for track in simple_tracks:
104-
if track.has_audio_output:
105-
track.output_routing.track = cast(SimpleTrack, output_track)
108+
track.output_routing.track = cast(SimpleTrack, output_track)
106109

107110
def is_parent(self, abstract_track):
108111
# type: (AbstractTrack) -> bool

0 commit comments

Comments
 (0)