[#3441|GTKUI] Add a torrentdetails tabs position menu
The tabs placement for the torrentdetails notebook might not be to everyone's liking so add a menu item to configure it. Default the position back to top.
This commit is contained in:
parent
291540b601
commit
1022448e4f
|
@ -1,5 +1,5 @@
|
||||||
<?xml version="1.0" encoding="UTF-8"?>
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
<!-- Generated with glade 3.22.1 -->
|
<!-- Generated with glade 3.22.2 -->
|
||||||
<interface>
|
<interface>
|
||||||
<requires lib="gtk+" version="3.0"/>
|
<requires lib="gtk+" version="3.0"/>
|
||||||
<object class="GtkAdjustment" id="spin_max_connections_adjustment">
|
<object class="GtkAdjustment" id="spin_max_connections_adjustment">
|
||||||
|
@ -38,14 +38,14 @@
|
||||||
</object>
|
</object>
|
||||||
<object class="GtkWindow" id="tabs">
|
<object class="GtkWindow" id="tabs">
|
||||||
<property name="can_focus">False</property>
|
<property name="can_focus">False</property>
|
||||||
<child>
|
<child type="titlebar">
|
||||||
<placeholder/>
|
<placeholder/>
|
||||||
</child>
|
</child>
|
||||||
<child>
|
<child>
|
||||||
<object class="GtkNotebook" id="dummy_nb_see_main_win_torrent_info">
|
<object class="GtkNotebook" id="dummy_nb_see_main_win_torrent_info">
|
||||||
<property name="visible">True</property>
|
<property name="visible">True</property>
|
||||||
<property name="can_focus">True</property>
|
<property name="can_focus">True</property>
|
||||||
<property name="tab_pos">left</property>
|
<property name="enable_popup">True</property>
|
||||||
<child>
|
<child>
|
||||||
<object class="GtkScrolledWindow" id="status_tab">
|
<object class="GtkScrolledWindow" id="status_tab">
|
||||||
<property name="visible">True</property>
|
<property name="visible">True</property>
|
||||||
|
|
|
@ -121,6 +121,7 @@ DEFAULT_PREFS = {
|
||||||
'show_toolbar': True,
|
'show_toolbar': True,
|
||||||
'show_statusbar': True,
|
'show_statusbar': True,
|
||||||
'show_tabsbar': True,
|
'show_tabsbar': True,
|
||||||
|
'tabsbar_tab_pos': 'left',
|
||||||
'tabsbar_position': 235,
|
'tabsbar_position': 235,
|
||||||
'sidebar_show_zero': False,
|
'sidebar_show_zero': False,
|
||||||
'sidebar_show_trackers': True,
|
'sidebar_show_trackers': True,
|
||||||
|
|
|
@ -108,6 +108,7 @@ class MainWindow(component.Component):
|
||||||
self.window = self.main_builder.get_object('main_window')
|
self.window = self.main_builder.get_object('main_window')
|
||||||
self.window.set_icon(get_deluge_icon())
|
self.window.set_icon(get_deluge_icon())
|
||||||
self.tabsbar_pane = self.main_builder.get_object('tabsbar_pane')
|
self.tabsbar_pane = self.main_builder.get_object('tabsbar_pane')
|
||||||
|
self.tabsbar_torrent_info = self.main_builder.get_object('torrent_info')
|
||||||
self.sidebar_pane = self.main_builder.get_object('sidebar_pane')
|
self.sidebar_pane = self.main_builder.get_object('sidebar_pane')
|
||||||
|
|
||||||
# Keep a list of components to pause and resume when changing window state.
|
# Keep a list of components to pause and resume when changing window state.
|
||||||
|
@ -154,6 +155,10 @@ class MainWindow(component.Component):
|
||||||
self.main_builder.prev_connect_signals(self.gtk_builder_signals_holder)
|
self.main_builder.prev_connect_signals(self.gtk_builder_signals_holder)
|
||||||
self.sidebar_pane.set_position(self.config['sidebar_position'])
|
self.sidebar_pane.set_position(self.config['sidebar_position'])
|
||||||
self.tabsbar_pane.set_position(self.config['tabsbar_position'])
|
self.tabsbar_pane.set_position(self.config['tabsbar_position'])
|
||||||
|
tab_pos = self.config['tabsbar_tab_pos']
|
||||||
|
self.tabsbar_torrent_info.set_tab_pos(
|
||||||
|
getattr(Gtk.PositionType, tab_pos.upper())
|
||||||
|
)
|
||||||
|
|
||||||
if not (
|
if not (
|
||||||
self.config['start_in_tray'] and self.config['enable_system_tray']
|
self.config['start_in_tray'] and self.config['enable_system_tray']
|
||||||
|
|
|
@ -14,7 +14,14 @@ from __future__ import unicode_literals
|
||||||
import logging
|
import logging
|
||||||
from collections import namedtuple
|
from collections import namedtuple
|
||||||
|
|
||||||
from gi.repository.Gtk import CheckMenuItem, Menu, SeparatorMenuItem
|
from gi.repository.Gtk import (
|
||||||
|
CheckMenuItem,
|
||||||
|
Menu,
|
||||||
|
MenuItem,
|
||||||
|
PositionType,
|
||||||
|
RadioMenuItem,
|
||||||
|
SeparatorMenuItem,
|
||||||
|
)
|
||||||
|
|
||||||
import deluge.component as component
|
import deluge.component as component
|
||||||
from deluge.ui.client import client
|
from deluge.ui.client import client
|
||||||
|
@ -100,6 +107,7 @@ class TorrentDetails(component.Component):
|
||||||
def __init__(self):
|
def __init__(self):
|
||||||
component.Component.__init__(self, 'TorrentDetails', interval=2)
|
component.Component.__init__(self, 'TorrentDetails', interval=2)
|
||||||
main_builder = component.get('MainWindow').get_builder()
|
main_builder = component.get('MainWindow').get_builder()
|
||||||
|
self.config = component.get('MainWindow').config
|
||||||
|
|
||||||
self.notebook = main_builder.get_object('torrent_info')
|
self.notebook = main_builder.get_object('torrent_info')
|
||||||
|
|
||||||
|
@ -175,7 +183,6 @@ class TorrentDetails(component.Component):
|
||||||
# Generate the checklist menu
|
# Generate the checklist menu
|
||||||
self.generate_menu()
|
self.generate_menu()
|
||||||
|
|
||||||
self.config = component.get('MainWindow').config
|
|
||||||
self.visible(self.config['show_tabsbar'])
|
self.visible(self.config['show_tabsbar'])
|
||||||
|
|
||||||
def tab_insert_position(self, weight):
|
def tab_insert_position(self, weight):
|
||||||
|
@ -314,9 +321,24 @@ class TorrentDetails(component.Component):
|
||||||
self.generate_menu()
|
self.generate_menu()
|
||||||
self.visible(True)
|
self.visible(True)
|
||||||
|
|
||||||
|
def create_tab_pos_menuitem(self):
|
||||||
|
"""Returns a menu to select which side of the notebook the tabs should be shown"""
|
||||||
|
tab_pos_menu = Menu()
|
||||||
|
tab_pos_menuitem = MenuItem(_('Position'))
|
||||||
|
group = []
|
||||||
|
for pos in ('top', 'right', 'bottom', 'left'):
|
||||||
|
menuitem = RadioMenuItem.new_with_mnemonic(group, _(pos.capitalize()))
|
||||||
|
group = menuitem.get_group()
|
||||||
|
menuitem.connect('toggled', self._on_tabs_pos_toggled, pos)
|
||||||
|
menuitem.set_active(pos == self.notebook.get_tab_pos().value_nick)
|
||||||
|
tab_pos_menu.append(menuitem)
|
||||||
|
tab_pos_menuitem.set_submenu(tab_pos_menu)
|
||||||
|
return tab_pos_menuitem
|
||||||
|
|
||||||
def generate_menu(self):
|
def generate_menu(self):
|
||||||
"""Generates the checklist menu for all the tabs and attaches it"""
|
"""Generates the checklist menu for all the tabs and attaches it"""
|
||||||
menu = Menu()
|
menu = Menu()
|
||||||
|
|
||||||
# Create 'All' menuitem and a separator
|
# Create 'All' menuitem and a separator
|
||||||
menuitem = CheckMenuItem.new_with_mnemonic(self.translate_tabs['All'])
|
menuitem = CheckMenuItem.new_with_mnemonic(self.translate_tabs['All'])
|
||||||
menuitem.set_name('All')
|
menuitem.set_name('All')
|
||||||
|
@ -347,6 +369,9 @@ class TorrentDetails(component.Component):
|
||||||
menuitem.connect('toggled', self._on_menuitem_toggled)
|
menuitem.connect('toggled', self._on_menuitem_toggled)
|
||||||
menu.append(menuitem)
|
menu.append(menuitem)
|
||||||
|
|
||||||
|
menu.append(SeparatorMenuItem())
|
||||||
|
menu.append(self.create_tab_pos_menuitem())
|
||||||
|
|
||||||
self.menu_tabs.set_submenu(menu)
|
self.menu_tabs.set_submenu(menu)
|
||||||
self.menu_tabs.show_all()
|
self.menu_tabs.show_all()
|
||||||
|
|
||||||
|
@ -440,6 +465,10 @@ class TorrentDetails(component.Component):
|
||||||
|
|
||||||
self.set_tab_visible(name, widget.get_active())
|
self.set_tab_visible(name, widget.get_active())
|
||||||
|
|
||||||
|
def _on_tabs_pos_toggled(self, widget, position):
|
||||||
|
self.config['tabsbar_tab_pos'] = position
|
||||||
|
self.notebook.set_tab_pos(getattr(PositionType, position.upper()))
|
||||||
|
|
||||||
def save_state(self):
|
def save_state(self):
|
||||||
"""We save the state, which is basically the tab_index list"""
|
"""We save the state, which is basically the tab_index list"""
|
||||||
# Update the visiblity status of all tabs
|
# Update the visiblity status of all tabs
|
||||||
|
|
Loading…
Reference in New Issue