From 260c605201884a8cd687e621940c6e66c152f9e3 Mon Sep 17 00:00:00 2001 From: Maveno Date: Thu, 17 Oct 2024 11:16:20 +0200 Subject: [PATCH] UI edit audio layout --- bin/ffx/audio_layout.py | 32 ++++++++++++++++++++----------- bin/ffx/pattern_details_screen.py | 3 ++- bin/ffx/track_controller.py | 3 +++ bin/ffx/track_details_screen.py | 17 +++++++++++----- bin/ffx/track_type.py | 8 ++++---- 5 files changed, 42 insertions(+), 21 deletions(-) diff --git a/bin/ffx/audio_layout.py b/bin/ffx/audio_layout.py index 7ed761b..7ac3cc8 100644 --- a/bin/ffx/audio_layout.py +++ b/bin/ffx/audio_layout.py @@ -4,29 +4,39 @@ from .track_type import TrackType class AudioLayout(Enum): - LAYOUT_STEREO = {"layout": "stereo", "index": 1} - LAYOUT_5_1 = {"layout": "5.1(side)", "index": 2} - LAYOUT_6_1 = {"layout": "6.1", "index": 3} - LAYOUT_7_1 = {"layout": "7.1", "index": 4} #TODO: Does this exist? + LAYOUT_STEREO = {"label": "stereo", "index": 1} + LAYOUT_5_1 = {"label": "5.1(side)", "index": 2} + LAYOUT_6_1 = {"label": "6.1", "index": 3} + LAYOUT_7_1 = {"label": "7.1", "index": 4} #TODO: Does this exist? - LAYOUT_6CH = {"layout": "6ch", "index": 5} + LAYOUT_6CH = {"label": "6ch", "index": 5} - LAYOUT_UNDEFINED = {"layout": "undefined", "index": 0} + LAYOUT_UNDEFINED = {"label": "undefined", "index": 0} def label(self): - """Returns the layout as string""" - return self.value['layout'] + """Returns the audio layout as string""" + return str(self.value['label']) def index(self): - """Returns the layout as string""" - return self.value['index'] + """Returns the audio layout as integer""" + return int(self.value['index']) + + @staticmethod + def fromLabel(label : str): + try: + + return [a for a in AudioLayout if a.value['label'] == str(label)][0] + except: + raise click.ClickException('fromLabel failed') + return AudioLayout.LAYOUT_UNDEFINED @staticmethod def fromIndex(index : int): try: - return [a for a in AudioLayout if a.index() == int(index)][0] + return [a for a in AudioLayout if a.value['index'] == int(index)][0] except: + raise click.ClickException('fromIndex failed') return AudioLayout.LAYOUT_UNDEFINED @staticmethod diff --git a/bin/ffx/pattern_details_screen.py b/bin/ffx/pattern_details_screen.py index 8503893..de680ce 100644 --- a/bin/ffx/pattern_details_screen.py +++ b/bin/ffx/pattern_details_screen.py @@ -194,7 +194,7 @@ class PatternDetailsScreen(Screen): self.column_key_track_index = self.tracksTable.add_column("Index", width=5) self.column_key_track_type = self.tracksTable.add_column("Type", width=10) self.column_key_track_sub_index = self.tracksTable.add_column("Subindex", width=5) - self.column_key_track_layout = self.tracksTable.add_column("Layout", width=10) + self.column_key_track_audio_layout = self.tracksTable.add_column("Layout", width=10) self.column_key_track_language = self.tracksTable.add_column("Language", width=15) self.column_key_track_title = self.tracksTable.add_column("Title", width=48) self.column_key_track_default = self.tracksTable.add_column("Default", width=8) @@ -426,6 +426,7 @@ class PatternDetailsScreen(Screen): row_key, col_key = self.tracksTable.coordinate_to_cell_key(self.tracksTable.cursor_coordinate) + self.tracksTable.update_cell(row_key, self.column_key_track_audio_layout, trackDescriptor.getAudioLayout().label()) self.tracksTable.update_cell(row_key, self.column_key_track_language, trackDescriptor.getLanguage().label()) self.tracksTable.update_cell(row_key, self.column_key_track_title, trackDescriptor.getTitle()) self.tracksTable.update_cell(row_key, self.column_key_track_default, 'Yes' if TrackDisposition.DEFAULT in trackDescriptor.getDispositionSet() else 'No') diff --git a/bin/ffx/track_controller.py b/bin/ffx/track_controller.py index 6b90f8f..7bae042 100644 --- a/bin/ffx/track_controller.py +++ b/bin/ffx/track_controller.py @@ -65,6 +65,9 @@ class TrackController(): track : Track = q.first() + track.track_type = int(trackDescriptor.getType().index()) + track.audio_layout = int(trackDescriptor.getAudioLayout().index()) + track.disposition_flags = int(TrackDisposition.toFlags(trackDescriptor.getDispositionSet())) descriptorTagKeys = trackDescriptor.getTags() diff --git a/bin/ffx/track_details_screen.py b/bin/ffx/track_details_screen.py index 7c4c99d..5679f93 100644 --- a/bin/ffx/track_details_screen.py +++ b/bin/ffx/track_details_screen.py @@ -33,8 +33,8 @@ class TrackDetailsScreen(Screen): CSS = """ Grid { - grid-size: 5 21; - grid-rows: 2 2 2 2 2 3 2 2 3 2 2 2 2 2 6 2 2 6 2 2 2; + grid-size: 5 24; + grid-rows: 2 2 2 2 2 3 3 2 2 3 2 2 2 2 2 6 2 2 6 2 2 2; grid-columns: 25 25 25 25 125; height: 100%; width: 100%; @@ -99,12 +99,14 @@ class TrackDetailsScreen(Screen): self.__isNew = trackDescriptor is None if self.__isNew: self.__trackType = trackType + self.__audioLayout = AudioLayout.LAYOUT_UNDEFINED self.__index = index self.__subIndex = subIndex self.__trackDescriptor : TrackDescriptor = None self.__pattern : Pattern = self.__pc.getPattern(patternId) if patternId is not None else {} else: self.__trackType = trackDescriptor.getType() + self.__audioLayout = trackDescriptor.getAudioLayout() self.__index = trackDescriptor.getIndex() self.__subIndex = trackDescriptor.getSubIndex() self.__trackDescriptor : TrackDescriptor = trackDescriptor @@ -139,6 +141,8 @@ class TrackDetailsScreen(Screen): if self.__trackType is not None: self.query_one("#type_select", Select).value = self.__trackType.label() + if self.__trackType == TrackType.AUDIO: + self.query_one("#audio_layout_select", Select).value = self.__audioLayout.label() for d in TrackDisposition: @@ -195,6 +199,10 @@ class TrackDetailsScreen(Screen): yield Select.from_values([t.label() for t in TrackType], classes="four", id="type_select") # 7 + yield Static("Audio Layout") + yield Select.from_values([t.label() for t in AudioLayout], classes="four", id="audio_layout_select") + + # 8 yield Static(" ", classes="five") # 9 @@ -266,6 +274,7 @@ class TrackDetailsScreen(Screen): kwargs[TrackDescriptor.SUB_INDEX_KEY] = self.__subIndex #! kwargs[TrackDescriptor.TRACK_TYPE_KEY] = TrackType.fromLabel(self.query_one("#type_select", Select).value) + kwargs[TrackDescriptor.AUDIO_LAYOUT_KEY] = AudioLayout.fromLabel(self.query_one("#audio_layout_select", Select).value) trackTags = {} language = self.query_one("#language_select", Select).value @@ -282,8 +291,6 @@ class TrackDetailsScreen(Screen): dispositionFlags = sum([2**f for f in self.query_one("#dispositions_selection_list", SelectionList).selected]) kwargs[TrackDescriptor.DISPOSITION_SET_KEY] = TrackDisposition.toSet(dispositionFlags) - kwargs[TrackDescriptor.AUDIO_LAYOUT_KEY] = AudioLayout.LAYOUT_UNDEFINED - return TrackDescriptor(**kwargs) @@ -341,7 +348,7 @@ class TrackDetailsScreen(Screen): or (TrackDisposition.FORCED in trackDescriptor.getDispositionSet() and numForcedTracks)): self.query_one("#messagestatic", Static).update("Cannot add another stream with disposition flag 'debug' or 'forced' set") - + else: self.query_one("#messagestatic", Static).update(" ") diff --git a/bin/ffx/track_type.py b/bin/ffx/track_type.py index 9e566da..6775325 100644 --- a/bin/ffx/track_type.py +++ b/bin/ffx/track_type.py @@ -22,16 +22,16 @@ class TrackType(Enum): return int(self.value['index']) @staticmethod - def fromLabel(label): - tlist = [t for t in TrackType if t.value['label'] == label] + def fromLabel(label : str): + tlist = [t for t in TrackType if t.value['label'] == str(label)] if tlist: return tlist[0] else: return TrackType.UNKNOWN @staticmethod - def fromIndex(index): - tlist = [t for t in TrackType if t.value['index'] == index] + def fromIndex(index : int): + tlist = [t for t in TrackType if t.value['index'] == int(index)] if tlist: return tlist[0] else: