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 ffx.track_disposition import TrackDisposition
|
||||||
|
|
||||||
|
from textual.widgets._data_table import CellDoesNotExist
|
||||||
|
|
||||||
|
|
||||||
# Screen[dict[int, str, int]]
|
# Screen[dict[int, str, int]]
|
||||||
class PatternDetailsScreen(Screen):
|
class PatternDetailsScreen(Screen):
|
||||||
@@ -234,6 +236,58 @@ class PatternDetailsScreen(Screen):
|
|||||||
return str(self.query_one("#pattern_input", Input).value)
|
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
|
# Event handler for button press
|
||||||
def on_button_pressed(self, event: Button.Pressed) -> None:
|
def on_button_pressed(self, event: Button.Pressed) -> None:
|
||||||
# Check if the button pressed is the one we are interested in
|
# 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
|
# Save pattern when just created before adding streams
|
||||||
if self.pattern_obj:
|
if self.pattern_obj:
|
||||||
|
|
||||||
|
#self.pattern_obj
|
||||||
|
|
||||||
if event.button.id == "button_add_audio_stream":
|
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)
|
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":
|
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":
|
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":
|
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)
|
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":
|
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":
|
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):
|
def handle_add_stream(self, trackDescriptor):
|
||||||
|
|||||||
@@ -97,11 +97,11 @@ class TrackController():
|
|||||||
s.close()
|
s.close()
|
||||||
|
|
||||||
|
|
||||||
def findTrack(self, patternId, trackType, subIndex):
|
def findTrack(self, patternId, trackType : TrackType, subIndex):
|
||||||
|
|
||||||
try:
|
try:
|
||||||
s = self.Session()
|
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():
|
if q.count():
|
||||||
track = q.first()
|
track = q.first()
|
||||||
|
|||||||
@@ -84,29 +84,25 @@ class TrackDetailsScreen(Screen):
|
|||||||
self.__tc = TrackController(context = self.context)
|
self.__tc = TrackController(context = self.context)
|
||||||
self.__pc = PatternController(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')
|
raise click.ClickException('Track type is required to be set')
|
||||||
|
if self.subIndex is None:
|
||||||
self.trackType = trackType
|
raise click.ClickException('Sub index for track is required to be set')
|
||||||
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):
|
def on_mount(self):
|
||||||
@@ -117,6 +113,16 @@ class TrackDetailsScreen(Screen):
|
|||||||
if self.subIndex is not None:
|
if self.subIndex is not None:
|
||||||
self.query_one("#subindexlabel", Static).update(str(self.subIndex))
|
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:
|
# if self.show_obj:
|
||||||
# self.query_one("#showlabel", Static).update(f"{self.show_obj['id']} - {self.show_obj['name']} ({self.show_obj['year']})")
|
# 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]
|
languages = [l.label() for l in IsoLanguage]
|
||||||
|
|
||||||
dispositions = [(d.label(), d.index(), False) for d in TrackDisposition]
|
|
||||||
|
|
||||||
|
|
||||||
yield Header()
|
yield Header()
|
||||||
|
|
||||||
with Grid():
|
with Grid():
|
||||||
@@ -202,7 +205,6 @@ class TrackDetailsScreen(Screen):
|
|||||||
|
|
||||||
# 15
|
# 15
|
||||||
yield SelectionList[int](
|
yield SelectionList[int](
|
||||||
*dispositions,
|
|
||||||
classes="five",
|
classes="five",
|
||||||
id = "dispositions_selection_list"
|
id = "dispositions_selection_list"
|
||||||
)
|
)
|
||||||
|
|||||||
Reference in New Issue
Block a user