Source code for fsleyes.splash

#
# splash.py - FSLeyes splash screen.
#
# Author: Paul McCarthy <pauldmccarthy@gmail.com>
#
"""This module provides the :class:`FSLeyesSplash` class, a splash screen for
*FSLeyes*.
"""


import            time
import os.path as op

import wx

import                               fsleyes
import fsleyes_widgets.imagepanel as imagepanel
import fsleyes.strings            as strings


[docs]def getSplashFile(): """Returns the path to the splash screen image file. """ return op.join(fsleyes.assetDir, 'assets', 'icons', 'splash', 'splash.png')
[docs]class FSLeyesSplash(wx.Frame): """A simple splash screen for *FSLeyes*. An image and a status bar are displayed; the status bar can be updated via the :meth:`SetStatus` method. The :class:`.ImagePanel` class is used to display the image. Typical usage would be something like the following:: splash = FSLeyesSplash(None) splash.Show() # Do something, e.g. loading overlays splash.SetStatus('Loading blah.nii.gz ...') # Finished initialising, the application is ready splash.Close() """
[docs] def __init__(self, parent): """Create a ``FSLeyesSplash`` frame. :arg parent: The :mod:`wx` parent object. """ wx.Frame.__init__(self, parent, style=wx.FULL_REPAINT_ON_RESIZE) splashbmp = wx.Bitmap(getSplashFile(), wx.BITMAP_TYPE_PNG) splashimg = splashbmp.ConvertToImage() self.__splashPanel = imagepanel.ImagePanel(self, splashimg) self.__splashPanel.SetMinSize(splashimg.GetSize()) self.__statusBar = wx.StaticText(self, style=wx.ST_ELLIPSIZE_MIDDLE) self.__statusBar.SetLabel(strings.messages[self, 'default']) self.__statusBar.SetBackgroundColour('#000000') self.__statusBar.SetForegroundColour('#ffffff') self .SetBackgroundColour('#000000') self.__sizer = wx.BoxSizer(wx.VERTICAL) self.__sizer.Add(self.__splashPanel, flag=wx.EXPAND, proportion=1) self.__sizer.Add(self.__statusBar, flag=wx.EXPAND) self.SetSizer(self.__sizer) self.Layout() self.Fit()
[docs] def Show(self): """Show this ``FSLeyesSplash`` frame, and centre it on the screen. """ wx.Frame.Show(self) self.CentreOnScreen() self.Refresh() self.Update() # GTK is a piece of shit. Refresh/Update, combined # with a straight call to Yield does not guarantee # that the splash screen will be displayed. It # seems that a short delay is necessary before it # will be drawn, during which time we can't do # anything which would block the application loop. for i in range(10): wx.GetApp().Yield() time.sleep(0.025)
[docs] def SetStatus(self, text): """Sets the text shown on the status bar to the specified ``text``. """ self.__statusBar.SetLabel(text) self.__statusBar.Refresh() self.__statusBar.Update()