Fullscreen handling implemented
This commit is contained in:
parent
b8769ff0b7
commit
4fafdd9eb1
2 changed files with 70 additions and 21 deletions
2
mcg.py
2
mcg.py
|
@ -174,8 +174,6 @@ class MCGClient:
|
||||||
# TODO Verbindung testen
|
# TODO Verbindung testen
|
||||||
self._connected = True
|
self._connected = True
|
||||||
self._callback(self.SIGNAL_CONNECT, self._connected, None)
|
self._callback(self.SIGNAL_CONNECT, self._connected, None)
|
||||||
self.update()
|
|
||||||
self.get_status()
|
|
||||||
except IOError as e:
|
except IOError as e:
|
||||||
self._connected = False
|
self._connected = False
|
||||||
self._callback(self.SIGNAL_CONNECT, self._connected, e)
|
self._callback(self.SIGNAL_CONNECT, self._connected, e)
|
||||||
|
|
89
mcgGtk.py
89
mcgGtk.py
|
@ -16,6 +16,7 @@ class MCGGtk(Gtk.Window):
|
||||||
self._mcg = mcg.MCGClient()
|
self._mcg = mcg.MCGClient()
|
||||||
self._config = Configuration()
|
self._config = Configuration()
|
||||||
self._maximized = False
|
self._maximized = False
|
||||||
|
self._fullscreened = False
|
||||||
self._quit = False
|
self._quit = False
|
||||||
|
|
||||||
# Box
|
# Box
|
||||||
|
@ -31,10 +32,11 @@ class MCGGtk(Gtk.Window):
|
||||||
self._cover_panel = CoverPanel(self._config)
|
self._cover_panel = CoverPanel(self._config)
|
||||||
|
|
||||||
# Signals
|
# Signals
|
||||||
self.connect('focus', self.focus)
|
self.connect('focus', self.focus_cb)
|
||||||
self.connect('size-allocate', self.save_size)
|
self.connect('key-press-event', self.key_press_cb)
|
||||||
self.connect('window-state-event', self.save_state)
|
self.connect('size-allocate', self.resize_cb)
|
||||||
self.connect('delete-event', self.destroy)
|
self.connect('window-state-event', self.state_cb)
|
||||||
|
self.connect('delete-event', self.destroy_cb)
|
||||||
self._toolbar.connect_signal(Toolbar.SIGNAL_CONNECT, self.toolbar_connect_cb)
|
self._toolbar.connect_signal(Toolbar.SIGNAL_CONNECT, self.toolbar_connect_cb)
|
||||||
self._toolbar.connect_signal(Toolbar.SIGNAL_UPDATE, self.toolbar_update_cb)
|
self._toolbar.connect_signal(Toolbar.SIGNAL_UPDATE, self.toolbar_update_cb)
|
||||||
self._toolbar.connect_signal(Toolbar.SIGNAL_PLAYPAUSE, self.toolbar_playpause_cb)
|
self._toolbar.connect_signal(Toolbar.SIGNAL_PLAYPAUSE, self.toolbar_playpause_cb)
|
||||||
|
@ -43,32 +45,38 @@ class MCGGtk(Gtk.Window):
|
||||||
self._cover_panel.connect_signal(CoverPanel.SIGNAL_PLAY, self.cover_panel_play_cb)
|
self._cover_panel.connect_signal(CoverPanel.SIGNAL_PLAY, self.cover_panel_play_cb)
|
||||||
self._cover_panel.connect_signal(CoverPanel.SIGNAL_UPDATE_START, self.cover_panel_update_start_cb)
|
self._cover_panel.connect_signal(CoverPanel.SIGNAL_UPDATE_START, self.cover_panel_update_start_cb)
|
||||||
self._cover_panel.connect_signal(CoverPanel.SIGNAL_UPDATE_END, self.cover_panel_update_end_cb)
|
self._cover_panel.connect_signal(CoverPanel.SIGNAL_UPDATE_END, self.cover_panel_update_end_cb)
|
||||||
|
self._cover_panel.connect_signal(CoverPanel.SIGNAL_TOGGLE_FULLSCREEN, self.cover_panel_toggle_fullscreen_cb)
|
||||||
self._mcg.connect_signal(mcg.MCGClient.SIGNAL_CONNECT, self.mcg_connect_cb)
|
self._mcg.connect_signal(mcg.MCGClient.SIGNAL_CONNECT, self.mcg_connect_cb)
|
||||||
self._mcg.connect_signal(mcg.MCGClient.SIGNAL_STATUS, self.mcg_status_cb)
|
self._mcg.connect_signal(mcg.MCGClient.SIGNAL_STATUS, self.mcg_status_cb)
|
||||||
self._mcg.connect_signal(mcg.MCGClient.SIGNAL_UPDATE, self.mcg_update_cb)
|
self._mcg.connect_signal(mcg.MCGClient.SIGNAL_UPDATE, self.mcg_update_cb)
|
||||||
|
|
||||||
self.set_hide_titlebar_when_maximized(True)
|
self.set_hide_titlebar_when_maximized(True)
|
||||||
self.resize_to_geometry(self._config.window_width, self._config.window_height)
|
self.resize(self._config.window_width, self._config.window_height)
|
||||||
if self._config.window_maximized:
|
if self._config.window_maximized:
|
||||||
self.maximize()
|
self.maximize()
|
||||||
|
|
||||||
|
|
||||||
def focus(self, widget, state):
|
def focus_cb(self, widget, state):
|
||||||
self._connect()
|
self._connect()
|
||||||
|
|
||||||
|
|
||||||
def save_size(self, widget, state):
|
def resize_cb(self, widget, event):
|
||||||
if not self._maximized:
|
self._save_size()
|
||||||
self._config.window_width = self.get_allocation().width
|
|
||||||
self._config.window_height = self.get_allocation().height
|
|
||||||
|
|
||||||
|
|
||||||
def save_state(self, widget, event):
|
def key_press_cb(self, widget, event):
|
||||||
self._config.window_maximized = (event.new_window_state & Gdk.WindowState.MAXIMIZED > 0)
|
if (event.state & Gdk.ModifierType.MOD1_MASK and event.keyval == Gdk.KEY_Return) or (
|
||||||
self._maximized = (event.new_window_state & Gdk.WindowState.MAXIMIZED > 0)
|
self._fullscreened and event.type == Gdk.EventType.KEY_PRESS and event.keyval == Gdk.KEY_Escape):
|
||||||
|
self._toggle_fullscreen()
|
||||||
|
|
||||||
|
|
||||||
def destroy(self, widget, state):
|
def state_cb(self, widget, state):
|
||||||
|
self._fullscreened = (state.new_window_state & Gdk.WindowState.FULLSCREEN > 0)
|
||||||
|
self._update_fullscreen()
|
||||||
|
self._save_state(state)
|
||||||
|
|
||||||
|
|
||||||
|
def destroy_cb(self, widget, state):
|
||||||
self._mcg.close()
|
self._mcg.close()
|
||||||
self._config.save()
|
self._config.save()
|
||||||
GObject.idle_add(Gtk.main_quit)
|
GObject.idle_add(Gtk.main_quit)
|
||||||
|
@ -111,11 +119,18 @@ class MCGGtk(Gtk.Window):
|
||||||
GObject.idle_add(self._toolbar.unlock)
|
GObject.idle_add(self._toolbar.unlock)
|
||||||
|
|
||||||
|
|
||||||
|
def cover_panel_toggle_fullscreen_cb(self, event):
|
||||||
|
if event.type == Gdk.EventType._2BUTTON_PRESS:
|
||||||
|
self._toggle_fullscreen()
|
||||||
|
|
||||||
|
|
||||||
# MCG callbacks
|
# MCG callbacks
|
||||||
|
|
||||||
def mcg_connect_cb(self, connected, message):
|
def mcg_connect_cb(self, connected, message):
|
||||||
if connected:
|
if connected:
|
||||||
GObject.idle_add(self._connect_connected)
|
GObject.idle_add(self._connect_connected)
|
||||||
|
self._mcg.update()
|
||||||
|
self._mcg.get_status()
|
||||||
else:
|
else:
|
||||||
GObject.idle_add(self._connect_disconnected)
|
GObject.idle_add(self._connect_disconnected)
|
||||||
|
|
||||||
|
@ -162,6 +177,31 @@ class MCGGtk(Gtk.Window):
|
||||||
self._toolbar.disconnected()
|
self._toolbar.disconnected()
|
||||||
|
|
||||||
|
|
||||||
|
def _save_size(self):
|
||||||
|
if not self._maximized:
|
||||||
|
self._config.window_width = self.get_allocation().width
|
||||||
|
self._config.window_height = self.get_allocation().height
|
||||||
|
|
||||||
|
|
||||||
|
def _save_state(self, state):
|
||||||
|
self._config.window_maximized = (state.new_window_state & Gdk.WindowState.MAXIMIZED > 0)
|
||||||
|
self._maximized = (state.new_window_state & Gdk.WindowState.MAXIMIZED > 0)
|
||||||
|
|
||||||
|
|
||||||
|
def _toggle_fullscreen(self):
|
||||||
|
if not self._fullscreened:
|
||||||
|
self.fullscreen()
|
||||||
|
else:
|
||||||
|
self.unfullscreen()
|
||||||
|
|
||||||
|
|
||||||
|
def _update_fullscreen(self):
|
||||||
|
if self._fullscreened:
|
||||||
|
self._toolbar.hide()
|
||||||
|
else:
|
||||||
|
self._toolbar.show()
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
class Toolbar(Gtk.Toolbar):
|
class Toolbar(Gtk.Toolbar):
|
||||||
|
@ -357,6 +397,7 @@ class CoverPanel(Gtk.HPaned):
|
||||||
SIGNAL_UPDATE_START = 'update-start'
|
SIGNAL_UPDATE_START = 'update-start'
|
||||||
SIGNAL_UPDATE_END = 'update-end'
|
SIGNAL_UPDATE_END = 'update-end'
|
||||||
SIGNAL_PLAY = 'play'
|
SIGNAL_PLAY = 'play'
|
||||||
|
SIGNAL_TOGGLE_FULLSCREEN = 'toggle-fullscreen'
|
||||||
_default_cover_size = 128
|
_default_cover_size = 128
|
||||||
|
|
||||||
|
|
||||||
|
@ -365,15 +406,20 @@ class CoverPanel(Gtk.HPaned):
|
||||||
self._config = config
|
self._config = config
|
||||||
self._callbacks = {}
|
self._callbacks = {}
|
||||||
self._albums = []
|
self._albums = []
|
||||||
|
self._cover_pixbuf = None
|
||||||
self._filter_string = ""
|
self._filter_string = ""
|
||||||
|
self._is_fullscreen = False
|
||||||
|
|
||||||
# Image
|
# Image
|
||||||
self._cover_pixbuf = None
|
|
||||||
self._cover_image = Gtk.Image()
|
self._cover_image = Gtk.Image()
|
||||||
# EventBox
|
# EventBox
|
||||||
self._cover_box = Gtk.EventBox()
|
self._cover_box = Gtk.EventBox()
|
||||||
self._cover_box.add(self._cover_image)
|
self._cover_box.add(self._cover_image)
|
||||||
self.pack1(self._cover_box, resize=True)
|
# Scroll
|
||||||
|
self._cover_scroll = Gtk.ScrolledWindow()
|
||||||
|
self._cover_scroll.add_with_viewport(self._cover_box)
|
||||||
|
self._cover_scroll.set_policy(Gtk.PolicyType.NEVER, Gtk.PolicyType.NEVER)
|
||||||
|
self.pack1(self._cover_scroll, True, True)
|
||||||
# GridModel
|
# GridModel
|
||||||
self._cover_grid_model = Gtk.ListStore(GdkPixbuf.Pixbuf, str, str, str)
|
self._cover_grid_model = Gtk.ListStore(GdkPixbuf.Pixbuf, str, str, str)
|
||||||
self._cover_grid_filter = self._cover_grid_model.filter_new()
|
self._cover_grid_filter = self._cover_grid_model.filter_new()
|
||||||
|
@ -394,7 +440,7 @@ class CoverPanel(Gtk.HPaned):
|
||||||
self._cover_grid_scroll = Gtk.ScrolledWindow()
|
self._cover_grid_scroll = Gtk.ScrolledWindow()
|
||||||
self._cover_grid_scroll.set_policy(Gtk.PolicyType.NEVER, Gtk.PolicyType.AUTOMATIC)
|
self._cover_grid_scroll.set_policy(Gtk.PolicyType.NEVER, Gtk.PolicyType.AUTOMATIC)
|
||||||
self._cover_grid_scroll.add(self._cover_grid)
|
self._cover_grid_scroll.add(self._cover_grid)
|
||||||
self.pack2(self._cover_grid_scroll, resize=False)
|
self.pack2(self._cover_grid_scroll, False, True)
|
||||||
# Progress Bar
|
# Progress Bar
|
||||||
self._progress_box = Gtk.VBox()
|
self._progress_box = Gtk.VBox()
|
||||||
self._progress_bar = Gtk.ProgressBar()
|
self._progress_bar = Gtk.ProgressBar()
|
||||||
|
@ -402,8 +448,9 @@ class CoverPanel(Gtk.HPaned):
|
||||||
|
|
||||||
# Signals
|
# Signals
|
||||||
self.connect('size-allocate', self.resize_pane_callback)
|
self.connect('size-allocate', self.resize_pane_callback)
|
||||||
self._cover_image.connect('size-allocate', self.resize_image_callback)
|
self._cover_scroll.connect('size-allocate', self.resize_image_callback)
|
||||||
self._cover_grid.connect('item-activated', self.click_grid_callback)
|
self._cover_grid.connect('item-activated', self.click_grid_callback)
|
||||||
|
self._cover_box.connect('button-press-event', self.toggle_fullscreen_cb)
|
||||||
|
|
||||||
self.set_position(self._config.pane_position)
|
self.set_position(self._config.pane_position)
|
||||||
|
|
||||||
|
@ -484,7 +531,7 @@ class CoverPanel(Gtk.HPaned):
|
||||||
auf die Größe des Fensters unter Beibehalt der Seitenverhältnisse
|
auf die Größe des Fensters unter Beibehalt der Seitenverhältnisse
|
||||||
"""
|
"""
|
||||||
pixbuf = self._cover_pixbuf
|
pixbuf = self._cover_pixbuf
|
||||||
size = self._cover_image.get_allocation()
|
size = self._cover_scroll.get_allocation()
|
||||||
## Check pixelbuffer
|
## Check pixelbuffer
|
||||||
if pixbuf is None:
|
if pixbuf is None:
|
||||||
return
|
return
|
||||||
|
@ -518,6 +565,10 @@ class CoverPanel(Gtk.HPaned):
|
||||||
return album.filter(self._filter_string)
|
return album.filter(self._filter_string)
|
||||||
|
|
||||||
|
|
||||||
|
def toggle_fullscreen_cb(self, widget, event):
|
||||||
|
self._callback(self.SIGNAL_TOGGLE_FULLSCREEN, event)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
import os
|
import os
|
||||||
|
|
Loading…
Reference in a new issue