PICARD-2576: Moved toolbar customization to separate options page

This removes complexity from the general "User Interface" page and allows the options dialog to be resized to a smaller height, while still allow comfortable toolbar customization. This makes the options usable again on screens with only 768px height available.
This commit is contained in:
Philipp Wolfer
2022-12-05 08:52:32 +01:00
parent 6818cab7ac
commit b5046fe08c
7 changed files with 522 additions and 385 deletions

View File

@@ -65,6 +65,7 @@ from picard.ui.options import ( # noqa: F401 # pylint: disable=unused-import
genres,
interface,
interface_colors,
interface_toolbar,
interface_top_tags,
maintenance,
matching,

View File

@@ -39,19 +39,13 @@ from PyQt5.QtCore import QStandardPaths
from picard.config import (
BoolOption,
ListOption,
TextOption,
get_config,
)
from picard.const import UI_LANGUAGES
from picard.const.sys import IS_MACOS
from picard.util import (
icontheme,
strxfrm,
)
from picard.util import strxfrm
from picard.ui import PicardDialog
from picard.ui.moveable_list_view import MoveableListView
from picard.ui.options import (
OptionsPage,
register_options_page,
@@ -75,66 +69,7 @@ class InterfaceOptionsPage(OptionsPage):
SORT_ORDER = 80
ACTIVE = True
HELP_URL = '/config/options_interface.html'
SEPARATOR = '' * 5
TOOLBAR_BUTTONS = {
'add_directory_action': {
'label': N_('Add Folder'),
'icon': 'folder'
},
'add_files_action': {
'label': N_('Add Files'),
'icon': 'document-open'
},
'cluster_action': {
'label': N_('Cluster'),
'icon': 'picard-cluster'
},
'autotag_action': {
'label': N_('Lookup'),
'icon': 'picard-auto-tag'
},
'analyze_action': {
'label': N_('Scan'),
'icon': 'picard-analyze'
},
'browser_lookup_action': {
'label': N_('Lookup in Browser'),
'icon': 'lookup-musicbrainz'
},
'save_action': {
'label': N_('Save'),
'icon': 'document-save'
},
'view_info_action': {
'label': N_('Info'),
'icon': 'picard-edit-tags'
},
'remove_action': {
'label': N_('Remove'),
'icon': 'list-remove'
},
'submit_acoustid_action': {
'label': N_('Submit AcoustIDs'),
'icon': 'acoustid-fingerprinter'
},
'generate_fingerprints_action': {
'label': N_("Generate Fingerprints"),
'icon': 'fingerprint'
},
'play_file_action': {
'label': N_('Open in Player'),
'icon': 'play-music'
},
'cd_lookup_action': {
'label': N_('Lookup CD...'),
'icon': 'media-optical'
},
'tags_from_filenames_action': {
'label': N_('Parse File Names...'),
'icon': 'picard-tags-from-filename'
},
}
ACTION_NAMES = set(TOOLBAR_BUTTONS.keys())
options = [
BoolOption("setting", "toolbar_show_labels", True),
BoolOption("setting", "toolbar_multiselect", False),
@@ -148,24 +83,6 @@ class InterfaceOptionsPage(OptionsPage):
BoolOption("setting", "starting_directory", False),
TextOption("setting", "starting_directory_path", _default_starting_dir),
TextOption("setting", "load_image_behavior", "append"),
ListOption("setting", "toolbar_layout", [
'add_directory_action',
'add_files_action',
'separator',
'cluster_action',
'separator',
'autotag_action',
'analyze_action',
'browser_lookup_action',
'separator',
'save_action',
'view_info_action',
'remove_action',
'separator',
'cd_lookup_action',
'separator',
'submit_acoustid_action',
]),
]
# Those are labels for theme display
@@ -220,12 +137,6 @@ class InterfaceOptionsPage(OptionsPage):
self.ui.starting_directory_browse.setEnabled
)
self.ui.starting_directory_browse.clicked.connect(self.starting_directory_browse)
self.ui.add_button.clicked.connect(self.add_to_toolbar)
self.ui.insert_separator_button.clicked.connect(self.insert_separator)
self.ui.remove_button.clicked.connect(self.remove_action)
self.move_view = MoveableListView(self.ui.toolbar_layout_list, self.ui.up_button,
self.ui.down_button, self.update_action_buttons)
self.update_buttons = self.move_view.update_buttons
if not OS_SUPPORTS_THEMES:
self.ui.ui_theme_container.hide()
@@ -243,11 +154,8 @@ class InterfaceOptionsPage(OptionsPage):
self.ui.filebrowser_horizontal_autoscroll.setChecked(config.setting["filebrowser_horizontal_autoscroll"])
self.ui.starting_directory.setChecked(config.setting["starting_directory"])
self.ui.starting_directory_path.setText(config.setting["starting_directory_path"])
self.populate_action_list()
self.ui.toolbar_layout_list.setCurrentRow(0)
current_theme = UiTheme(config.setting["ui_theme"])
self.ui.ui_theme.setCurrentIndex(self.ui.ui_theme.findData(current_theme))
self.update_buttons()
def save(self):
config = get_config()
@@ -286,11 +194,6 @@ class InterfaceOptionsPage(OptionsPage):
config.setting["filebrowser_horizontal_autoscroll"] = self.ui.filebrowser_horizontal_autoscroll.isChecked()
config.setting["starting_directory"] = self.ui.starting_directory.isChecked()
config.setting["starting_directory_path"] = os.path.normpath(self.ui.starting_directory_path.text())
self.update_layout_config()
def restore_defaults(self):
super().restore_defaults()
self.update_buttons()
def starting_directory_browse(self):
item = self.ui.starting_directory_path
@@ -299,116 +202,5 @@ class InterfaceOptionsPage(OptionsPage):
path = os.path.normpath(path)
item.setText(path)
def _get_icon_from_name(self, name):
return self.TOOLBAR_BUTTONS[name]['icon']
def _insert_item(self, action, index=None):
list_item = ToolbarListItem(action)
list_item.setToolTip(_('Drag and Drop to re-order'))
if action in self.TOOLBAR_BUTTONS:
# TODO: Remove temporary workaround once https://github.com/python-babel/babel/issues/415 has been resolved.
babel_415_workaround = self.TOOLBAR_BUTTONS[action]['label']
list_item.setText(_(babel_415_workaround))
list_item.setIcon(icontheme.lookup(self._get_icon_from_name(action), icontheme.ICON_SIZE_MENU))
else:
list_item.setText(self.SEPARATOR)
if index is not None:
self.ui.toolbar_layout_list.insertItem(index, list_item)
else:
self.ui.toolbar_layout_list.addItem(list_item)
return list_item
def _all_list_items(self):
return [self.ui.toolbar_layout_list.item(i).action_name
for i in range(self.ui.toolbar_layout_list.count())]
def _added_actions(self):
actions = self._all_list_items()
return set(action for action in actions if action != 'separator')
def populate_action_list(self):
self.ui.toolbar_layout_list.clear()
config = get_config()
for name in config.setting['toolbar_layout']:
if name in self.ACTION_NAMES or name == 'separator':
self._insert_item(name)
def update_action_buttons(self):
self.ui.add_button.setEnabled(self._added_actions() != self.ACTION_NAMES)
def add_to_toolbar(self):
display_list = set.difference(self.ACTION_NAMES, self._added_actions())
selected_action, ok = AddActionDialog.get_selected_action(display_list, self)
if ok:
list_item = self._insert_item(selected_action, self.ui.toolbar_layout_list.currentRow() + 1)
self.ui.toolbar_layout_list.setCurrentItem(list_item)
self.update_buttons()
def insert_separator(self):
insert_index = self.ui.toolbar_layout_list.currentRow() + 1
self._insert_item('separator', insert_index)
def remove_action(self):
item = self.ui.toolbar_layout_list.takeItem(self.ui.toolbar_layout_list.currentRow())
del item
self.update_buttons()
def update_layout_config(self):
config = get_config()
config.setting['toolbar_layout'] = self._all_list_items()
self._update_toolbar()
def _update_toolbar(self):
widget = self.parent()
while not isinstance(widget, QtWidgets.QMainWindow):
widget = widget.parent()
# Call the main window's create toolbar method
widget.create_action_toolbar()
widget.update_toolbar_style()
widget.set_tab_order()
class ToolbarListItem(QtWidgets.QListWidgetItem):
def __init__(self, action_name, *args, **kwargs):
super().__init__(*args, **kwargs)
self.action_name = action_name
class AddActionDialog(PicardDialog):
def __init__(self, action_list, *args, **kwargs):
super().__init__(*args, **kwargs)
self.setWindowModality(QtCore.Qt.WindowModality.WindowModal)
layout = QtWidgets.QVBoxLayout(self)
layout.setSizeConstraint(QtWidgets.QLayout.SizeConstraint.SetFixedSize)
# TODO: Remove temporary workaround once https://github.com/python-babel/babel/issues/415 has been resolved.
babel_415_workaround_list = []
for action in action_list:
babel_415_workaround = self.parent().TOOLBAR_BUTTONS[action]['label']
babel_415_workaround_list.append([_(babel_415_workaround), action])
self.action_list = sorted(babel_415_workaround_list)
self.combo_box = QtWidgets.QComboBox(self)
self.combo_box.addItems([label for label, action in self.action_list])
layout.addWidget(self.combo_box)
buttons = QtWidgets.QDialogButtonBox(
QtWidgets.QDialogButtonBox.StandardButton.Ok | QtWidgets.QDialogButtonBox.StandardButton.Cancel,
QtCore.Qt.Orientation.Horizontal, self)
buttons.accepted.connect(self.accept)
buttons.rejected.connect(self.reject)
layout.addWidget(buttons)
def selected_action(self):
return self.action_list[self.combo_box.currentIndex()][1]
@staticmethod
def get_selected_action(action_list, parent=None):
dialog = AddActionDialog(action_list, parent)
result = dialog.exec_()
selected_action = dialog.selected_action()
return (selected_action, result == QtWidgets.QDialog.DialogCode.Accepted)
register_options_page(InterfaceOptionsPage)

View File

@@ -0,0 +1,289 @@
# -*- coding: utf-8 -*-
#
# Picard, the next-generation MusicBrainz tagger
#
# Copyright (C) 2007-2008 Lukáš Lalinský
# Copyright (C) 2008 Will
# Copyright (C) 2009, 2019-2022 Philipp Wolfer
# Copyright (C) 2011, 2013 Michael Wiencek
# Copyright (C) 2013, 2019 Wieland Hoffmann
# Copyright (C) 2013-2014, 2018, 2020-2021 Laurent Monin
# Copyright (C) 2016 Rahul Raturi
# Copyright (C) 2016-2018 Sambhav Kothari
# Copyright (C) 2017 Antonio Larrosa
# Copyright (C) 2018 Bob Swift
# Copyright (C) 2021 Gabriel Ferreira
#
# This program is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License
# as published by the Free Software Foundation; either version 2
# of the License, or (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
import os.path
from PyQt5 import (
QtCore,
QtWidgets,
)
from picard.config import (
ListOption,
get_config,
)
from picard.util import icontheme
from picard.ui import PicardDialog
from picard.ui.moveable_list_view import MoveableListView
from picard.ui.options import (
OptionsPage,
register_options_page,
)
from picard.ui.ui_options_interface_toolbar import (
Ui_InterfaceToolbarOptionsPage,
)
class InterfaceToolbarOptionsPage(OptionsPage):
NAME = "interface_toolbar"
TITLE = N_("Action Toolbar")
PARENT = 'interface'
SORT_ORDER = 60
ACTIVE = True
HELP_URL = '/config/options_interface_toolbar.html'
SEPARATOR = '' * 5
TOOLBAR_BUTTONS = {
'add_directory_action': {
'label': N_('Add Folder'),
'icon': 'folder'
},
'add_files_action': {
'label': N_('Add Files'),
'icon': 'document-open'
},
'cluster_action': {
'label': N_('Cluster'),
'icon': 'picard-cluster'
},
'autotag_action': {
'label': N_('Lookup'),
'icon': 'picard-auto-tag'
},
'analyze_action': {
'label': N_('Scan'),
'icon': 'picard-analyze'
},
'browser_lookup_action': {
'label': N_('Lookup in Browser'),
'icon': 'lookup-musicbrainz'
},
'save_action': {
'label': N_('Save'),
'icon': 'document-save'
},
'view_info_action': {
'label': N_('Info'),
'icon': 'picard-edit-tags'
},
'remove_action': {
'label': N_('Remove'),
'icon': 'list-remove'
},
'submit_acoustid_action': {
'label': N_('Submit AcoustIDs'),
'icon': 'acoustid-fingerprinter'
},
'generate_fingerprints_action': {
'label': N_("Generate Fingerprints"),
'icon': 'fingerprint'
},
'play_file_action': {
'label': N_('Open in Player'),
'icon': 'play-music'
},
'cd_lookup_action': {
'label': N_('Lookup CD...'),
'icon': 'media-optical'
},
'tags_from_filenames_action': {
'label': N_('Parse File Names...'),
'icon': 'picard-tags-from-filename'
},
}
ACTION_NAMES = set(TOOLBAR_BUTTONS.keys())
options = [
ListOption("setting", "toolbar_layout", [
'add_directory_action',
'add_files_action',
'separator',
'cluster_action',
'separator',
'autotag_action',
'analyze_action',
'browser_lookup_action',
'separator',
'save_action',
'view_info_action',
'remove_action',
'separator',
'cd_lookup_action',
'separator',
'submit_acoustid_action',
]),
]
def __init__(self, parent=None):
super().__init__(parent)
self.ui = Ui_InterfaceToolbarOptionsPage()
self.ui.setupUi(self)
self.ui.add_button.clicked.connect(self.add_to_toolbar)
self.ui.insert_separator_button.clicked.connect(self.insert_separator)
self.ui.remove_button.clicked.connect(self.remove_action)
self.move_view = MoveableListView(self.ui.toolbar_layout_list, self.ui.up_button,
self.ui.down_button, self.update_action_buttons)
self.update_buttons = self.move_view.update_buttons
def load(self):
self.populate_action_list()
self.ui.toolbar_layout_list.setCurrentRow(0)
self.update_buttons()
def save(self):
self.tagger.window.update_toolbar_style()
self.update_layout_config()
def restore_defaults(self):
super().restore_defaults()
self.update_buttons()
def starting_directory_browse(self):
item = self.ui.starting_directory_path
path = QtWidgets.QFileDialog.getExistingDirectory(self, "", item.text())
if path:
path = os.path.normpath(path)
item.setText(path)
def _get_icon_from_name(self, name):
return self.TOOLBAR_BUTTONS[name]['icon']
def _insert_item(self, action, index=None):
list_item = ToolbarListItem(action)
list_item.setToolTip(_('Drag and Drop to re-order'))
if action in self.TOOLBAR_BUTTONS:
# TODO: Remove temporary workaround once https://github.com/python-babel/babel/issues/415 has been resolved.
babel_415_workaround = self.TOOLBAR_BUTTONS[action]['label']
list_item.setText(_(babel_415_workaround))
list_item.setIcon(icontheme.lookup(self._get_icon_from_name(action), icontheme.ICON_SIZE_MENU))
else:
list_item.setText(self.SEPARATOR)
if index is not None:
self.ui.toolbar_layout_list.insertItem(index, list_item)
else:
self.ui.toolbar_layout_list.addItem(list_item)
return list_item
def _all_list_items(self):
return [self.ui.toolbar_layout_list.item(i).action_name
for i in range(self.ui.toolbar_layout_list.count())]
def _added_actions(self):
actions = self._all_list_items()
return set(action for action in actions if action != 'separator')
def populate_action_list(self):
self.ui.toolbar_layout_list.clear()
config = get_config()
for name in config.setting['toolbar_layout']:
if name in self.ACTION_NAMES or name == 'separator':
self._insert_item(name)
def update_action_buttons(self):
self.ui.add_button.setEnabled(self._added_actions() != self.ACTION_NAMES)
def add_to_toolbar(self):
display_list = set.difference(self.ACTION_NAMES, self._added_actions())
selected_action, ok = AddActionDialog.get_selected_action(display_list, self)
if ok:
list_item = self._insert_item(selected_action, self.ui.toolbar_layout_list.currentRow() + 1)
self.ui.toolbar_layout_list.setCurrentItem(list_item)
self.update_buttons()
def insert_separator(self):
insert_index = self.ui.toolbar_layout_list.currentRow() + 1
self._insert_item('separator', insert_index)
def remove_action(self):
item = self.ui.toolbar_layout_list.takeItem(self.ui.toolbar_layout_list.currentRow())
del item
self.update_buttons()
def update_layout_config(self):
config = get_config()
config.setting['toolbar_layout'] = self._all_list_items()
self._update_toolbar()
def _update_toolbar(self):
widget = self.parent()
while not isinstance(widget, QtWidgets.QMainWindow):
widget = widget.parent()
# Call the main window's create toolbar method
widget.create_action_toolbar()
widget.update_toolbar_style()
widget.set_tab_order()
class ToolbarListItem(QtWidgets.QListWidgetItem):
def __init__(self, action_name, *args, **kwargs):
super().__init__(*args, **kwargs)
self.action_name = action_name
class AddActionDialog(PicardDialog):
def __init__(self, action_list, *args, **kwargs):
super().__init__(*args, **kwargs)
self.setWindowModality(QtCore.Qt.WindowModality.WindowModal)
layout = QtWidgets.QVBoxLayout(self)
layout.setSizeConstraint(QtWidgets.QLayout.SizeConstraint.SetFixedSize)
# TODO: Remove temporary workaround once https://github.com/python-babel/babel/issues/415 has been resolved.
babel_415_workaround_list = []
for action in action_list:
babel_415_workaround = self.parent().TOOLBAR_BUTTONS[action]['label']
babel_415_workaround_list.append([_(babel_415_workaround), action])
self.action_list = sorted(babel_415_workaround_list)
self.combo_box = QtWidgets.QComboBox(self)
self.combo_box.addItems([label for label, action in self.action_list])
layout.addWidget(self.combo_box)
buttons = QtWidgets.QDialogButtonBox(
QtWidgets.QDialogButtonBox.StandardButton.Ok | QtWidgets.QDialogButtonBox.StandardButton.Cancel,
QtCore.Qt.Orientation.Horizontal, self)
buttons.accepted.connect(self.accept)
buttons.rejected.connect(self.reject)
layout.addWidget(buttons)
def selected_action(self):
return self.action_list[self.combo_box.currentIndex()][1]
@staticmethod
def get_selected_action(action_list, parent=None):
dialog = AddActionDialog(action_list, parent)
result = dialog.exec_()
selected_action = dialog.selected_action()
return (selected_action, result == QtWidgets.QDialog.DialogCode.Accepted)
register_options_page(InterfaceToolbarOptionsPage)

View File

@@ -10,7 +10,7 @@ from PyQt5 import QtCore, QtGui, QtWidgets
class Ui_InterfaceOptionsPage(object):
def setupUi(self, InterfaceOptionsPage):
InterfaceOptionsPage.setObjectName("InterfaceOptionsPage")
InterfaceOptionsPage.resize(466, 735)
InterfaceOptionsPage.resize(466, 543)
self.vboxlayout = QtWidgets.QVBoxLayout(InterfaceOptionsPage)
self.vboxlayout.setObjectName("vboxlayout")
self.groupBox = QtWidgets.QGroupBox(InterfaceOptionsPage)
@@ -88,51 +88,8 @@ class Ui_InterfaceOptionsPage(object):
self.verticalLayout_2.setObjectName("verticalLayout_2")
self.vboxlayout1.addWidget(self.ui_theme_container)
self.vboxlayout.addWidget(self.miscellaneous_box)
self.customize_toolbar_box = QtWidgets.QGroupBox(InterfaceOptionsPage)
sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.MinimumExpanding, QtWidgets.QSizePolicy.Preferred)
sizePolicy.setHorizontalStretch(0)
sizePolicy.setVerticalStretch(0)
sizePolicy.setHeightForWidth(self.customize_toolbar_box.sizePolicy().hasHeightForWidth())
self.customize_toolbar_box.setSizePolicy(sizePolicy)
self.customize_toolbar_box.setObjectName("customize_toolbar_box")
self.verticalLayout = QtWidgets.QVBoxLayout(self.customize_toolbar_box)
self.verticalLayout.setObjectName("verticalLayout")
self.toolbar_layout_list = QtWidgets.QListWidget(self.customize_toolbar_box)
sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Expanding)
sizePolicy.setHorizontalStretch(0)
sizePolicy.setVerticalStretch(0)
sizePolicy.setHeightForWidth(self.toolbar_layout_list.sizePolicy().hasHeightForWidth())
self.toolbar_layout_list.setSizePolicy(sizePolicy)
self.toolbar_layout_list.setObjectName("toolbar_layout_list")
self.verticalLayout.addWidget(self.toolbar_layout_list)
self.edit_button_box = QtWidgets.QWidget(self.customize_toolbar_box)
self.edit_button_box.setObjectName("edit_button_box")
self.edit_box_layout = QtWidgets.QHBoxLayout(self.edit_button_box)
self.edit_box_layout.setContentsMargins(0, 0, 0, 0)
self.edit_box_layout.setObjectName("edit_box_layout")
self.add_button = QtWidgets.QToolButton(self.edit_button_box)
self.add_button.setObjectName("add_button")
self.edit_box_layout.addWidget(self.add_button)
self.insert_separator_button = QtWidgets.QToolButton(self.edit_button_box)
self.insert_separator_button.setObjectName("insert_separator_button")
self.edit_box_layout.addWidget(self.insert_separator_button)
spacerItem2 = QtWidgets.QSpacerItem(50, 20, QtWidgets.QSizePolicy.MinimumExpanding, QtWidgets.QSizePolicy.Minimum)
self.edit_box_layout.addItem(spacerItem2)
self.up_button = QtWidgets.QToolButton(self.edit_button_box)
icon = QtGui.QIcon.fromTheme(":/images/16x16/go-up.png")
self.up_button.setIcon(icon)
self.up_button.setObjectName("up_button")
self.edit_box_layout.addWidget(self.up_button)
self.down_button = QtWidgets.QToolButton(self.edit_button_box)
icon = QtGui.QIcon.fromTheme(":/images/16x16/go-down.png")
self.down_button.setIcon(icon)
self.down_button.setObjectName("down_button")
self.edit_box_layout.addWidget(self.down_button)
self.remove_button = QtWidgets.QToolButton(self.edit_button_box)
self.remove_button.setObjectName("remove_button")
self.edit_box_layout.addWidget(self.remove_button)
self.verticalLayout.addWidget(self.edit_button_box)
self.vboxlayout.addWidget(self.customize_toolbar_box)
spacerItem2 = QtWidgets.QSpacerItem(20, 40, QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Expanding)
self.vboxlayout.addItem(spacerItem2)
self.retranslateUi(InterfaceOptionsPage)
QtCore.QMetaObject.connectSlotsByName(InterfaceOptionsPage)
@@ -147,12 +104,6 @@ class Ui_InterfaceOptionsPage(object):
InterfaceOptionsPage.setTabOrder(self.filebrowser_horizontal_autoscroll, self.starting_directory)
InterfaceOptionsPage.setTabOrder(self.starting_directory, self.starting_directory_path)
InterfaceOptionsPage.setTabOrder(self.starting_directory_path, self.starting_directory_browse)
InterfaceOptionsPage.setTabOrder(self.starting_directory_browse, self.toolbar_layout_list)
InterfaceOptionsPage.setTabOrder(self.toolbar_layout_list, self.add_button)
InterfaceOptionsPage.setTabOrder(self.add_button, self.insert_separator_button)
InterfaceOptionsPage.setTabOrder(self.insert_separator_button, self.up_button)
InterfaceOptionsPage.setTabOrder(self.up_button, self.down_button)
InterfaceOptionsPage.setTabOrder(self.down_button, self.remove_button)
def retranslateUi(self, InterfaceOptionsPage):
_translate = QtCore.QCoreApplication.translate
@@ -169,12 +120,3 @@ class Ui_InterfaceOptionsPage(object):
self.filebrowser_horizontal_autoscroll.setText(_("Adjust horizontal position in file browser automatically"))
self.starting_directory.setText(_("Begin browsing in the following directory:"))
self.starting_directory_browse.setText(_("Browse..."))
self.customize_toolbar_box.setTitle(_("Customize Action Toolbar"))
self.add_button.setToolTip(_("Add a new button to Toolbar"))
self.add_button.setText(_("Add Action"))
self.insert_separator_button.setToolTip(_("Insert a separator"))
self.insert_separator_button.setText(_("Add Separator"))
self.up_button.setToolTip(_("Move selected item up"))
self.down_button.setToolTip(_("Move selected item down"))
self.remove_button.setToolTip(_("Remove button from toolbar"))
self.remove_button.setText(_("Remove"))

