def __init__(self): self.ui = cozy.ui.main_view.CozyUI() # init buttons self.play_button = self.ui.get_object("play_button") self.prev_button = self.ui.get_object("prev_button") self.volume_button = self.ui.get_object("volume_button") self.volume_button.set_value( tools.get_glib_settings().get_double("volume")) self.timer_button = self.ui.get_object("timer_button") self.playback_speed_button = self.ui.get_object( "playback_speed_button") self.search_button = self.ui.get_object("search_button") self.warnings_button = self.ui.get_object("warnings_button") self.menu_button = self.ui.get_object("menu_button") self.remaining_event_box = self.ui.get_object("remaining_event_box") # init labels self.title_label = self.ui.get_object("title_label") self.subtitle_label = self.ui.get_object("subtitle_label") self.current_label = self.ui.get_object("current_label") self.current_label.set_visible(False) self.remaining_label = self.ui.get_object("remaining_label") self.remaining_label.set_visible(False) # init images self.play_img = self.ui.get_object("play_img") self.pause_img = self.ui.get_object("pause_img") self.cover_img = self.ui.get_object("cover_img") self.cover_img_box = self.ui.get_object("cover_img_box") # init progress scale self.progress_scale = self.ui.get_object("progress_scale") self.progress_scale.set_increments(30.0, 60.0) self.progress_scale.set_visible(False) self.status_stack = self.ui.get_object("status_stack") self.status_label = self.ui.get_object("status_label") self.update_progress_bar = self.ui.get_object("update_progress_bar") self.throbber = self.ui.get_object("spinner") self.throbber.set_visible(False) self.progress_bar = self.ui.get_object("progress_bar") self.__init_signals() # elementaryos specific stuff if tools.is_elementary(): self.cover_img_box.props.width_request = 28 self.cover_img_box.props.height_request = 28 self.volume_button.props.relief = Gtk.ReliefStyle.NONE else: self.volume_button.get_style_context().remove_class("flat") # app menu self.menu_builder = Gtk.Builder.new_from_resource( "/de/geigi/cozy/titlebar_menu.ui") menu = self.menu_builder.get_object("titlebar_menu") self.menu_button.set_menu_model(menu)
def __init_actions(self): """ Init all app actions. """ self.accel = Gtk.AccelGroup() help_action = Gio.SimpleAction.new("help", None) help_action.connect("activate", self.help) self.app.add_action(help_action) about_action = Gio.SimpleAction.new("about", None) about_action.connect("activate", self.about) self.app.add_action(about_action) quit_action = Gio.SimpleAction.new("quit", None) quit_action.connect("activate", self.quit) self.app.add_action(quit_action) self.app.set_accels_for_action("app.quit", ["<Control>q", "<Control>w"]) pref_action = Gio.SimpleAction.new("prefs", None) pref_action.connect("activate", self.show_prefs) self.app.add_action(pref_action) self.app.set_accels_for_action("app.prefs", ["<Control>comma"]) self.scan_action = Gio.SimpleAction.new("scan", None) self.scan_action.connect("activate", self.scan) self.app.add_action(self.scan_action) self.play_pause_action = Gio.SimpleAction.new("play_pause", None) self.play_pause_action.connect("activate", self.play_pause) self.app.add_action(self.play_pause_action) self.app.set_accels_for_action("app.play_pause", ["space"]) back_action = Gio.SimpleAction.new("back", None) back_action.connect("activate", self.back) self.app.add_action(back_action) self.app.set_accels_for_action("app.back", ["Escape"]) self.hide_offline_action = Gio.SimpleAction.new_stateful( "hide_offline", None, GLib.Variant.new_boolean( tools.get_glib_settings().get_boolean("hide-offline"))) self.hide_offline_action.connect("change-state", self.__on_hide_offline) self.app.add_action(self.hide_offline_action) builder = Gtk.Builder.new_from_resource("/de/geigi/cozy/app_menu.ui") menu = builder.get_object("app_menu") if not tools.is_elementary(): self.app.set_app_menu(menu)
def update_track_ui(self): # set data of new stream in ui track = player.get_current_track() if track is None: return self.title_label.set_text(track.book.name) self.subtitle_label.set_text(track.name) self.block_ui_buttons(False) self.progress_scale.set_sensitive(True) self.progress_scale.set_visible(True) # only change cover when book has changed if self.current_book is not track.book: self.current_book = track.book if tools.is_elementary(): size = 28 else: size = 40 self.set_title_cover( artwork_cache.get_cover_pixbuf( track.book, self.ui.window.get_scale_factor(), size), size) self.current_remaining = db.get_book_remaining(self.current_book, False) self.current_elapsed = db.get_book_progress(self.current_book, False) self.__update_progress_scale_range() if tools.get_glib_settings().get_boolean("titlebar-remaining-time"): self.progress_scale.set_value(self.current_elapsed / self.ui.speed.get_speed()) else: self.progress_scale.set_value(0) self.update_ui_time(None) self.current_label.set_visible(True) self.remaining_label.set_visible(True)
def __init__(self, ui): self.ui = ui builder = ui.window_builder self.name_label = builder.get_object("info_book_label") self.author_label = builder.get_object("info_author_label") self.published_label = builder.get_object("info_published_label") self.last_played_label = builder.get_object("info_last_played_label") self.total_label = builder.get_object("info_total_label") self.remaining_label = builder.get_object("info_remaining_label") self.progress_bar = builder.get_object("book_progress_bar") self.cover_img = builder.get_object("info_cover_image") self.track_list_container = builder.get_object("track_list_container") self.published_text = builder.get_object("info_published_text") self.remaining_text = builder.get_object("info_remaining_text") self.play_book_button = builder.get_object("play_book_button") self.play_book_button.connect("clicked", self.__on_play_clicked) self.play_img = builder.get_object("play_img1") self.pause_img = builder.get_object("pause_img1") self.scroller = builder.get_object("book_overview_scroller") if not tools.is_elementary(): self.scroller.props.propagate_natural_height = True self.ui.speed.add_listener(self.__ui_changed) player.add_player_listener(self.__player_changed)
def startup(self): self.is_elementary = is_elementary() self.__init_resources() self.__init_css() self.__init_actions() self.__init_search()
def __init_window(self): """ Add fields for all ui objects we need to access from code. Initialize everything we can't do from glade like events and other stuff. """ log.info("Initialize main window") self.window: Gtk.Window = self.window_builder.get_object("app_window") self.window.set_default_size(1100, 700) self.window.set_application(self.app) self.window.show_all() self.window.present() self.window.connect("delete-event", self.on_close) self.window.connect("drag_data_received", self.__on_drag_data_received) self.window.drag_dest_set( Gtk.DestDefaults.MOTION | Gtk.DestDefaults.HIGHLIGHT | Gtk.DestDefaults.DROP, [Gtk.TargetEntry.new("text/uri-list", 0, 80)], Gdk.DragAction.COPY) self.window.title = "Cozy" # resizing the progress bar for older gtk versions if not Gtk.get_minor_version() > 18: self.window.connect("check-resize", self.__window_resized) self.author_box = self.window_builder.get_object("author_box") self.reader_box = self.window_builder.get_object("reader_box") self.book_box = self.window_builder.get_object("book_box") self.book_scroller = self.window_builder.get_object("book_scroller") self.sort_stack = self.window_builder.get_object("sort_stack") self.sort_stack.connect("notify::visible-child", self.__on_sort_stack_changed) self.sort_box = self.window_builder.get_object("sort_box") self.import_box = self.window_builder.get_object("import_box") self.position_box = self.window_builder.get_object("position_box") self.main_stack = self.window_builder.get_object("main_stack") self.toolbar_revealer = self.window_builder.get_object( "toolbar_revealer") self.back_button = self.window_builder.get_object("back_button") self.back_button.connect("clicked", self.__on_back_clicked) self.category_toolbar = self.window_builder.get_object( "category_toolbar") self.sort_stack_revealer = self.window_builder.get_object( "sort_stack_revealer") # This fixes a bug where otherwise expand is # somehow set to true internally # but is still showing false in the inspector self.sort_stack_revealer.props.expand = True self.sort_stack_revealer.props.expand = False self.sort_stack_switcher = self.window_builder.get_object( "sort_stack_switcher") self.no_media_file_chooser = self.window_builder.get_object( "no_media_file_chooser") self.no_media_file_chooser.connect("file-set", self.__on_no_media_folder_changed) self.external_switch = self.window_builder.get_object( "external_switch") self.auto_scan_switch = self.window_builder.get_object( "auto_scan_switch") # some visual stuff self.category_toolbar_separator = self.window_builder.get_object( "category_toolbar_separator") if tools.is_elementary(): self.category_toolbar.set_visible(False) # get about dialog self.about_dialog = self.about_builder.get_object("about_dialog") self.about_dialog.set_transient_for(self.window) self.about_dialog.connect("delete-event", self.hide_window) self.about_dialog.set_version(self.version) # shortcuts self.accel = Gtk.AccelGroup() # sorting and filtering self.author_box.connect("row-selected", self.__on_listbox_changed) self.reader_box.connect("row-selected", self.__on_listbox_changed) self.book_box.set_sort_func(self.__sort_books, None, False) self.book_box.set_filter_func(self.__filter_books, None, False) try: about_close_button = self.about_builder.get_object( "button_box").get_children()[2] if about_close_button: about_close_button.connect("clicked", self.__about_close_clicked) except Exception as e: log.info("Not connecting about close button.") player.add_player_listener(self.__player_changed)