inc edit tracks

click-textual
Maveno 1 year ago
parent 1ae52399b9
commit b492ebdab9

@ -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
if trackType is None:
self.track_obj = self.__tc.getTrackDescriptor(trackId) if trackId is not None else {}
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')
self.trackType = trackType
self.subIndex = subIndex
if self.subIndex is None:
raise click.ClickException('Sub index for track is required to be set')
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"
)

Loading…
Cancel
Save