def __init__(self, main_controller):
        self.main_controller = main_controller
        main_controller.welcomescreen_controller = self

        self._recent_files = []
        from virtaal.views.welcomescreenview import WelcomeScreenView
        self.view = WelcomeScreenView(self)

        main_controller.store_controller.connect('store-closed',
                                                 self._on_store_closed)
        main_controller.store_controller.connect('store-loaded',
                                                 self._on_store_loaded)
    def __init__(self, main_controller):
        self.main_controller = main_controller
        main_controller.welcomescreen_controller = self

        self._recent_files = []
        self.view = WelcomeScreenView(self)

        main_controller.store_controller.connect('store-closed', self._on_store_closed)
        main_controller.store_controller.connect('store-loaded', self._on_store_loaded)
class WelcomeScreenController(BaseController):
    """
    Contains logic for the welcome screen.
    """

    MAX_RECENT = 5
    """The maximum number of recent items to display."""

    LINKS = {
        'manual':
        _('http://translate.sourceforge.net/wiki/virtaal/using_virtaal'),
        'locguide':
        _('http://translate.sourceforge.net/wiki/guide/start'),
        # FIXME: The URL below should be replaced with a proper feedback URL
        'feedback':
        _("http://translate.sourceforge.net/wiki/virtaal/index#contact"),
        'features_more':
        _('http://translate.sourceforge.net/wiki/virtaal/features')
    }

    # INITIALIZERS #
    def __init__(self, main_controller):
        self.main_controller = main_controller
        main_controller.welcomescreen_controller = self

        self._recent_files = []
        from virtaal.views.welcomescreenview import WelcomeScreenView
        self.view = WelcomeScreenView(self)

        main_controller.store_controller.connect('store-closed',
                                                 self._on_store_closed)
        main_controller.store_controller.connect('store-loaded',
                                                 self._on_store_loaded)

    # METHODS #
    def activate(self):
        """Show the welcome screen and trigger activation logic (ie. find
            recent files)."""
        import gobject
        gobject.idle_add(self.update_recent, priority=gobject.PRIORITY_LOW)
        self.view.show()

    def open_cheatsheat(self):
        from virtaal.support import openmailto
        # FIXME: The URL below is just a temporary solution
        openmailto.open(
            _('http://translate.sourceforge.net/wiki/virtaal/cheatsheet'))

    def open_file(self, filename=None):
        self.main_controller.open_file(filename)

    def open_recent(self, n):
        n -= 1  # Shift from nominal value [1; 5] to index value [0; 4]
        if 0 <= n <= len(self._recent_files) - 1:
            self.open_file(self._recent_files[n]['uri'].decode('utf-8'))
        else:
            import logging
            logging.debug(
                'Invalid recent file index (%d) given. Recent files: %s)' %
                (n, self._recent_files))

    def open_tutorial(self):
        self.main_controller.open_tutorial()

    def try_open_link(self, name):
        if name not in self.LINKS:
            return False
        from virtaal.support import openmailto
        openmailto.open(self.LINKS[name])
        return True

    def update_recent(self):
        from virtaal.views import recent
        self._recent_files = [{
            'name': i.get_display_name(),
            'uri': i.get_uri_display()
        } for i in recent.rc.get_items()[:self.MAX_RECENT]]
        self.view.update_recent_buttons(self._recent_files)

    # EVENT HANDLERS #
    def _on_store_closed(self, store_controller):
        self.activate()

    def _on_store_loaded(self, store_controller):
        self.view.hide()
class WelcomeScreenController(BaseController):
    """
    Contains logic for the welcome screen.
    """

    MAX_RECENT = 5
    """The maximum number of recent items to display."""

    LINKS = {
        'manual':   _('http://translate.sourceforge.net/wiki/virtaal/using_virtaal'),
        'locguide': 'http://translate.sourceforge.net/wiki/guide/start',
        # FIXME: The URL below should be replaced with a proper feedback URL
        'feedback': "http://translate.sourceforge.net/wiki/virtaal/index#contact",
        'features_more': _('http://translate.sourceforge.net/wiki/virtaal/features')
    }

    # INITIALIZERS #
    def __init__(self, main_controller):
        self.main_controller = main_controller
        main_controller.welcomescreen_controller = self

        self._recent_files = []
        self.view = WelcomeScreenView(self)

        main_controller.store_controller.connect('store-closed', self._on_store_closed)
        main_controller.store_controller.connect('store-loaded', self._on_store_loaded)


    # METHODS #
    def activate(self):
        """Show the welcome screen and trigger activation logic (ie. find
            recent files)."""
        self.update_recent()
        self.view.show()

    def open_cheatsheat(self):
        # FIXME: The URL below is just a temporary solution
        openmailto.open('http://translate.sourceforge.net/wiki/virtaal/cheatsheet')

    def open_file(self):
        self.main_controller.open_file()

    def open_recent(self, n):
        n -= 1 # Shift from nominal value [1; 5] to index value [0; 4]
        if 0 <= n <= len(self._recent_files)-1:
            self.main_controller.open_file(self._recent_files[n]['uri'])
        else:
            logging.debug('Invalid recent file index (%d) given. Recent files: %s)' % (n, self._recent_files))

    def open_tutorial(self):
        self.main_controller.open_tutorial()

    def try_open_link(self, name):
        if name not in self.LINKS:
            return False
        openmailto.open(self.LINKS[name])
        return True

    def update_recent(self):
        self._recent_files = [{
                'name': i.get_display_name(),
                'uri':  i.get_uri_display()
            } for i in recent.rc.get_items()[:self.MAX_RECENT]
        ]
        self.view.update_recent_buttons(self._recent_files)


    # EVENT HANDLERS #
    def _on_store_closed(self, store_controller):
        self.activate()

    def _on_store_loaded(self, store_controller):
        self.view.hide()