class SCProjectPropertiesDialog(Gtk.Dialog): def __init__(self, w, **properties): super().__init__("Project Properties - {0}".format(w.project.name), w, 0, (Gtk.STOCK_CANCEL, Gtk.ResponseType.CANCEL, Gtk.STOCK_OK, Gtk.ResponseType.OK), **properties) self.__main_window = w grid = Gtk.Grid() stats_label = Gtk.Label("{0:g} cues in {1:g} lists".format( sum([len(stack) for stack in self.__main_window.project.cue_stacks]), len(self.__main_window.project.cue_stacks)) ) stats_label.set_halign(Gtk.Align.CENTER) grid.attach(stats_label, 0, 0, 3, 1) name_label = Gtk.Label("Name") name_label.set_halign(Gtk.Align.END) grid.attach(name_label, 0, 1, 1, 1) self.__name = Gtk.Entry() self.__name.set_text(self.__main_window.project.name) self.__name.set_hexpand(True) self.__name.set_halign(Gtk.Align.FILL) grid.attach(self.__name, 1, 1, 2, 1) creator_label = Gtk.Label("Creator") creator_label.set_halign(Gtk.Align.END) grid.attach(creator_label, 0, 2, 1, 1) self.__creator = Gtk.Entry() self.__creator.set_text(self.__main_window.project.creator) self.__creator.set_hexpand(True) self.__creator.set_halign(Gtk.Align.FILL) grid.attach(self.__creator, 1, 2, 2, 1) root_label = Gtk.Label("Project Root") root_label.set_halign(Gtk.Align.END) grid.attach(root_label, 0, 3, 1, 1) self.__root = Gtk.Entry() self.__root.set_text(self.__main_window.project.root) self.__root.set_hexpand(True) self.__root.set_halign(Gtk.Align.FILL) grid.attach(self.__root, 1, 3, 1, 1) root_button = Gtk.Button.new_with_label("...") root_button.connect('clicked', self.on_root_button) grid.attach(root_button, 2, 3, 1, 1) panic_fade_label = Gtk.Label("Panic Fade Time") panic_fade_label.set_halign(Gtk.Align.END) grid.attach(panic_fade_label, 0, 4, 1, 1) self.__panic_fade_time = TimePicker(initial_milliseconds=self.__main_window.project.panic_fade_time) self.__panic_fade_time.set_hexpand(True) self.__panic_fade_time.set_halign(Gtk.Align.FILL) grid.attach(self.__panic_fade_time, 1, 4, 1, 1) panic_delta_label = Gtk.Label("Panic Hard-Stop Delta") panic_delta_label.set_halign(Gtk.Align.END) panic_delta_label.set_tooltip_text( "Maximum time from clicking the panic button to count consecutive clicks as hard-stops" ) grid.attach(panic_delta_label, 0, 5, 1, 1) self.__panic_delta = TimePicker(initial_milliseconds=self.__main_window.project.panic_hard_stop_time) self.__panic_delta.set_hexpand(True) self.__panic_delta.set_halign(Gtk.Align.FILL) grid.attach(self.__panic_delta, 1, 5, 1, 1) duration_difference_delta = Gtk.Label("Duration Difference Max Delta") duration_difference_delta.set_halign(Gtk.Align.END) duration_difference_delta.set_tooltip_text( "Maximum length difference between audio files to count them as different files" ) grid.attach(duration_difference_delta, 0, 6, 1, 1) self.__duration_delta = TimePicker( initial_milliseconds=self.__main_window.project.max_duration_discovery_difference ) self.__duration_delta.set_hexpand(True) self.__duration_delta.set_halign(Gtk.Align.FILL) grid.attach(self.__duration_delta, 1, 6, 1, 1) # TODO: Previous Revisions self.get_content_area().pack_start(grid, True, True, 0) self.set_modal(True) w, h = self.__main_window.get_size() g = Gdk.Geometry() g.min_width = int(float(w) * .7) g.max_width = int(float(w) * .7) g.max_height = int(float(h) * .7) self.set_geometry_hints(None, g, Gdk.WindowHints.MIN_SIZE | Gdk.WindowHints.MAX_SIZE) self.connect('response', self.on_response) self.show_all() def on_root_button(self, button): dialog = Gtk.FileChooserDialog("Please choose a folder", self.__main_window, Gtk.FileChooserAction.SELECT_FOLDER, (Gtk.STOCK_CANCEL, Gtk.ResponseType.CANCEL, "Select", Gtk.ResponseType.OK)) dialog.set_default_size(800, 400) result = dialog.run() if result == Gtk.ResponseType.OK: self.__root.set_text(dialog.get_filename()) elif result == Gtk.ResponseType.CANCEL: logger.debug("CANCEL") dialog.destroy() def on_response(self, w, response): if response == Gtk.ResponseType.OK: self.__main_window.project.name = self.__name.get_text() self.__main_window.project.creator = self.__creator.get_text() self.__main_window.project.panic_fade_time = self.__panic_fade_time.get_total_milliseconds() self.__main_window.project.panic_hard_stop_time = self.__panic_delta.get_total_milliseconds() self.__main_window.project.max_duration_discovery_difference = self.__duration_delta.get_total_milliseconds() if self.__main_window.project.root != self.__root.get_text(): self.__main_window.project.change_root(self.__root.get_text()) self.__main_window.project.store() self.__main_window.update_title()
class SCCueDialog(Gtk.Dialog): def __init__(self, w, c, **properties): super().__init__("Cue Editor{0}".format(" - {0}".format(c.name) if c is not None else ""), w, 0, (Gtk.STOCK_CANCEL, Gtk.ResponseType.CANCEL, Gtk.STOCK_OK, Gtk.ResponseType.OK), **properties) self.__main_window = w self.__cue = c self.__editor = self.__cue.get_editor() grid = Gtk.Grid() grid.set_vexpand(True) grid.set_valign(Gtk.Align.FILL) id_label = Gtk.Label("Cue ID") id_label.set_halign(Gtk.Align.END) grid.attach(id_label, 0, 0, 1, 1) self.__id = Gtk.SpinButton.new_with_range(min=0.0, max=9999999999.0, step=0.1) self.__id.set_value(self.__cue.number) self.__id.set_hexpand(True) self.__id.set_halign(Gtk.Align.FILL) grid.attach(self.__id, 1, 0, 1, 1) name_label = Gtk.Label("Name") name_label.set_halign(Gtk.Align.END) grid.attach(name_label, 0, 1, 1, 1) self.__name = Gtk.Entry() self.__name.set_text(self.__cue.name) self.__name.set_hexpand(True) self.__name.set_halign(Gtk.Align.FILL) grid.attach(self.__name, 1, 1, 1, 1) desc_label = Gtk.Label("Description") desc_label.set_halign(Gtk.Align.END) grid.attach(desc_label, 0, 2, 1, 1) self.__description = Gtk.Entry() self.__description.set_text(self.__cue.description) self.__description.set_hexpand(True) self.__description.set_halign(Gtk.Align.FILL) grid.attach(self.__description, 1, 2, 1, 1) notes_label = Gtk.Label("Notes") notes_label.set_halign(Gtk.Align.END) grid.attach(notes_label, 0, 3, 1, 1) self.__text_buffer = Gtk.TextBuffer() self.__text_buffer.set_text(self.__cue.notes) self.__notes = Gtk.TextView.new_with_buffer(self.__text_buffer) self.__notes.set_wrap_mode(Gtk.WrapMode.WORD) self.__notes.set_hexpand(True) self.__notes.set_halign(Gtk.Align.FILL) self.__notes.set_vexpand(True) self.__notes.set_valign(Gtk.Align.FILL) wrapper = Gtk.ScrolledWindow() wrapper.set_policy(Gtk.PolicyType.NEVER, Gtk.PolicyType.AUTOMATIC) wrapper.add(self.__notes) grid.attach(wrapper, 1, 3, 1, 1) prew_label = Gtk.Label("Pre-Wait Time") prew_label.set_halign(Gtk.Align.END) grid.attach(prew_label, 0, 4, 1, 1) self.__prewait = TimePicker(self.__cue.pre_wait) self.__prewait.set_hexpand(True) self.__prewait.set_halign(Gtk.Align.FILL) grid.attach(self.__prewait, 1, 4, 1, 1) postw_label = Gtk.Label("Post-Wait Time") postw_label.set_halign(Gtk.Align.END) grid.attach(postw_label, 0, 5, 1, 1) self.__postwait = TimePicker(self.__cue.post_wait) self.__postwait.set_hexpand(True) self.__postwait.set_halign(Gtk.Align.FILL) grid.attach(self.__postwait, 1, 5, 1, 1) if self.__editor: wrapper = Gtk.ScrolledWindow() wrapper.add(self.__editor) wrapper.set_hexpand(True) wrapper.set_halign(Gtk.Align.FILL) wrapper.set_vexpand(True) wrapper.set_valign(Gtk.Align.FILL) wrapper.set_policy(Gtk.PolicyType.NEVER, Gtk.PolicyType.AUTOMATIC) grid.attach(wrapper, 0, 6, 2, 1) self.get_content_area().pack_start(grid, True, True, 0) self.set_modal(True) w, h = self.__main_window.get_size() g = Gdk.Geometry() g.min_width = int(float(w) * .7) g.max_width = int(float(w) * .7) g.min_height = int(float(h) * .7) g.max_height = int(float(h) * .9) self.set_geometry_hints(self, g, Gdk.WindowHints.MIN_SIZE | Gdk.WindowHints.MAX_SIZE) self.connect('response', self.on_response) self.show_all() def get_custom_editor(self): return self.__editor def get_cue(self): return self.__cue def on_response(self, w, response): if response == Gtk.ResponseType.OK: self.__cue.name = self.__name.get_text().strip() self.__cue.description = self.__description.get_text().strip() self.__cue.notes = self.__text_buffer.get_text( self.__text_buffer.get_start_iter(), self.__text_buffer.get_end_iter(), True ) self.__cue.pre_wait = self.__prewait.get_total_milliseconds() self.__cue.post_wait = self.__postwait.get_total_milliseconds() self.__cue.number = self.__id.get_value() self.__cue.on_editor_closed(self.__editor, save=True) else: self.__cue.on_editor_closed(self.__editor, save=False)