mediathek-viewer/src/gtk_mediathek_player/main_window.py
2020-10-23 20:48:43 +02:00

169 lines
4.5 KiB
Python

import gi
from gtk_mediathek_player.tools import new_button_with_icon, new_radio_button_with_icon
gi.require_version("Gtk", "3.0")
from gi.repository import Gtk, GLib
from . import player_widget
from . import search_widget
from . import tools
from . import mediathek_request as mr
class MainApp(Gtk.Window):
def __init__(self):
Gtk.Window.__init__(self, title="Gtk Mediathek Player")
self.set_default_size(800, 600)
self._main_container = Gtk.Overlay()
self._main_stack = Gtk.Stack()
self._fullscreen = False
self._player_widget = self._create_player_widget()
self._search_widget = self._create_search_widget()
self._main_stack.add_named(self._player_widget, "player")
self._main_stack.add_named(self._search_widget, "search")
self._main_stack.show_all()
self._main_container.add(self._main_stack)
self._headerbar = self._create_headerbar(True)
self._create_fullscreen_bar()
#self._main_container.add_overlay(self._create_fullscreen_bar())
self._main_container.add_overlay(self._revealer)
self.add(self._main_container)
self.connect('motion-notify-event', self.on_mouse_move)
self._seconds_after_mouse_move = 0
self.set_active_pane("search")
GLib.timeout_add_seconds(1, self.update)
def on_mouse_move(self, _, __):
self._player_widget.show_controls()
self._seconds_after_mouse_move = 0
if self._fullscreen:
self._revealer.set_reveal_child(True)
def update(self):
if self._seconds_after_mouse_move > 1:
self._revealer.set_reveal_child(False)
self._seconds_after_mouse_move += 1
self._player_widget.update_controls()
return True
def on_search(self, _ = None):
if self.get_active_pane() == "player":
self._player_widget.pause()
self.set_active_pane("search")
def _create_context_switch(self):
self._search_radio = new_button_with_icon("edit-find")
self._search_radio.connect("clicked", self.on_search)
# more to come...
def _create_headerbar(self, main_bar = True):
headerbar = Gtk.HeaderBar()
fullscreen = tools.new_button_with_icon("view-fullscreen")
fullscreen.connect("clicked", self.toggle_fullscreen)
headerbar.pack_end(fullscreen)
if main_bar:
self._create_context_switch()
self._fullscreen_button = fullscreen
headerbar.pack_start(self._search_radio)
headerbar.set_show_close_button(True)
headerbar.props.title = "Main Window"
self.set_titlebar(headerbar)
return headerbar
def _create_fullscreen_bar(self):
self._revealer = Gtk.Revealer()
self._revealer.add(self._create_headerbar(False))
self._revealer.set_valign(Gtk.Align.START)
self._revealer.set_vexpand(False)
self._revealer.set_transition_type(Gtk.RevealerTransitionType.SLIDE_DOWN)
return self._revealer
def _create_player_widget(self):
return player_widget.PlayerWidget()
def _create_search_widget(self):
return search_widget.SearchWidget(self)
def run(self):
self.connect("destroy", Gtk.main_quit)
self.show_all()
Gtk.main()
def set_active_pane(self, name: str):
self._main_stack.set_visible_child_name(name)
if name != "player":
self._fullscreen_button.set_sensitive(False)
else:
self._fullscreen_button.set_sensitive(True)
def get_active_pane(self):
return self._main_stack.get_visible_child_name()
def start_player(self, uri: str):
if self.get_active_pane() != "player":
self.set_active_pane("player")
self._player_widget.stop()
self._player_widget.play_from_uri(uri)
self._player_widget.play()
def go_fullscreen(self):
if self._fullscreen:
return
self._fullscreen = True
self.fullscreen()
self._revealer.set_reveal_child(True)
def go_unfullscreen(self):
if not self._fullscreen:
return
self._fullscreen = False
self.unfullscreen()
self._revealer.set_reveal_child(False)
def toggle_fullscreen(self,_ = None):
if self._fullscreen:
self.go_unfullscreen()
else:
self.go_fullscreen()