inc edit tracks
This commit is contained in:
@@ -20,6 +20,8 @@ from ffx.track_type import TrackType
|
||||
|
||||
from ffx.track_disposition import TrackDisposition
|
||||
|
||||
from textual.widgets._data_table import CellDoesNotExist
|
||||
|
||||
|
||||
# Screen[dict[int, str, int]]
|
||||
class PatternDetailsScreen(Screen):
|
||||
@@ -234,6 +236,58 @@ class PatternDetailsScreen(Screen):
|
||||
return str(self.query_one("#pattern_input", Input).value)
|
||||
|
||||
|
||||
|
||||
def getSelectedAudioTrackId(self):
|
||||
|
||||
if not self.pattern_obj:
|
||||
return None
|
||||
|
||||
try:
|
||||
|
||||
# Fetch the currently selected row when 'Enter' is pressed
|
||||
#selected_row_index = self.table.cursor_row
|
||||
row_key, col_key = self.audioStreamsTable.coordinate_to_cell_key(self.audioStreamsTable.cursor_coordinate)
|
||||
|
||||
if row_key is not None:
|
||||
selected_track_data = self.audioStreamsTable.get_row(row_key)
|
||||
|
||||
subIndex = int(selected_track_data[0])
|
||||
|
||||
return self.__tc.findTrack(self.pattern_obj['id'], TrackType.AUDIO, subIndex)
|
||||
|
||||
else:
|
||||
return None
|
||||
|
||||
except CellDoesNotExist:
|
||||
return None
|
||||
|
||||
|
||||
def getSelectedSubtitleTrackId(self):
|
||||
|
||||
if not self.pattern_obj:
|
||||
return None
|
||||
|
||||
try:
|
||||
|
||||
# Fetch the currently selected row when 'Enter' is pressed
|
||||
#selected_row_index = self.table.cursor_row
|
||||
row_key, col_key = self.subtitleStreamsTable.coordinate_to_cell_key(self.subtitleStreamsTable.cursor_coordinate)
|
||||
|
||||
if row_key is not None:
|
||||
selected_track_data = self.subtitleStreamsTable.get_row(row_key)
|
||||
|
||||
subIndex = int(selected_track_data[0])
|
||||
|
||||
return self.__tc.findTrack(self.pattern_obj['id'], TrackType.SUBTITLE, subIndex)
|
||||
|
||||
else:
|
||||
return None
|
||||
|
||||
except CellDoesNotExist:
|
||||
return None
|
||||
|
||||
|
||||
|
||||
# Event handler for button press
|
||||
def on_button_pressed(self, event: Button.Pressed) -> None:
|
||||
# Check if the button pressed is the one we are interested in
|
||||
@@ -259,19 +313,21 @@ class PatternDetailsScreen(Screen):
|
||||
# Save pattern when just created before adding streams
|
||||
if self.pattern_obj:
|
||||
|
||||
#self.pattern_obj
|
||||
|
||||
if event.button.id == "button_add_audio_stream":
|
||||
self.app.push_screen(TrackDetailsScreen(trackType = TrackType.AUDIO, patternId = self.pattern_obj['id'], subIndex = len(self.audioStreamsTable.rows)), self.handle_add_stream)
|
||||
if event.button.id == "button_edit_audio_stream":
|
||||
self.app.push_screen(TrackDetailsScreen(trackType = TrackType.AUDIO, patternId = self.pattern_obj['id']), self.handle_edit_stream)
|
||||
self.app.push_screen(TrackDetailsScreen(trackId = self.getSelectedAudioTrackId()), self.handle_edit_stream)
|
||||
if event.button.id == "button_delete_audio_stream":
|
||||
self.app.push_screen(TrackDeleteScreen(trackType = TrackType.AUDIO, patternId = self.pattern_obj['id']), self.handle_delete_stream)
|
||||
self.app.push_screen(TrackDeleteScreen(trackId = self.getSelectedAudioTrackId()), self.handle_delete_stream)
|
||||
|
||||
if event.button.id == "button_add_subtitle_stream":
|
||||
self.app.push_screen(TrackDetailsScreen(trackType = TrackType.SUBTITLE, patternId = self.pattern_obj['id'], subIndex = len(self.subtitleStreamsTable.rows)), self.handle_add_stream)
|
||||
if event.button.id == "button_edit_subtitle_stream":
|
||||
self.app.push_screen(TrackDetailsScreen(trackType = TrackType.SUBTITLE, patternId = self.pattern_obj['id']), self.handle_edit_stream)
|
||||
self.app.push_screen(TrackDetailsScreen(trackId = self.getSelectedSubtitleTrackId()), self.handle_edit_stream)
|
||||
if event.button.id == "button_delete_subtitle_stream":
|
||||
self.app.push_screen(TrackDeleteScreen(trackType = TrackType.SUBTITLE, patternId = self.pattern_obj['id']), self.handle_delete_stream)
|
||||
self.app.push_screen(TrackDeleteScreen(trackId = self.getSelectedSubtitleTrackId()), self.handle_delete_stream)
|
||||
|
||||
|
||||
def handle_add_stream(self, trackDescriptor):
|
||||
|
||||
@@ -97,11 +97,11 @@ class TrackController():
|
||||
s.close()
|
||||
|
||||
|
||||
def findTrack(self, patternId, trackType, subIndex):
|
||||
def findTrack(self, patternId, trackType : TrackType, subIndex):
|
||||
|
||||
try:
|
||||
s = self.Session()
|
||||
q = s.query(Track).filter(Track.pattern_id == int(patternId), Track.track_type == trackType, Track.sub_index == int(subIndex))
|
||||
q = s.query(Track).filter(Track.pattern_id == int(patternId), Track.track_type == trackType.value, Track.sub_index == int(subIndex))
|
||||
|
||||
if q.count():
|
||||
track = q.first()
|
||||
|
||||
@@ -84,29 +84,25 @@ class TrackDetailsScreen(Screen):
|
||||
self.__tc = TrackController(context = self.context)
|
||||
self.__pc = PatternController(context = self.context)
|
||||
|
||||
self.track_obj = self.__tc.getTrackDescriptor(trackId) if trackId is not None else {} #TODO: Overwriting alternative values if set
|
||||
self.track_obj = self.__tc.getTrackDescriptor(trackId) if trackId is not None else {}
|
||||
|
||||
if trackType is None:
|
||||
if self.track_obj:
|
||||
self.trackType = self.track_obj['type']
|
||||
self.subIndex = self.track_obj['sub_index']
|
||||
self.pattern_obj = self.__pc.getPatternDescriptor(self.track_obj['pattern_id'])
|
||||
else:
|
||||
self.trackType = trackType
|
||||
self.subIndex = subIndex
|
||||
self.pattern_obj = self.__pc.getPatternDescriptor(patternId) if patternId is not None else {}
|
||||
|
||||
if self.trackType is None:
|
||||
raise click.ClickException('Track type is required to be set')
|
||||
if self.subIndex is None:
|
||||
raise click.ClickException('Sub index for track is required to be set')
|
||||
|
||||
|
||||
self.trackType = trackType
|
||||
self.subIndex = subIndex
|
||||
|
||||
self.pattern_obj = self.__pc.getPatternDescriptor(patternId) if patternId is not None else {}
|
||||
|
||||
|
||||
# def loadPatterns(self, show_id):
|
||||
#
|
||||
# try:
|
||||
# s = self.Session()
|
||||
# q = s.query(Pattern).filter(Pattern.show_id == int(show_id))
|
||||
#
|
||||
# return [{'id': int(p.id), 'pattern': p.pattern} for p in q.all()]
|
||||
#
|
||||
# except Exception as ex:
|
||||
# click.ClickException(f"loadPatterns(): {repr(ex)}")
|
||||
# finally:
|
||||
# s.close()
|
||||
|
||||
|
||||
def on_mount(self):
|
||||
@@ -117,6 +113,16 @@ class TrackDetailsScreen(Screen):
|
||||
if self.subIndex is not None:
|
||||
self.query_one("#subindexlabel", Static).update(str(self.subIndex))
|
||||
|
||||
for d in TrackDisposition:
|
||||
dispositionIsSet = self.track_obj and d in self.track_obj['disposition_list']
|
||||
disposition = (d.label(), d.index(), dispositionIsSet)
|
||||
self.query_one("#dispositions_selection_list", SelectionList).add_option(disposition)
|
||||
|
||||
if self.track_obj:
|
||||
self.query_one("#language_select", Select).value = self.track_obj['language'].label()
|
||||
self.query_one("#title_input", Input).value = str(self.track_obj['title'])
|
||||
|
||||
|
||||
# if self.show_obj:
|
||||
# self.query_one("#showlabel", Static).update(f"{self.show_obj['id']} - {self.show_obj['name']} ({self.show_obj['year']})")
|
||||
|
||||
@@ -147,9 +153,6 @@ class TrackDetailsScreen(Screen):
|
||||
|
||||
languages = [l.label() for l in IsoLanguage]
|
||||
|
||||
dispositions = [(d.label(), d.index(), False) for d in TrackDisposition]
|
||||
|
||||
|
||||
yield Header()
|
||||
|
||||
with Grid():
|
||||
@@ -202,7 +205,6 @@ class TrackDetailsScreen(Screen):
|
||||
|
||||
# 15
|
||||
yield SelectionList[int](
|
||||
*dispositions,
|
||||
classes="five",
|
||||
id = "dispositions_selection_list"
|
||||
)
|
||||
|
||||
Reference in New Issue
Block a user