View File

@@ -0,0 +1,80 @@
# -*- coding: utf-8 -*-
# Automatically generated - don't edit.
# Use `python setup.py build_ui` to update it.
from PyQt5 import QtCore, QtGui, QtWidgets
class Ui_InterfaceToolbarOptionsPage(object):
def setupUi(self, InterfaceToolbarOptionsPage):
InterfaceToolbarOptionsPage.setObjectName("InterfaceToolbarOptionsPage")
InterfaceToolbarOptionsPage.resize(466, 317)
self.vboxlayout = QtWidgets.QVBoxLayout(InterfaceToolbarOptionsPage)
self.vboxlayout.setObjectName("vboxlayout")
self.customize_toolbar_box = QtWidgets.QGroupBox(InterfaceToolbarOptionsPage)
sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.MinimumExpanding, QtWidgets.QSizePolicy.Preferred)
sizePolicy.setHorizontalStretch(0)
sizePolicy.setVerticalStretch(0)
sizePolicy.setHeightForWidth(self.customize_toolbar_box.sizePolicy().hasHeightForWidth())
self.customize_toolbar_box.setSizePolicy(sizePolicy)
self.customize_toolbar_box.setObjectName("customize_toolbar_box")
self.verticalLayout = QtWidgets.QVBoxLayout(self.customize_toolbar_box)
self.verticalLayout.setObjectName("verticalLayout")
self.toolbar_layout_list = QtWidgets.QListWidget(self.customize_toolbar_box)
sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Expanding)
sizePolicy.setHorizontalStretch(0)
sizePolicy.setVerticalStretch(0)
sizePolicy.setHeightForWidth(self.toolbar_layout_list.sizePolicy().hasHeightForWidth())
self.toolbar_layout_list.setSizePolicy(sizePolicy)
self.toolbar_layout_list.setObjectName("toolbar_layout_list")
self.verticalLayout.addWidget(self.toolbar_layout_list)
self.edit_button_box = QtWidgets.QWidget(self.customize_toolbar_box)
self.edit_button_box.setObjectName("edit_button_box")
self.edit_box_layout = QtWidgets.QHBoxLayout(self.edit_button_box)
self.edit_box_layout.setContentsMargins(0, 0, 0, 0)
self.edit_box_layout.setObjectName("edit_box_layout")
self.add_button = QtWidgets.QToolButton(self.edit_button_box)
self.add_button.setObjectName("add_button")
self.edit_box_layout.addWidget(self.add_button)
self.insert_separator_button = QtWidgets.QToolButton(self.edit_button_box)
self.insert_separator_button.setObjectName("insert_separator_button")
self.edit_box_layout.addWidget(self.insert_separator_button)
spacerItem = QtWidgets.QSpacerItem(50, 20, QtWidgets.QSizePolicy.MinimumExpanding, QtWidgets.QSizePolicy.Minimum)
self.edit_box_layout.addItem(spacerItem)
self.up_button = QtWidgets.QToolButton(self.edit_button_box)
icon = QtGui.QIcon.fromTheme(":/images/16x16/go-up.png")
self.up_button.setIcon(icon)
self.up_button.setObjectName("up_button")
self.edit_box_layout.addWidget(self.up_button)
self.down_button = QtWidgets.QToolButton(self.edit_button_box)
icon = QtGui.QIcon.fromTheme(":/images/16x16/go-down.png")
self.down_button.setIcon(icon)
self.down_button.setObjectName("down_button")
self.edit_box_layout.addWidget(self.down_button)
self.remove_button = QtWidgets.QToolButton(self.edit_button_box)
self.remove_button.setObjectName("remove_button")
self.edit_box_layout.addWidget(self.remove_button)
self.verticalLayout.addWidget(self.edit_button_box)
self.vboxlayout.addWidget(self.customize_toolbar_box)
self.retranslateUi(InterfaceToolbarOptionsPage)
QtCore.QMetaObject.connectSlotsByName(InterfaceToolbarOptionsPage)
InterfaceToolbarOptionsPage.setTabOrder(self.toolbar_layout_list, self.add_button)
InterfaceToolbarOptionsPage.setTabOrder(self.add_button, self.insert_separator_button)
InterfaceToolbarOptionsPage.setTabOrder(self.insert_separator_button, self.up_button)
InterfaceToolbarOptionsPage.setTabOrder(self.up_button, self.down_button)
InterfaceToolbarOptionsPage.setTabOrder(self.down_button, self.remove_button)
def retranslateUi(self, InterfaceToolbarOptionsPage):
_translate = QtCore.QCoreApplication.translate
self.customize_toolbar_box.setTitle(_("Customize Action Toolbar"))
self.add_button.setToolTip(_("Add a new button to Toolbar"))
self.add_button.setText(_("Add Action"))
self.insert_separator_button.setToolTip(_("Insert a separator"))
self.insert_separator_button.setText(_("Add Separator"))
self.up_button.setToolTip(_("Move selected item up"))
self.down_button.setToolTip(_("Move selected item down"))
self.remove_button.setToolTip(_("Remove button from toolbar"))
self.remove_button.setText(_("Remove"))

