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()
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()
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)
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
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
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)
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)
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
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')
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()
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()