Example #1
0
    def __init__(self, controller, builder, collection):
        """
            Initializes the main window

            @param controller: the main gui controller
        """
        GObject.GObject.__init__(self)

        self.controller = controller
        self.collection = collection
        self.playlist_manager = controller.exaile.playlists
        self.current_page = -1
        self._fullscreen = False
        self.resuming = False

        self.window_state = 0
        self.minimized = False

        self.builder = builder

        self.window = self.builder.get_object('ExaileWindow')
        self.window.set_title('Exaile')
        self.title_formatter = formatter.TrackFormatter(
            settings.get_option('gui/main_window_title_format',
                                _('$title (by $artist)') + ' - Exaile'))

        self.accel_group = Gtk.AccelGroup()
        self.window.add_accel_group(self.accel_group)
        self.accel_manager = AcceleratorManager('mainwindow-accelerators',
                                                self.accel_group)
        self.menubar = self.builder.get_object("mainmenu")

        fileitem = self.builder.get_object("file_menu_item")
        filemenu = menu.ProviderMenu('menubar-file-menu', self)
        fileitem.set_submenu(filemenu)

        edititem = self.builder.get_object("edit_menu_item")
        editmenu = menu.ProviderMenu('menubar-edit-menu', self)
        edititem.set_submenu(editmenu)

        viewitem = self.builder.get_object("view_menu_item")
        viewmenu = menu.ProviderMenu('menubar-view-menu', self)
        viewitem.set_submenu(viewmenu)

        toolsitem = self.builder.get_object("tools_menu_item")
        toolsmenu = menu.ProviderMenu('menubar-tools-menu', self)
        toolsitem.set_submenu(toolsmenu)

        helpitem = self.builder.get_object("help_menu_item")
        helpmenu = menu.ProviderMenu('menubar-help-menu', self)
        helpitem.set_submenu(helpmenu)

        self._setup_widgets()
        self._setup_position()
        self._setup_hotkeys()
        logger.info("Connecting main window events...")
        self._connect_events()
        MainWindow._mainwindow = self

        mainmenu._create_menus()
Example #2
0
    def __init__(self, exaile, gui):
        notebook.SmartNotebook.__init__(self, vertical=True)

        self.exaile = exaile
        self.panels = {}  # key: name, value: PanelData object

        self.set_add_tab_on_empty(False)

        self.loading_panels = True

        self.connect('page-removed', self.on_panel_removed)
        self.connect('page-reordered', self.on_panel_reordered)
        self.connect('switch-page', self.on_panel_switch)

        _register_builtin_panels(exaile, gui.main.window)

        self.view_menu = menu.ProviderMenu('panel-tab-context', None)

        # setup/register the view menu
        menu.simple_menu_item('panel-menu', ['show-playing-track'], _('P_anels'),
                              submenu=self.view_menu) \
            .register('menubar-view-menu')

        providers.ProviderHandler.__init__(self,
                                           'main-panel',
                                           simple_init=True)

        # Provide interface for adding buttons to the notebook
        self.actions = notebook.NotebookActionService(self,
                                                      'main-panel-actions')

        if not self.exaile.loading:
            self.on_gui_loaded()
Example #3
0
def __create_view_menu():
    items = []
    accelerators = []

    def show_playing_track_cb(*args):
        get_main().playlist_container.show_current_track()

    def show_playing_track_sensitive():
        from xl import player
        return player.PLAYER.get_state() != 'stopped'

    accelerators.append(
        Accelerator('<Primary>j', _("_Show Playing Track"),
                    show_playing_track_cb))
    items.append(
        _smi('show-playing-track', [],
             icon_name='go-jump',
             callback=accelerators[-1],
             sensitive_cb=show_playing_track_sensitive))

    items.append(_sep('show-playing-track-sep', [items[-1].name]))

    def playlist_utilities_cb(widget, name, parent, context):
        settings.set_option('gui/playlist_utilities_bar_visible',
                            widget.get_active())

    def playlist_utilities_is_checked(name, parent, context):
        return settings.get_option('gui/playlist_utilities_bar_visible', True)

    items.append(
        menu.check_menu_item('playlist-utilities', [items[-1].name],
                             _("_Playlist Utilities Bar"),
                             playlist_utilities_is_checked,
                             playlist_utilities_cb))

    items.append(
        _smi('columns', [items[-1].name],
             _('C_olumns'),
             submenu=menu.ProviderMenu('playlist-columns-menu', get_main())))

    def clear_playlist_cb(*args):
        page = get_main().get_selected_page()
        if page:
            page.playlist.clear()

    accelerators.append(
        Accelerator('<Primary>l', _('_Clear playlist'), clear_playlist_cb))
    items.append(
        _smi('clear-playlist', [items[-1].name],
             icon_name='edit-clear-all',
             callback=accelerators[-1]))

    for item in items:
        providers.register('menubar-view-menu', item)
    for accelerator in accelerators:
        providers.register('mainwindow-accelerators', accelerator)
