mirror of
https://github.com/fergalmoran/picard.git
synced 2025-12-22 09:18:18 +00:00
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:
@@ -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,
|
||||
|
||||
@@ -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)
|
||||
|
||||
289
picard/ui/options/interface_toolbar.py
Normal file
289
picard/ui/options/interface_toolbar.py
Normal 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)
|
||||
@@ -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"))
|
||||
|
||||
80
picard/ui/ui_options_interface_toolbar.py
Normal file
80
picard/ui/ui_options_interface_toolbar.py
Normal 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"))
|
||||
@@ -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/>
|
||||
|
||||
137
ui/options_interface_toolbar.ui
Normal file
137
ui/options_interface_toolbar.ui
Normal 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>
|
||||
Reference in New Issue
Block a user