View File

@@ -7,7 +7,7 @@
<x>0</x>
<y>0</y>
<width>466</width>
<height>735</height>
<height>543</height>
</rect>
</property>
<layout class="QVBoxLayout">
@@ -185,115 +185,17 @@
</widget>
</item>
<item>
<widget class="QGroupBox" name="customize_toolbar_box">
<property name="sizePolicy">
<sizepolicy hsizetype="MinimumExpanding" vsizetype="Preferred">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
<spacer name="verticalSpacer">
<property name="orientation">
<enum>Qt::Vertical</enum>
</property>
<property name="title">
<string>Customize Action Toolbar</string>
<property name="sizeHint" stdset="0">
<size>
<width>20</width>
<height>40</height>
</size>
</property>
<layout class="QVBoxLayout" name="verticalLayout">
<item>
<widget class="QListWidget" name="toolbar_layout_list">
<property name="sizePolicy">
<sizepolicy hsizetype="Expanding" vsizetype="Expanding">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
</widget>
</item>
<item>
<widget class="QWidget" name="edit_button_box" native="true">
<layout class="QHBoxLayout" name="edit_box_layout">
<property name="leftMargin">
<number>0</number>
</property>
<property name="topMargin">
<number>0</number>
</property>
<property name="rightMargin">
<number>0</number>
</property>
<property name="bottomMargin">
<number>0</number>
</property>
<item>
<widget class="QToolButton" name="add_button">
<property name="toolTip">
<string>Add a new button to Toolbar</string>
</property>
<property name="text">
<string>Add Action</string>
</property>
</widget>
</item>
<item>
<widget class="QToolButton" name="insert_separator_button">
<property name="toolTip">
<string>Insert a separator</string>
</property>
<property name="text">
<string>Add Separator</string>
</property>
</widget>
</item>
<item>
<spacer name="button_box_spacer">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="sizeType">
<enum>QSizePolicy::MinimumExpanding</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>50</width>
<height>20</height>
</size>
</property>
</spacer>
</item>
<item>
<widget class="QToolButton" name="up_button">
<property name="toolTip">
<string>Move selected item up</string>
</property>
<property name="icon">
<iconset theme=":/images/16x16/go-up.png">
<normaloff>.</normaloff>.</iconset>
</property>
</widget>
</item>
<item>
<widget class="QToolButton" name="down_button">
<property name="toolTip">
<string>Move selected item down</string>
</property>
<property name="icon">
<iconset theme=":/images/16x16/go-down.png">
<normaloff>.</normaloff>.</iconset>
</property>
</widget>
</item>
<item>
<widget class="QToolButton" name="remove_button">
<property name="toolTip">
<string>Remove button from toolbar</string>
</property>
<property name="text">
<string>Remove</string>
</property>
</widget>
</item>
</layout>
</widget>
</item>
</layout>
</widget>
</spacer>
</item>
</layout>
</widget>
@@ -310,12 +212,6 @@
<tabstop>starting_directory</tabstop>
<tabstop>starting_directory_path</tabstop>
<tabstop>starting_directory_browse</tabstop>
<tabstop>toolbar_layout_list</tabstop>
<tabstop>add_button</tabstop>
<tabstop>insert_separator_button</tabstop>
<tabstop>up_button</tabstop>
<tabstop>down_button</tabstop>
<tabstop>remove_button</tabstop>
</tabstops>
<resources/>
<connections/>