Example #4
0
 def __init__(self, child=None, page_name=None):
     Gtk.Box.__init__(self, orientation=Gtk.Orientation.VERTICAL)
     self.tab = None
     self.tab_menu = menu.ProviderMenu(self.menu_provider_name, self)
     
     if child is not None:
         self.pack_start(child, True, True, 0)
         
     if page_name is not None:
         self.page_name = page_name
Example #5
0
    def __init__(self, child=None, page_name=None):
        gtk.VBox.__init__(self)
        self.tab = None
        self.tab_menu = menu.ProviderMenu(self.menu_provider_name, self)

        if child is not None:
            self.pack_start(child, True, True)

        if page_name is not None:
            self.page_name = page_name
Example #6
0
    def __init__(self, main):
        self.main = main
        self.VOLUME_STEP = 0.05

        self.tooltip = TrackToolTip(self, player.PLAYER)
        self.tooltip.set_auto_update(True)
        self.tooltip.set_display_progress(True)

        self.menu = menu.ProviderMenu('tray-icon-context', self)
        self.update_icon()
        self.connect_events()
        event.log_event('tray_icon_toggled', self, True)
Example #7
0
def __create_view_menu():
    items = []
    accelerators = []

    def show_playing_track_cb(*args):
        get_main().playlist_container.show_current_track()

    items.append(
        menuitems.ShowCurrentTrackMenuItem('show-playing-track', [],
                                           show_playing_track_cb,
                                           accelerator='<Control>j'))
    accelerators.append(Accelerator('<Control>j', show_playing_track_cb))

    items.append(_sep('show-playing-track-sep', [items[-1].name]))

    def playlist_utilities_cb(widget, name, parent, context):
        settings.set_option('gui/playlist_utilities_bar_visible',
                            widget.get_active())

    def playlist_utilities_is_checked(name, parent, context):
        return settings.get_option('gui/playlist_utilities_bar_visible', True)

    items.append(
        menu.check_menu_item('playlist-utilities', [items[-1].name],
                             _("_Playlist Utilities Bar"),
                             playlist_utilities_is_checked,
                             playlist_utilities_cb))

    items.append(
        _smi('columns', [items[-1].name],
             _('_Columns'),
             submenu=menu.ProviderMenu('playlist-columns-menu', get_main())))

    def clear_playlist_cb(*args):
        page = get_main().get_selected_page()
        if page:
            page.playlist.clear()

    items.append(
        _smi('clear-playlist', [items[-1].name],
             _('C_lear playlist'),
             gtk.STOCK_CLEAR,
             clear_playlist_cb,
             accelerator='<Control>l'))
    accelerators.append(Accelerator('<Control>l', clear_playlist_cb))

    for item in items:
        providers.register('menubar-view-menu', item)
    for accelerator in accelerators:
        providers.register('mainwindow-accelerators', accelerator)
Example #8
0
    def __init__(self, child=None, page_name=None, menu_provider_name=None):
        Gtk.Box.__init__(self, orientation=Gtk.Orientation.VERTICAL)

        # sometimes you just want to create a page
        if menu_provider_name is not None:
            self.menu_provider_name = menu_provider_name

        self.tab = None
        self.tab_menu = menu.ProviderMenu(self.menu_provider_name, self)

        if child is not None:
            self.pack_start(child, True, True, 0)

        if page_name is not None:
            self.page_name = page_name
Example #9
0
    def __init__(self, manager_name, player, hotkey):
        SmartNotebook.__init__(self)

        self.tab_manager = PlaylistManager(manager_name)
        self.manager_name = manager_name
        self.player = player

        # For saving closed tab history
        self._moving_tab = False
        self.tab_history = []
        self.history_counter = 90000  # to get unique (reverse-ordered) item names

        # Build static menu entries
        item = menu.simple_separator('clear-sep', [])
        item.register('playlist-closed-tab-menu', self)

        item = menu.simple_menu_item(
            'clear-history',
            ['clear-sep'],
            _("_Clear Tab History"),
            'edit-clear-all',
            self.clear_closed_tabs,
        )
        item.register('playlist-closed-tab-menu', self)

        # Simple factory for 'Recently Closed Tabs' MenuItem
        submenu = menu.ProviderMenu('playlist-closed-tab-menu', self)

        def factory(menu_, parent, context):
            if self.page_num(parent) == -1:
                return None
            item = Gtk.MenuItem.new_with_mnemonic(_("Recently Closed _Tabs"))
            if len(self.tab_history) > 0:
                item.set_submenu(submenu)
            else:
                item.set_sensitive(False)
            return item

        # Add menu to tab context menu
        item = menu.MenuItem('%s-tab-history' % manager_name, factory, ['tab-close'])
        item.register('playlist-tab-context-menu')

        # Add menu to View menu
        # item = menu.MenuItem('tab-history', factory, ['clear-playlist'])
        # providers.register('menubar-view-menu', item)

        # setup notebook actions
        self.actions = NotebookActionService(self, 'playlist-notebook-actions')

        # Add hotkey
        self.accelerator = Accelerator(
            hotkey, _('Restore closed tab'), lambda *x: self.restore_closed_tab(0)
        )
        providers.register('mainwindow-accelerators', self.accelerator)

        # Load saved tabs
        self.load_saved_tabs()

        self.tab_placement_map = {
            'left': Gtk.PositionType.LEFT,
            'right': Gtk.PositionType.RIGHT,
            'top': Gtk.PositionType.TOP,
            'bottom': Gtk.PositionType.BOTTOM,
        }

        self.connect('page-added', self.on_page_added)
        self.connect('page-removed', self.on_page_removed)

        self.on_option_set('gui_option_set', settings, 'gui/show_tabbar')
        self.on_option_set('gui_option_set', settings, 'gui/tab_placement')
        event.add_ui_callback(self.on_option_set, 'gui_option_set')