View File

@@ -0,0 +1,137 @@
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>InterfaceToolbarOptionsPage</class>
<widget class="QWidget" name="InterfaceToolbarOptionsPage">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>466</width>
<height>317</height>
</rect>
</property>
<layout class="QVBoxLayout">
<item>
<widget class="QGroupBox" name="customize_toolbar_box">
<property name="sizePolicy">
<sizepolicy hsizetype="MinimumExpanding" vsizetype="Preferred">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="title">
<string>Customize Action Toolbar</string>
</property>
<layout class="QVBoxLayout" name="verticalLayout">
<item>
<widget class="QListWidget" name="toolbar_layout_list">
<property name="sizePolicy">
<sizepolicy hsizetype="Expanding" vsizetype="Expanding">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
</widget>
</item>
<item>
<widget class="QWidget" name="edit_button_box" native="true">
<layout class="QHBoxLayout" name="edit_box_layout">
<property name="leftMargin">
<number>0</number>
</property>
<property name="topMargin">
<number>0</number>
</property>
<property name="rightMargin">
<number>0</number>
</property>
<property name="bottomMargin">
<number>0</number>
</property>
<item>
<widget class="QToolButton" name="add_button">
<property name="toolTip">
<string>Add a new button to Toolbar</string>
</property>
<property name="text">
<string>Add Action</string>
</property>
</widget>
</item>
<item>
<widget class="QToolButton" name="insert_separator_button">
<property name="toolTip">
<string>Insert a separator</string>
</property>
<property name="text">
<string>Add Separator</string>
</property>
</widget>
</item>
<item>
<spacer name="button_box_spacer">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="sizeType">
<enum>QSizePolicy::MinimumExpanding</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>50</width>
<height>20</height>
</size>
</property>
</spacer>
</item>
<item>
<widget class="QToolButton" name="up_button">
<property name="toolTip">
<string>Move selected item up</string>
</property>
<property name="icon">
<iconset theme=":/images/16x16/go-up.png">
<normaloff>.</normaloff>.</iconset>
</property>
</widget>
</item>
<item>
<widget class="QToolButton" name="down_button">
<property name="toolTip">
<string>Move selected item down</string>
</property>
<property name="icon">
<iconset theme=":/images/16x16/go-down.png">
<normaloff>.</normaloff>.</iconset>
</property>
</widget>
</item>
<item>
<widget class="QToolButton" name="remove_button">
<property name="toolTip">
<string>Remove button from toolbar</string>
</property>
<property name="text">
<string>Remove</string>
</property>
</widget>
</item>
</layout>
</widget>
</item>
</layout>
</widget>
</item>
</layout>
</widget>
<tabstops>
<tabstop>toolbar_layout_list</tabstop>
<tabstop>add_button</tabstop>
<tabstop>insert_separator_button</tabstop>
<tabstop>up_button</tabstop>
<tabstop>down_button</tabstop>
<tabstop>remove_button</tabstop>
</tabstops>
<resources/>
<connections/>
</ui>