Example #10
0
    def __init__(self, notebook, page, vertical=False):
        """
            :param notebook: The notebook this tab will belong to
            :type notebook: SmartNotebook
            :param page: The page this tab will be associated with
            :type page: NotebookPage
            :param vertical: Whether the tab contents are to be laid out vertically
            :type vertical: bool
        """
        Gtk.EventBox.__init__(self)
        self.set_visible_window(False)

        self.closable = True

        self.notebook = notebook
        self.page = page

        self.menu = menu.ProviderMenu(self.menu_provider_name, self)

        self.connect('button-press-event', self.on_button_press)

        if vertical:
            box = Gtk.Box(False, 2, orientation=Gtk.Orientation.VERTICAL)
        else:
            box = Gtk.Box(False, 2)
        self.add(box)

        self.icon = Gtk.Image()
        self.icon.set_no_show_all(True)

        self.label = Gtk.Label(label=self.page.get_page_name())

        if vertical:
            self.label.set_angle(90)
            self.label.props.valign = Gtk.Align.CENTER
            # Don't ellipsize but give a sane maximum length.
            self.label.set_max_width_chars(20)
        else:
            self.label.props.halign = Gtk.Align.CENTER
            self.label.set_ellipsize(Pango.EllipsizeMode.END)
            self.label.set_width_chars(4)  # Minimum, including ellipsis

        self.label.set_tooltip_text(self.page.get_page_name())
        
        if self.can_rename():
            self.entry = Gtk.Entry()
            self.entry.set_width_chars(self.label.get_max_width_chars())
            self.entry.set_text(self.label.get_text())
            border = Gtk.Border.new()
            border.left = 1
            border.right = 1
            self.entry.set_inner_border(border)
            self.entry.connect('activate', self.on_entry_activate)
            self.entry.connect('focus-out-event', self.on_entry_focus_out_event)
            self.entry.connect('key-press-event', self.on_entry_key_press_event)
            self.entry.set_no_show_all(True)
        

        self.button = button = Gtk.Button()
        button.set_relief(Gtk.ReliefStyle.NONE)
        button.set_halign(Gtk.Align.CENTER)
        button.set_valign(Gtk.Align.CENTER)
        button.set_focus_on_click(False)
        button.set_tooltip_text(_("Close Tab"))
        button.add(Gtk.Image.new_from_icon_name('window-close-symbolic', Gtk.IconSize.MENU))
        button.connect('clicked', self.close)
        button.connect('button-press-event', self.on_button_press)
        
        # pack the widgets in
        if vertical:
            box.pack_start(button, False, False, 0)
            box.pack_end(self.icon, False, False, 0)
            box.pack_end(self.label, True, True, 0)
            if self.can_rename():
                box.pack_end(self.entry, True, True, 0)
            
        else:
            box.pack_start(self.icon, False, False, 0)
            box.pack_start(self.label, True, True, 0)
            if self.can_rename():
                box.pack_start(self.entry, True, True, 0)
            box.pack_end(button, False, False, 0)

        page.set_tab(self)
        page.connect('name-changed', self.on_name_changed)
        self.show_all()
Example #11
0
    def __init__(self, notebook, page, display_left=False):
        """
            :param notebook: The notebook this tab will belong to
            :param page: The page this tab will be associated with
        """
        gtk.EventBox.__init__(self)
        self.set_visible_window(False)

        self.closable = True

        self.notebook = notebook
        self.page = page

        self.menu = menu.ProviderMenu(self.menu_provider_name, self)

        self.connect('button-press-event', self.on_button_press)

        if display_left:
            box = gtk.VBox(False, 2)
        else:
            box = gtk.HBox(False, 2)
        self.add(box)

        self.icon = gtk.Image()
        self.icon.set_property("visible", False)

        self.label = gtk.Label(self.page.get_page_name())
        self.label.set_max_width_chars(20)

        if display_left:
            self.label.set_angle(90)
        else:
            self.label.set_ellipsize(pango.ELLIPSIZE_END)

        self.label.set_tooltip_text(self.page.get_page_name())

        if self.can_rename():
            self.entry = gtk.Entry()
            self.entry.set_width_chars(self.label.get_max_width_chars())
            self.entry.set_text(self.label.get_text())
            self.entry.set_inner_border(gtk.Border(left=1, right=1))
            self.entry.connect('activate', self.on_entry_activate)
            self.entry.connect('focus-out-event',
                               self.on_entry_focus_out_event)
            self.entry.connect('key-press-event',
                               self.on_entry_key_press_event)
            self.entry.set_no_show_all(True)

        self.button = button = gtk.Button()
        button.set_name("tabCloseButton")
        button.set_relief(gtk.RELIEF_NONE)
        button.set_focus_on_click(False)
        button.set_tooltip_text(_("Close Tab"))
        button.add(
            gtk.image_new_from_stock(gtk.STOCK_CLOSE, gtk.ICON_SIZE_MENU))
        button.connect('clicked', self.close)
        button.connect('button-press-event', self.on_button_press)

        # pack the widgets in
        if display_left:
            box.pack_start(button, False, False)
            box.pack_end(self.icon, False, False)
            box.pack_end(self.label, False, False)
            if self.can_rename():
                box.pack_end(self.entry, False, False)

        else:
            box.pack_start(self.icon, False, False)
            box.pack_start(self.label, False, False)
            if self.can_rename():
                box.pack_start(self.entry, False, False)
            box.pack_end(button, False, False)

        page.set_tab(self)
        page.connect('name-changed', self.on_name_changed)
        self.show_all()