diff options
| author | Warry <FunWarry@users.noreply.github.com> | 2025-11-30 15:37:32 +0100 |
|---|---|---|
| committer | Warry <FunWarry@users.noreply.github.com> | 2025-11-30 15:37:32 +0100 |
| commit | 121dbb788d051c76375261cd18fa8dca0f23b935 (patch) | |
| tree | cab3f2df3aa9e1437fdd0b5c60ab22780f8d717d /tidal_dl_ng/ui | |
| parent | 28a6fe5a7dbadc9532de228a539c47ec49ca4aa2 (diff) | |
| download | tidal-dl-ng-121dbb788d051c76375261cd18fa8dca0f23b935.tar.gz | |
feat: refactor settings UI with category navigation and add Delimiters page
Closes #640
## Changes
### UI Refactoring
- Replace monolithic settings dialog with category-based navigation
- Add QListWidget (lw_categories) for category selection on the left
- Add QStackedWidget (sw_categories) for content pages on the right
- Organize settings into 5 distinct pages:
- Flags (14 checkboxes)
- Quality (3 combo boxes)
- Numbers (2 spin boxes)
- Paths & Formats (7 line edits + 2 browse buttons)
- Delimiters (4 line edits) — NEW
### New Feature: Delimiters Category
- Add customizable separators for artists in metadata and filenames:
- metadata_delimiter_artist
- metadata_delimiter_album_artist
- filename_delimiter_artist
- filename_delimiter_album_artist
- Auto-integration with DialogPreferences via parameters_line_edit
- Line edits with max width 100px for compact display
### Styling
- Apply dark theme to settings dialog:
- Category list: #2b2b2b background, #3d5a80 selection, #3a3a3a hover
- Settings area: #333333 background, styled GroupBoxes (#3a3a3a)
- Light text (#e0e0e0) for better contrast
- Add spacing property (6px) to category list for better readability
- Style QListWidget items with padding (4px 3px) and margin (2px 0px)
### Testing
- Add comprehensive test suite (61 tests total):
- test_settings_ui.py: UI and basic integration (14 tests)
- test_settings_dialog_structure.py: detailed structure validation (20 tests)
- test_dialog_preferences_integration.py: DialogPreferences integration (14 tests)
- test_delimiters_category.py: new Delimiters page validation (13 tests)
- Fix ruff issues (F841, S108) in test files
- All tests passing with 100% success rate
### Documentation
- Add docs/refactor_settings_ui.md: comprehensive refactor overview
- Add docs/delimiters_category.md: Delimiters feature documentation
- Add docs/ui_styles.md: dark theme style guide
- Add docs/testing_summary.md: testing overview and commands
### Code Quality
- Apply ruff/black/pyupgrade via pre-commit hooks
- Fix F841 (unused variable) in test_dialog_preferences_integration.py
- Fix S108 (insecure temp path) using Path.home() in test_settings_ui.py
- End-of-file fixes applied automatically
## Files Modified
- tidal_dl_ng/ui/dialog_settings.ui (complete restructure)
- tidal_dl_ng/ui/dialog_settings.py (auto-generated from .ui)
- tidal_dl_ng/dialog.py (add 4 delimiter params + Delimiters category)
- tests/* (4 new test files with 61 tests)
- docs/* (4 new documentation files)
## Impact
- Improved UX: intuitive category navigation, better visual organization
- Extensibility: easy to add new settings pages/categories
- Quality: comprehensive test coverage ensures robustness
- User flexibility: customizable separators for metadata and filenames
## Technical Notes
- QStackedWidget pages indexed 0-4 matching category list order
- Navigation via QListWidget::currentRowChanged signal
- Automatic save/load through existing DialogPreferences methods
- No breaking changes to existing settings or configuration
## Testing Commands
```powershell
poetry run pre-commit run -a
poetry run pytest -q
Diffstat (limited to 'tidal_dl_ng/ui')
| -rw-r--r-- | tidal_dl_ng/ui/dialog_settings.py | 472 | ||||
| -rw-r--r-- | tidal_dl_ng/ui/dialog_settings.ui | 1936 |
2 files changed, 1571 insertions, 837 deletions
diff --git a/tidal_dl_ng/ui/dialog_settings.py b/tidal_dl_ng/ui/dialog_settings.py index b7ae709..266c4d1 100644 --- a/tidal_dl_ng/ui/dialog_settings.py +++ b/tidal_dl_ng/ui/dialog_settings.py @@ -6,20 +6,26 @@ ## WARNING! All changes made in this file will be lost when recompiling UI file! ################################################################################ -from PySide6.QtCore import QCoreApplication, QMetaObject, Qt +from PySide6.QtCore import QCoreApplication, QMetaObject, QSize, Qt from PySide6.QtWidgets import ( QCheckBox, QComboBox, QDialogButtonBox, + QFrame, QGroupBox, QHBoxLayout, QLabel, QLayout, QLineEdit, + QListView, + QListWidget, QPushButton, QSizePolicy, + QSpacerItem, QSpinBox, + QStackedWidget, QVBoxLayout, + QWidget, ) @@ -27,7 +33,7 @@ class Ui_DialogSettings: def setupUi(self, DialogSettings): if not DialogSettings.objectName(): DialogSettings.setObjectName("DialogSettings") - DialogSettings.resize(640, 832) + DialogSettings.resize(808, 379) sizePolicy = QSizePolicy(QSizePolicy.Policy.Expanding, QSizePolicy.Policy.Expanding) sizePolicy.setHorizontalStretch(100) sizePolicy.setVerticalStretch(100) @@ -40,13 +46,100 @@ class Ui_DialogSettings: self.lv_main = QVBoxLayout() self.lv_main.setObjectName("lv_main") self.lv_main.setContentsMargins(12, 12, 12, 12) - self.gb_flags = QGroupBox(DialogSettings) + self.lh_main_content = QHBoxLayout() + self.lh_main_content.setObjectName("lh_main_content") + self.lw_categories = QListWidget(DialogSettings) + self.lw_categories.setObjectName("lw_categories") + sizePolicy1 = QSizePolicy(QSizePolicy.Policy.Fixed, QSizePolicy.Policy.Expanding) + sizePolicy1.setHorizontalStretch(0) + sizePolicy1.setVerticalStretch(0) + sizePolicy1.setHeightForWidth(self.lw_categories.sizePolicy().hasHeightForWidth()) + self.lw_categories.setSizePolicy(sizePolicy1) + self.lw_categories.setMinimumSize(QSize(150, 0)) + self.lw_categories.setMaximumSize(QSize(200, 16777215)) + self.lw_categories.setStyleSheet( + "QListWidget {\n" + " background-color: #2b2b2b;\n" + " border: 1px solid #3d3d3d;\n" + " border-radius: 4px;\n" + " padding: 4px;\n" + " outline: none;\n" + "}\n" + "\n" + "QListWidget::item {\n" + " padding: 4px 3px;\n" + " border-radius: 3px;\n" + " margin: 2px 0px;\n" + " color: #e0e0e0;\n" + "}\n" + "\n" + "QListWidget::item:selected {\n" + " background-color: #3d5a80;\n" + " color: white;\n" + " font-weight: bold;\n" + "}\n" + "\n" + "QListWidget::item:hover:!selected {\n" + " background-color: #3a3a3a;\n" + " color: white;\n" + "}\n" + "\n" + "QListWidget::item:focus {\n" + " outline: none;\n" + "}" + ) + self.lw_categories.setFrameShape(QFrame.Shape.StyledPanel) + self.lw_categories.setFrameShadow(QFrame.Shadow.Raised) + self.lw_categories.setMidLineWidth(-1) + self.lw_categories.setResizeMode(QListView.ResizeMode.Adjust) + self.lw_categories.setSpacing(0) + + self.lh_main_content.addWidget(self.lw_categories) + + self.sw_categories = QStackedWidget(DialogSettings) + self.sw_categories.setObjectName("sw_categories") + self.sw_categories.setStyleSheet( + "QStackedWidget {\n" + " background-color: #333333;\n" + " border: 1px solid #3d3d3d;\n" + " border-radius: 4px;\n" + "}\n" + "\n" + "QWidget {\n" + " background-color: transparent;\n" + "}\n" + "\n" + "QGroupBox {\n" + " background-color: #3a3a3a;\n" + " border: 1px solid #4a4a4a;\n" + " border-radius: 6px;\n" + " margin-top: 12px;\n" + " padding-top: 12px;\n" + " font-weight: bold;\n" + "}\n" + "\n" + "QGroupBox::title {\n" + " subcontrol-origin: margin;\n" + " subcontrol-position: top left;\n" + " padding: 4px 8px;\n" + " background-color: #3a3a3a;\n" + " border-radius: 4px;\n" + "}" + ) + self.sw_categories.setFrameShape(QFrame.Shape.StyledPanel) + self.sw_categories.setFrameShadow(QFrame.Shadow.Plain) + self.sw_categories.setMidLineWidth(1) + self.page_flags = QWidget() + self.page_flags.setObjectName("page_flags") + self.lv_page_flags = QVBoxLayout(self.page_flags) + self.lv_page_flags.setObjectName("lv_page_flags") + self.gb_flags = QGroupBox(self.page_flags) self.gb_flags.setObjectName("gb_flags") - sizePolicy1 = QSizePolicy(QSizePolicy.Policy.Expanding, QSizePolicy.Policy.Fixed) - sizePolicy1.setHorizontalStretch(100) - sizePolicy1.setVerticalStretch(100) - sizePolicy1.setHeightForWidth(self.gb_flags.sizePolicy().hasHeightForWidth()) - self.gb_flags.setSizePolicy(sizePolicy1) + sizePolicy2 = QSizePolicy(QSizePolicy.Policy.Expanding, QSizePolicy.Policy.Fixed) + sizePolicy2.setHorizontalStretch(100) + sizePolicy2.setVerticalStretch(100) + sizePolicy2.setHeightForWidth(self.gb_flags.sizePolicy().hasHeightForWidth()) + self.gb_flags.setSizePolicy(sizePolicy2) self.gb_flags.setFlat(False) self.gb_flags.setCheckable(False) self.lv_flags = QVBoxLayout(self.gb_flags) @@ -57,8 +150,8 @@ class Ui_DialogSettings: self.lv_flag_video_download.setObjectName("lv_flag_video_download") self.cb_video_download = QCheckBox(self.gb_flags) self.cb_video_download.setObjectName("cb_video_download") - sizePolicy1.setHeightForWidth(self.cb_video_download.sizePolicy().hasHeightForWidth()) - self.cb_video_download.setSizePolicy(sizePolicy1) + sizePolicy2.setHeightForWidth(self.cb_video_download.sizePolicy().hasHeightForWidth()) + self.cb_video_download.setSizePolicy(sizePolicy2) self.lv_flag_video_download.addWidget(self.cb_video_download) @@ -68,8 +161,8 @@ class Ui_DialogSettings: self.lv_flag_video_convert.setObjectName("lv_flag_video_convert") self.cb_video_convert_mp4 = QCheckBox(self.gb_flags) self.cb_video_convert_mp4.setObjectName("cb_video_convert_mp4") - sizePolicy1.setHeightForWidth(self.cb_video_convert_mp4.sizePolicy().hasHeightForWidth()) - self.cb_video_convert_mp4.setSizePolicy(sizePolicy1) + sizePolicy2.setHeightForWidth(self.cb_video_convert_mp4.sizePolicy().hasHeightForWidth()) + self.cb_video_convert_mp4.setSizePolicy(sizePolicy2) self.lv_flag_video_convert.addWidget(self.cb_video_convert_mp4) @@ -83,11 +176,11 @@ class Ui_DialogSettings: self.lv_flag_lyrics_embed.setObjectName("lv_flag_lyrics_embed") self.cb_lyrics_embed = QCheckBox(self.gb_flags) self.cb_lyrics_embed.setObjectName("cb_lyrics_embed") - sizePolicy2 = QSizePolicy(QSizePolicy.Policy.Expanding, QSizePolicy.Policy.Fixed) - sizePolicy2.setHorizontalStretch(0) - sizePolicy2.setVerticalStretch(0) - sizePolicy2.setHeightForWidth(self.cb_lyrics_embed.sizePolicy().hasHeightForWidth()) - self.cb_lyrics_embed.setSizePolicy(sizePolicy2) + sizePolicy3 = QSizePolicy(QSizePolicy.Policy.Expanding, QSizePolicy.Policy.Fixed) + sizePolicy3.setHorizontalStretch(0) + sizePolicy3.setVerticalStretch(0) + sizePolicy3.setHeightForWidth(self.cb_lyrics_embed.sizePolicy().hasHeightForWidth()) + self.cb_lyrics_embed.setSizePolicy(sizePolicy3) self.lv_flag_lyrics_embed.addWidget(self.cb_lyrics_embed) @@ -97,8 +190,8 @@ class Ui_DialogSettings: self.lv_flag_lyrics_file.setObjectName("lv_flag_lyrics_file") self.cb_lyrics_file = QCheckBox(self.gb_flags) self.cb_lyrics_file.setObjectName("cb_lyrics_file") - sizePolicy1.setHeightForWidth(self.cb_lyrics_file.sizePolicy().hasHeightForWidth()) - self.cb_lyrics_file.setSizePolicy(sizePolicy1) + sizePolicy2.setHeightForWidth(self.cb_lyrics_file.sizePolicy().hasHeightForWidth()) + self.cb_lyrics_file.setSizePolicy(sizePolicy2) self.lv_flag_lyrics_file.addWidget(self.cb_lyrics_file) @@ -112,8 +205,8 @@ class Ui_DialogSettings: self.lv_flag_download_delay.setObjectName("lv_flag_download_delay") self.cb_download_delay = QCheckBox(self.gb_flags) self.cb_download_delay.setObjectName("cb_download_delay") - sizePolicy1.setHeightForWidth(self.cb_download_delay.sizePolicy().hasHeightForWidth()) - self.cb_download_delay.setSizePolicy(sizePolicy1) + sizePolicy2.setHeightForWidth(self.cb_download_delay.sizePolicy().hasHeightForWidth()) + self.cb_download_delay.setSizePolicy(sizePolicy2) self.lv_flag_download_delay.addWidget(self.cb_download_delay) @@ -123,8 +216,8 @@ class Ui_DialogSettings: self.lv_flag_extract_flac.setObjectName("lv_flag_extract_flac") self.cb_extract_flac = QCheckBox(self.gb_flags) self.cb_extract_flac.setObjectName("cb_extract_flac") - sizePolicy2.setHeightForWidth(self.cb_extract_flac.sizePolicy().hasHeightForWidth()) - self.cb_extract_flac.setSizePolicy(sizePolicy2) + sizePolicy3.setHeightForWidth(self.cb_extract_flac.sizePolicy().hasHeightForWidth()) + self.cb_extract_flac.setSizePolicy(sizePolicy3) self.lv_flag_extract_flac.addWidget(self.cb_extract_flac) @@ -220,33 +313,42 @@ class Ui_DialogSettings: self.lv_flags.addLayout(self.horizontalLayout_13) - self.lv_main.addWidget(self.gb_flags) + self.lv_page_flags.addWidget(self.gb_flags) + + self.vs_page_flags = QSpacerItem(20, 40, QSizePolicy.Policy.Minimum, QSizePolicy.Policy.Expanding) - self.gb_choices = QGroupBox(DialogSettings) + self.lv_page_flags.addItem(self.vs_page_flags) + + self.sw_categories.addWidget(self.page_flags) + self.page_quality = QWidget() + self.page_quality.setObjectName("page_quality") + self.lv_page_quality = QVBoxLayout(self.page_quality) + self.lv_page_quality.setObjectName("lv_page_quality") + self.gb_choices = QGroupBox(self.page_quality) self.gb_choices.setObjectName("gb_choices") - sizePolicy3 = QSizePolicy(QSizePolicy.Policy.Preferred, QSizePolicy.Policy.Fixed) - sizePolicy3.setHorizontalStretch(0) - sizePolicy3.setVerticalStretch(0) - sizePolicy3.setHeightForWidth(self.gb_choices.sizePolicy().hasHeightForWidth()) - self.gb_choices.setSizePolicy(sizePolicy3) + sizePolicy4 = QSizePolicy(QSizePolicy.Policy.Preferred, QSizePolicy.Policy.Fixed) + sizePolicy4.setHorizontalStretch(0) + sizePolicy4.setVerticalStretch(0) + sizePolicy4.setHeightForWidth(self.gb_choices.sizePolicy().hasHeightForWidth()) + self.gb_choices.setSizePolicy(sizePolicy4) self.lv_choices = QVBoxLayout(self.gb_choices) self.lv_choices.setObjectName("lv_choices") self.lh_choices_quality_audio = QHBoxLayout() self.lh_choices_quality_audio.setObjectName("lh_choices_quality_audio") self.l_icon_quality_audio = QLabel(self.gb_choices) self.l_icon_quality_audio.setObjectName("l_icon_quality_audio") - sizePolicy4 = QSizePolicy(QSizePolicy.Policy.Fixed, QSizePolicy.Policy.Fixed) - sizePolicy4.setHorizontalStretch(0) - sizePolicy4.setVerticalStretch(0) - sizePolicy4.setHeightForWidth(self.l_icon_quality_audio.sizePolicy().hasHeightForWidth()) - self.l_icon_quality_audio.setSizePolicy(sizePolicy4) + sizePolicy5 = QSizePolicy(QSizePolicy.Policy.Fixed, QSizePolicy.Policy.Fixed) + sizePolicy5.setHorizontalStretch(0) + sizePolicy5.setVerticalStretch(0) + sizePolicy5.setHeightForWidth(self.l_icon_quality_audio.sizePolicy().hasHeightForWidth()) + self.l_icon_quality_audio.setSizePolicy(sizePolicy5) self.lh_choices_quality_audio.addWidget(self.l_icon_quality_audio) self.l_quality_audio = QLabel(self.gb_choices) self.l_quality_audio.setObjectName("l_quality_audio") - sizePolicy4.setHeightForWidth(self.l_quality_audio.sizePolicy().hasHeightForWidth()) - self.l_quality_audio.setSizePolicy(sizePolicy4) + sizePolicy5.setHeightForWidth(self.l_quality_audio.sizePolicy().hasHeightForWidth()) + self.l_quality_audio.setSizePolicy(sizePolicy5) self.lh_choices_quality_audio.addWidget(self.l_quality_audio) @@ -263,15 +365,15 @@ class Ui_DialogSettings: self.lh_choices_quality_video.setObjectName("lh_choices_quality_video") self.l_icon_quality_video = QLabel(self.gb_choices) self.l_icon_quality_video.setObjectName("l_icon_quality_video") - sizePolicy4.setHeightForWidth(self.l_icon_quality_video.sizePolicy().hasHeightForWidth()) - self.l_icon_quality_video.setSizePolicy(sizePolicy4) + sizePolicy5.setHeightForWidth(self.l_icon_quality_video.sizePolicy().hasHeightForWidth()) + self.l_icon_quality_video.setSizePolicy(sizePolicy5) self.lh_choices_quality_video.addWidget(self.l_icon_quality_video) self.l_quality_video = QLabel(self.gb_choices) self.l_quality_video.setObjectName("l_quality_video") - sizePolicy4.setHeightForWidth(self.l_quality_video.sizePolicy().hasHeightForWidth()) - self.l_quality_video.setSizePolicy(sizePolicy4) + sizePolicy5.setHeightForWidth(self.l_quality_video.sizePolicy().hasHeightForWidth()) + self.l_quality_video.setSizePolicy(sizePolicy5) self.lh_choices_quality_video.addWidget(self.l_quality_video) @@ -289,25 +391,25 @@ class Ui_DialogSettings: self.lh_choices_cover_dimension.setSizeConstraint(QLayout.SizeConstraint.SetDefaultConstraint) self.l_icon_metadata_cover_dimension = QLabel(self.gb_choices) self.l_icon_metadata_cover_dimension.setObjectName("l_icon_metadata_cover_dimension") - sizePolicy4.setHeightForWidth(self.l_icon_metadata_cover_dimension.sizePolicy().hasHeightForWidth()) - self.l_icon_metadata_cover_dimension.setSizePolicy(sizePolicy4) + sizePolicy5.setHeightForWidth(self.l_icon_metadata_cover_dimension.sizePolicy().hasHeightForWidth()) + self.l_icon_metadata_cover_dimension.setSizePolicy(sizePolicy5) self.lh_choices_cover_dimension.addWidget(self.l_icon_metadata_cover_dimension) self.l_metadata_cover_dimension = QLabel(self.gb_choices) self.l_metadata_cover_dimension.setObjectName("l_metadata_cover_dimension") - sizePolicy4.setHeightForWidth(self.l_metadata_cover_dimension.sizePolicy().hasHeightForWidth()) - self.l_metadata_cover_dimension.setSizePolicy(sizePolicy4) + sizePolicy5.setHeightForWidth(self.l_metadata_cover_dimension.sizePolicy().hasHeightForWidth()) + self.l_metadata_cover_dimension.setSizePolicy(sizePolicy5) self.lh_choices_cover_dimension.addWidget(self.l_metadata_cover_dimension) self.c_metadata_cover_dimension = QComboBox(self.gb_choices) self.c_metadata_cover_dimension.setObjectName("c_metadata_cover_dimension") - sizePolicy5 = QSizePolicy(QSizePolicy.Policy.Preferred, QSizePolicy.Policy.Fixed) - sizePolicy5.setHorizontalStretch(10) - sizePolicy5.setVerticalStretch(0) - sizePolicy5.setHeightForWidth(self.c_metadata_cover_dimension.sizePolicy().hasHeightForWidth()) - self.c_metadata_cover_dimension.setSizePolicy(sizePolicy5) + sizePolicy6 = QSizePolicy(QSizePolicy.Policy.Preferred, QSizePolicy.Policy.Fixed) + sizePolicy6.setHorizontalStretch(10) + sizePolicy6.setVerticalStretch(0) + sizePolicy6.setHeightForWidth(self.c_metadata_cover_dimension.sizePolicy().hasHeightForWidth()) + self.c_metadata_cover_dimension.setSizePolicy(sizePolicy6) self.lh_choices_cover_dimension.addWidget(self.c_metadata_cover_dimension) @@ -315,9 +417,18 @@ class Ui_DialogSettings: self.lv_choices.addLayout(self.lh_choices_cover_dimension) - self.lv_main.addWidget(self.gb_choices) + self.lv_page_quality.addWidget(self.gb_choices) - self.gb_numbers = QGroupBox(DialogSettings) + self.vs_page_quality = QSpacerItem(20, 40, QSizePolicy.Policy.Minimum, QSizePolicy.Policy.Expanding) + + self.lv_page_quality.addItem(self.vs_page_quality) + + self.sw_categories.addWidget(self.page_quality) + self.page_numbers = QWidget() + self.page_numbers.setObjectName("page_numbers") + self.lv_page_numbers = QVBoxLayout(self.page_numbers) + self.lv_page_numbers.setObjectName("lv_page_numbers") + self.gb_numbers = QGroupBox(self.page_numbers) self.gb_numbers.setObjectName("gb_numbers") self.verticalLayout_8 = QVBoxLayout(self.gb_numbers) self.verticalLayout_8.setObjectName("verticalLayout_8") @@ -362,9 +473,18 @@ class Ui_DialogSettings: self.verticalLayout_8.addLayout(self.horizontalLayout_11) - self.lv_main.addWidget(self.gb_numbers) + self.lv_page_numbers.addWidget(self.gb_numbers) + + self.vs_page_numbers = QSpacerItem(20, 40, QSizePolicy.Policy.Minimum, QSizePolicy.Policy.Expanding) - self.gb_path = QGroupBox(DialogSettings) + self.lv_page_numbers.addItem(self.vs_page_numbers) + + self.sw_categories.addWidget(self.page_numbers) + self.page_paths = QWidget() + self.page_paths.setObjectName("page_paths") + self.lv_page_paths = QVBoxLayout(self.page_paths) + self.lv_page_paths.setObjectName("lv_page_paths") + self.gb_path = QGroupBox(self.page_paths) self.gb_path.setObjectName("gb_path") self.horizontalLayout_2 = QHBoxLayout(self.gb_path) self.horizontalLayout_2.setObjectName("horizontalLayout_2") @@ -374,15 +494,15 @@ class Ui_DialogSettings: self.lh_path_base.setObjectName("lh_path_base") self.l_icon_download_base_path = QLabel(self.gb_path) self.l_icon_download_base_path.setObjectName("l_icon_download_base_path") - sizePolicy4.setHeightForWidth(self.l_icon_download_base_path.sizePolicy().hasHeightForWidth()) - self.l_icon_download_base_path.setSizePolicy(sizePolicy4) + sizePolicy5.setHeightForWidth(self.l_icon_download_base_path.sizePolicy().hasHeightForWidth()) + self.l_icon_download_base_path.setSizePolicy(sizePolicy5) self.lh_path_base.addWidget(self.l_icon_download_base_path) self.l_download_base_path = QLabel(self.gb_path) self.l_download_base_path.setObjectName("l_download_base_path") - sizePolicy3.setHeightForWidth(self.l_download_base_path.sizePolicy().hasHeightForWidth()) - self.l_download_base_path.setSizePolicy(sizePolicy3) + sizePolicy4.setHeightForWidth(self.l_download_base_path.sizePolicy().hasHeightForWidth()) + self.l_download_base_path.setSizePolicy(sizePolicy4) self.lh_path_base.addWidget(self.l_download_base_path) @@ -392,15 +512,15 @@ class Ui_DialogSettings: self.lh_path_fmt_track.setObjectName("lh_path_fmt_track") self.l_icon_format_track = QLabel(self.gb_path) self.l_icon_format_track.setObjectName("l_icon_format_track") - sizePolicy4.setHeightForWidth(self.l_icon_format_track.sizePolicy().hasHeightForWidth()) - self.l_icon_format_track.setSizePolicy(sizePolicy4) + sizePolicy5.setHeightForWidth(self.l_icon_format_track.sizePolicy().hasHeightForWidth()) + self.l_icon_format_track.setSizePolicy(sizePolicy5) self.lh_path_fmt_track.addWidget(self.l_icon_format_track) self.l_format_track = QLabel(self.gb_path) self.l_format_track.setObjectName("l_format_track") - sizePolicy3.setHeightForWidth(self.l_format_track.sizePolicy().hasHeightForWidth()) - self.l_format_track.setSizePolicy(sizePolicy3) + sizePolicy4.setHeightForWidth(self.l_format_track.sizePolicy().hasHeightForWidth()) + self.l_format_track.setSizePolicy(sizePolicy4) self.lh_path_fmt_track.addWidget(self.l_format_track) @@ -410,15 +530,15 @@ class Ui_DialogSettings: self.lh_path_fmt_video.setObjectName("lh_path_fmt_video") self.l_icon_format_video = QLabel(self.gb_path) self.l_icon_format_video.setObjectName("l_icon_format_video") - sizePolicy4.setHeightForWidth(self.l_icon_format_video.sizePolicy().hasHeightForWidth()) - self.l_icon_format_video.setSizePolicy(sizePolicy4) + sizePolicy5.setHeightForWidth(self.l_icon_format_video.sizePolicy().hasHeightForWidth()) + self.l_icon_format_video.setSizePolicy(sizePolicy5) self.lh_path_fmt_video.addWidget(self.l_icon_format_video) self.l_format_video = QLabel(self.gb_path) self.l_format_video.setObjectName("l_format_video") - sizePolicy3.setHeightForWidth(self.l_format_video.sizePolicy().hasHeightForWidth()) - self.l_format_video.setSizePolicy(sizePolicy3) + sizePolicy4.setHeightForWidth(self.l_format_video.sizePolicy().hasHeightForWidth()) + self.l_format_video.setSizePolicy(sizePolicy4) self.lh_path_fmt_video.addWidget(self.l_format_video) @@ -428,18 +548,18 @@ class Ui_DialogSettings: self.lh_path_fmt_album.setObjectName("lh_path_fmt_album") self.l_icon_format_album = QLabel(self.gb_path) self.l_icon_format_album.setObjectName("l_icon_format_album") - sizePolicy6 = QSizePolicy(QSizePolicy.Policy.Fixed, QSizePolicy.Policy.Preferred) - sizePolicy6.setHorizontalStretch(0) - sizePolicy6.setVerticalStretch(0) - sizePolicy6.setHeightForWidth(self.l_icon_format_album.sizePolicy().hasHeightForWidth()) - self.l_icon_format_album.setSizePolicy(sizePolicy6) + sizePolicy7 = QSizePolicy(QSizePolicy.Policy.Fixed, QSizePolicy.Policy.Preferred) + sizePolicy7.setHorizontalStretch(0) + sizePolicy7.setVerticalStretch(0) + sizePolicy7.setHeightForWidth(self.l_icon_format_album.sizePolicy().hasHeightForWidth()) + self.l_icon_format_album.setSizePolicy(sizePolicy7) self.lh_path_fmt_album.addWidget(self.l_icon_format_album) self.l_format_album = QLabel(self.gb_path) self.l_format_album.setObjectName("l_format_album") - sizePolicy3.setHeightForWidth(self.l_format_album.sizePolicy().hasHeightForWidth()) - self.l_format_album.setSizePolicy(sizePolicy3) + sizePolicy4.setHeightForWidth(self.l_format_album.sizePolicy().hasHeightForWidth()) + self.l_format_album.setSizePolicy(sizePolicy4) self.lh_path_fmt_album.addWidget(self.l_format_album) @@ -449,15 +569,15 @@ class Ui_DialogSettings: self.lh_fpath_mt_playlist.setObjectName("lh_fpath_mt_playlist") self.l_icon_format_playlist = QLabel(self.gb_path) self.l_icon_format_playlist.setObjectName("l_icon_format_playlist") - sizePolicy4.setHeightForWidth(self.l_icon_format_playlist.sizePolicy().hasHeightForWidth()) - self.l_icon_format_playlist.setSizePolicy(sizePolicy4) + sizePolicy5.setHeightForWidth(self.l_icon_format_playlist.sizePolicy().hasHeightForWidth()) + self.l_icon_format_playlist.setSizePolicy(sizePolicy5) self.lh_fpath_mt_playlist.addWidget(self.l_icon_format_playlist) self.l_format_playlist = QLabel(self.gb_path) self.l_format_playlist.setObjectName("l_format_playlist") - sizePolicy3.setHeightForWidth(self.l_format_playlist.sizePolicy().hasHeightForWidth()) - self.l_format_playlist.setSizePolicy(sizePolicy3) + sizePolicy4.setHeightForWidth(self.l_format_playlist.sizePolicy().hasHeightForWidth()) + self.l_format_playlist.setSizePolicy(sizePolicy4) self.lh_fpath_mt_playlist.addWidget(self.l_format_playlist) @@ -467,15 +587,15 @@ class Ui_DialogSettings: self.lh_path_fmt_mix.setObjectName("lh_path_fmt_mix") self.l_icon_format_mix = QLabel(self.gb_path) self.l_icon_format_mix.setObjectName("l_icon_format_mix") - sizePolicy6.setHeightForWidth(self.l_icon_format_mix.sizePolicy().hasHeightForWidth()) - self.l_icon_format_mix.setSizePolicy(sizePolicy6) + sizePolicy7.setHeightForWidth(self.l_icon_format_mix.sizePolicy().hasHeightForWidth()) + self.l_icon_format_mix.setSizePolicy(sizePolicy7) self.lh_path_fmt_mix.addWidget(self.l_icon_format_mix) self.l_format_mix = QLabel(self.gb_path) self.l_format_mix.setObjectName("l_format_mix") - sizePolicy3.setHeightForWidth(self.l_format_mix.sizePolicy().hasHeightForWidth()) - self.l_format_mix.setSizePolicy(sizePolicy3) + sizePolicy4.setHeightForWidth(self.l_format_mix.sizePolicy().hasHeightForWidth()) + self.l_format_mix.setSizePolicy(sizePolicy4) self.lh_path_fmt_mix.addWidget(self.l_format_mix) @@ -485,15 +605,15 @@ class Ui_DialogSettings: self.lh_path_binary_ffmpeg.setObjectName("lh_path_binary_ffmpeg") self.l_icon_path_binary_ffmpeg = QLabel(self.gb_path) self.l_icon_path_binary_ffmpeg.setObjectName("l_icon_path_binary_ffmpeg") - sizePolicy4.setHeightForWidth(self.l_icon_path_binary_ffmpeg.sizePolicy().hasHeightForWidth()) - self.l_icon_path_binary_ffmpeg.setSizePolicy(sizePolicy4) + sizePolicy5.setHeightForWidth(self.l_icon_path_binary_ffmpeg.sizePolicy().hasHeightForWidth()) + self.l_icon_path_binary_ffmpeg.setSizePolicy(sizePolicy5) self.lh_path_binary_ffmpeg.addWidget(self.l_icon_path_binary_ffmpeg) self.l_path_binary_ffmpeg = QLabel(self.gb_path) self.l_path_binary_ffmpeg.setObjectName("l_path_binary_ffmpeg") - sizePolicy3.setHeightForWidth(self.l_path_binary_ffmpeg.sizePolicy().hasHeightForWidth()) - self.l_path_binary_ffmpeg.setSizePolicy(sizePolicy3) + sizePolicy4.setHeightForWidth(self.l_path_binary_ffmpeg.sizePolicy().hasHeightForWidth()) + self.l_path_binary_ffmpeg.setSizePolicy(sizePolicy4) self.lh_path_binary_ffmpeg.addWidget(self.l_path_binary_ffmpeg) @@ -507,8 +627,8 @@ class Ui_DialogSettings: self.horizontalLayout_10.setObjectName("horizontalLayout_10") self.le_download_base_path = QLineEdit(self.gb_path) self.le_download_base_path.setObjectName("le_download_base_path") - sizePolicy2.setHeightForWidth(self.le_download_base_path.sizePolicy().hasHeightForWidth()) - self.le_download_base_path.setSizePolicy(sizePolicy2) + sizePolicy3.setHeightForWidth(self.le_download_base_path.sizePolicy().hasHeightForWidth()) + self.le_download_base_path.setSizePolicy(sizePolicy3) self.le_download_base_path.setDragEnabled(True) self.horizontalLayout_10.addWidget(self.le_download_base_path) @@ -551,8 +671,8 @@ class Ui_DialogSettings: self.horizontalLayout_4.setObjectName("horizontalLayout_4") self.le_format_playlist = QLineEdit(self.gb_path) self.le_format_playlist.setObjectName("le_format_playlist") - sizePolicy2.setHeightForWidth(self.le_format_playlist.sizePolicy().hasHeightForWidth()) - self.le_format_playlist.setSizePolicy(sizePolicy2) + sizePolicy3.setHeightForWidth(self.le_format_playlist.sizePolicy().hasHeightForWidth()) + self.le_format_playlist.setSizePolicy(sizePolicy3) self.horizontalLayout_4.addWidget(self.le_format_playlist) @@ -571,8 +691,8 @@ class Ui_DialogSettings: self.horizontalLayout_3.setObjectName("horizontalLayout_3") self.le_path_binary_ffmpeg = QLineEdit(self.gb_path) self.le_path_binary_ffmpeg.setObjectName("le_path_binary_ffmpeg") - sizePolicy2.setHeightForWidth(self.le_path_binary_ffmpeg.sizePolicy().hasHeightForWidth()) - self.le_path_binary_ffmpeg.setSizePolicy(sizePolicy2) + sizePolicy3.setHeightForWidth(self.le_path_binary_ffmpeg.sizePolicy().hasHeightForWidth()) + self.le_path_binary_ffmpeg.setSizePolicy(sizePolicy3) self.le_path_binary_ffmpeg.setDragEnabled(True) self.horizontalLayout_3.addWidget(self.le_path_binary_ffmpeg) @@ -588,7 +708,160 @@ class Ui_DialogSettings: self.horizontalLayout_2.setStretch(1, 50) - self.lv_main.addWidget(self.gb_path) + self.lv_page_paths.addWidget(self.gb_path) + + self.vs_page_paths = QSpacerItem(20, 40, QSizePolicy.Policy.Minimum, QSizePolicy.Policy.Expanding) + + self.lv_page_paths.addItem(self.vs_page_paths) + + self.sw_categories.addWidget(self.page_paths) + self.page_delimiters = QWidget() + self.page_delimiters.setObjectName("page_delimiters") + self.lv_page_delimiters = QVBoxLayout(self.page_delimiters) + self.lv_page_delimiters.setObjectName("lv_page_delimiters") + self.gb_delimiters = QGroupBox(self.page_delimiters) + self.gb_delimiters.setObjectName("gb_delimiters") + self.lv_delimiters = QVBoxLayout(self.gb_delimiters) + self.lv_delimiters.setObjectName("lv_delimiters") + self.lh_metadata_delimiter_artist = QHBoxLayout() + self.lh_metadata_delimiter_artist.setObjectName("lh_metadata_delimiter_artist") + self.l_icon_metadata_delimiter_artist = QLabel(self.gb_delimiters) + self.l_icon_metadata_delimiter_artist.setObjectName("l_icon_metadata_delimiter_artist") + sizePolicy5.setHeightForWidth(self.l_icon_metadata_delimiter_artist.sizePolicy().hasHeightForWidth()) + self.l_icon_metadata_delimiter_artist.setSizePolicy(sizePolicy5) + + self.lh_metadata_delimiter_artist.addWidget(self.l_icon_metadata_delimiter_artist) + + self.l_metadata_delimiter_artist = QLabel(self.gb_delimiters) + self.l_metadata_delimiter_artist.setObjectName("l_metadata_delimiter_artist") + sizePolicy5.setHeightForWidth(self.l_metadata_delimiter_artist.sizePolicy().hasHeightForWidth()) + self.l_metadata_delimiter_artist.setSizePolicy(sizePolicy5) + + self.lh_metadata_delimiter_artist.addWidget(self.l_metadata_delimiter_artist) + + self.le_metadata_delimiter_artist = QLineEdit(self.gb_delimiters) + self.le_metadata_delimiter_artist.setObjectName("le_metadata_delimiter_artist") + sizePolicy4.setHeightForWidth(self.le_metadata_delimiter_artist.sizePolicy().hasHeightForWidth()) + self.le_metadata_delimiter_artist.setSizePolicy(sizePolicy4) + self.le_metadata_delimiter_artist.setMaximumSize(QSize(100, 16777215)) + + self.lh_metadata_delimiter_artist.addWidget(self.le_metadata_delimiter_artist) + + self.hs_metadata_delimiter_artist = QSpacerItem( + 40, 20, QSizePolicy.Policy.Expanding, QSizePolicy.Policy.Minimum + ) + + self.lh_metadata_delimiter_artist.addItem(self.hs_metadata_delimiter_artist) + + self.lv_delimiters.addLayout(self.lh_metadata_delimiter_artist) + + self.lh_metadata_delimiter_album_artist = QHBoxLayout() + self.lh_metadata_delimiter_album_artist.setObjectName("lh_metadata_delimiter_album_artist") + self.l_icon_metadata_delimiter_album_artist = QLabel(self.gb_delimiters) + self.l_icon_metadata_delimiter_album_artist.setObjectName("l_icon_metadata_delimiter_album_artist") + sizePolicy5.setHeightForWidth(self.l_icon_metadata_delimiter_album_artist.sizePolicy().hasHeightForWidth()) + self.l_icon_metadata_delimiter_album_artist.setSizePolicy(sizePolicy5) + + self.lh_metadata_delimiter_album_artist.addWidget(self.l_icon_metadata_delimiter_album_artist) + + self.l_metadata_delimiter_album_artist = QLabel(self.gb_delimiters) + self.l_metadata_delimiter_album_artist.setObjectName("l_metadata_delimiter_album_artist") + sizePolicy5.setHeightForWidth(self.l_metadata_delimiter_album_artist.sizePolicy().hasHeightForWidth()) + self.l_metadata_delimiter_album_artist.setSizePolicy(sizePolicy5) + + self.lh_metadata_delimiter_album_artist.addWidget(self.l_metadata_delimiter_album_artist) + + self.le_metadata_delimiter_album_artist = QLineEdit(self.gb_delimiters) + self.le_metadata_delimiter_album_artist.setObjectName("le_metadata_delimiter_album_artist") + sizePolicy4.setHeightForWidth(self.le_metadata_delimiter_album_artist.sizePolicy().hasHeightForWidth()) + self.le_metadata_delimiter_album_artist.setSizePolicy(sizePolicy4) + self.le_metadata_delimiter_album_artist.setMaximumSize(QSize(100, 16777215)) + + self.lh_metadata_delimiter_album_artist.addWidget(self.le_metadata_delimiter_album_artist) + + self.hs_metadata_delimiter_album_artist = QSpacerItem( + 40, 20, QSizePolicy.Policy.Expanding, QSizePolicy.Policy.Minimum + ) + + self.lh_metadata_delimiter_album_artist.addItem(self.hs_metadata_delimiter_album_artist) + + self.lv_delimiters.addLayout(self.lh_metadata_delimiter_album_artist) + + self.lh_filename_delimiter_artist = QHBoxLayout() + self.lh_filename_delimiter_artist.setObjectName("lh_filename_delimiter_artist") + self.l_icon_filename_delimiter_artist = QLabel(self.gb_delimiters) + self.l_icon_filename_delimiter_artist.setObjectName("l_icon_filename_delimiter_artist") + sizePolicy5.setHeightForWidth(self.l_icon_filename_delimiter_artist.sizePolicy().hasHeightForWidth()) + self.l_icon_filename_delimiter_artist.setSizePolicy(sizePolicy5) + + self.lh_filename_delimiter_artist.addWidget(self.l_icon_filename_delimiter_artist) + + self.l_filename_delimiter_artist = QLabel(self.gb_delimiters) + self.l_filename_delimiter_artist.setObjectName("l_filename_delimiter_artist") + sizePolicy5.setHeightForWidth(self.l_filename_delimiter_artist.sizePolicy().hasHeightForWidth()) + self.l_filename_delimiter_artist.setSizePolicy(sizePolicy5) + + self.lh_filename_delimiter_artist.addWidget(self.l_filename_delimiter_artist) + + self.le_filename_delimiter_artist = QLineEdit(self.gb_delimiters) + self.le_filename_delimiter_artist.setObjectName("le_filename_delimiter_artist") + sizePolicy4.setHeightForWidth(self.le_filename_delimiter_artist.sizePolicy().hasHeightForWidth()) + self.le_filename_delimiter_artist.setSizePolicy(sizePolicy4) + self.le_filename_delimiter_artist.setMaximumSize(QSize(100, 16777215)) + + self.lh_filename_delimiter_artist.addWidget(self.le_filename_delimiter_artist) + + self.hs_filename_delimiter_artist = QSpacerItem( + 40, 20, QSizePolicy.Policy.Expanding, QSizePolicy.Policy.Minimum + ) + + self.lh_filename_delimiter_artist.addItem(self.hs_filename_delimiter_artist) + + self.lv_delimiters.addLayout(self.lh_filename_delimiter_artist) + + self.lh_filename_delimiter_album_artist = QHBoxLayout() + self.lh_filename_delimiter_album_artist.setObjectName("lh_filename_delimiter_album_artist") + self.l_icon_filename_delimiter_album_artist = QLabel(self.gb_delimiters) + self.l_icon_filename_delimiter_album_artist.setObjectName("l_icon_filename_delimiter_album_artist") + sizePolicy5.setHeightForWidth(self.l_icon_filename_delimiter_album_artist.sizePolicy().hasHeightForWidth()) + self.l_icon_filename_delimiter_album_artist.setSizePolicy(sizePolicy5) + + self.lh_filename_delimiter_album_artist.addWidget(self.l_icon_filename_delimiter_album_artist) + + self.l_filename_delimiter_album_artist = QLabel(self.gb_delimiters) + self.l_filename_delimiter_album_artist.setObjectName("l_filename_delimiter_album_artist") + sizePolicy5.setHeightForWidth(self.l_filename_delimiter_album_artist.sizePolicy().hasHeightForWidth()) + self.l_filename_delimiter_album_artist.setSizePolicy(sizePolicy5) + + self.lh_filename_delimiter_album_artist.addWidget(self.l_filename_delimiter_album_artist) + + self.le_filename_delimiter_album_artist = QLineEdit(self.gb_delimiters) + self.le_filename_delimiter_album_artist.setObjectName("le_filename_delimiter_album_artist") + sizePolicy4.setHeightForWidth(self.le_filename_delimiter_album_artist.sizePolicy().hasHeightForWidth()) + self.le_filename_delimiter_album_artist.setSizePolicy(sizePolicy4) + self.le_filename_delimiter_album_artist.setMaximumSize(QSize(100, 16777215)) + + self.lh_filename_delimiter_album_artist.addWidget(self.le_filename_delimiter_album_artist) + + self.hs_filename_delimiter_album_artist = QSpacerItem( + 40, 20, QSizePolicy.Policy.Expanding, QSizePolicy.Policy.Minimum + ) + + self.lh_filename_delimiter_album_artist.addItem(self.hs_filename_delimiter_album_artist) + + self.lv_delimiters.addLayout(self.lh_filename_delimiter_album_artist) + + self.lv_page_delimiters.addWidget(self.gb_delimiters) + + self.vs_page_delimiters = QSpacerItem(20, 40, QSizePolicy.Policy.Minimum, QSizePolicy.Policy.Expanding) + + self.lv_page_delimiters.addItem(self.vs_page_delimiters) + + self.sw_categories.addWidget(self.page_delimiters) + + self.lh_main_content.addWidget(self.sw_categories) + + self.lv_main.addLayout(self.lh_main_content) self.bb_dialog = QDialogButtonBox(DialogSettings) self.bb_dialog.setObjectName("bb_dialog") @@ -603,6 +876,8 @@ class Ui_DialogSettings: self.bb_dialog.accepted.connect(DialogSettings.accept) self.bb_dialog.rejected.connect(DialogSettings.reject) + self.sw_categories.setCurrentIndex(0) + QMetaObject.connectSlotsByName(DialogSettings) # setupUi @@ -656,5 +931,18 @@ class Ui_DialogSettings: self.l_path_binary_ffmpeg.setText(QCoreApplication.translate("DialogSettings", "TextLabel", None)) self.pb_download_base_path.setText(QCoreApplication.translate("DialogSettings", "...", None)) self.pb_path_binary_ffmpeg.setText(QCoreApplication.translate("DialogSettings", "...", None)) + self.gb_delimiters.setTitle(QCoreApplication.translate("DialogSettings", "Delimiters", None)) + self.l_icon_metadata_delimiter_artist.setText(QCoreApplication.translate("DialogSettings", "TextLabel", None)) + self.l_metadata_delimiter_artist.setText(QCoreApplication.translate("DialogSettings", "TextLabel", None)) + self.l_icon_metadata_delimiter_album_artist.setText( + QCoreApplication.translate("DialogSettings", "TextLabel", None) + ) + self.l_metadata_delimiter_album_artist.setText(QCoreApplication.translate("DialogSettings", "TextLabel", None)) + self.l_icon_filename_delimiter_artist.setText(QCoreApplication.translate("DialogSettings", "TextLabel", None)) + self.l_filename_delimiter_artist.setText(QCoreApplication.translate("DialogSettings", "TextLabel", None)) + self.l_icon_filename_delimiter_album_artist.setText( + QCoreApplication.translate("DialogSettings", "TextLabel", None) + ) + self.l_filename_delimiter_album_artist.setText(QCoreApplication.translate("DialogSettings", "TextLabel", None)) # retranslateUi diff --git a/tidal_dl_ng/ui/dialog_settings.ui b/tidal_dl_ng/ui/dialog_settings.ui index 3161095..77dd59a 100644 --- a/tidal_dl_ng/ui/dialog_settings.ui +++ b/tidal_dl_ng/ui/dialog_settings.ui @@ -6,8 +6,8 @@ <rect> <x>0</x> <y>0</y> - <width>640</width> - <height>832</height> + <width>808</width> + <height>379</height> </rect> </property> <property name="sizePolicy"> @@ -50,749 +50,1195 @@ <number>12</number> </property> <item> - <widget class="QGroupBox" name="gb_flags"> - <property name="sizePolicy"> - <sizepolicy hsizetype="Expanding" vsizetype="Fixed"> - <horstretch>100</horstretch> - <verstretch>100</verstretch> - </sizepolicy> - </property> - <property name="title"> - <string>Flags</string> - </property> - <property name="flat"> - <bool>false</bool> - </property> - <property name="checkable"> - <bool>false</bool> - </property> - <layout class="QVBoxLayout" name="lv_flags"> - <item> - <layout class="QHBoxLayout" name="lh_flags_1"> - <item> - <layout class="QVBoxLayout" name="lv_flag_video_download"> - <item> - <widget class="QCheckBox" name="cb_video_download"> - <property name="sizePolicy"> - <sizepolicy hsizetype="Expanding" vsizetype="Fixed"> - <horstretch>100</horstretch> - <verstretch>100</verstretch> - </sizepolicy> - </property> - <property name="text"> - <string>CheckBox</string> - </property> - </widget> - </item> - </layout> - </item> - <item> - <layout class="QVBoxLayout" name="lv_flag_video_convert"> - <item> - <widget class="QCheckBox" name="cb_video_convert_mp4"> - <property name="sizePolicy"> - <sizepolicy hsizetype="Expanding" vsizetype="Fixed"> - <horstretch>100</horstretch> - <verstretch>100</verstretch> - </sizepolicy> - </property> - <property name="text"> - <string>CheckBox</string> - </property> - </widget> - </item> - </layout> - </item> - </layout> - </item> - <item> - <layout class="QHBoxLayout" name="lh_flags_2"> - <item> - <layout class="QVBoxLayout" name="lv_flag_lyrics_embed"> - <item> - <widget class="QCheckBox" name="cb_lyrics_embed"> - <property name="sizePolicy"> - <sizepolicy hsizetype="Expanding" vsizetype="Fixed"> - <horstretch>0</horstretch> - <verstretch>0</verstretch> - </sizepolicy> - </property> - <property name="whatsThis"> - <string/> - </property> - <property name="text"> - <string>CheckBox</string> - </property> - </widget> - </item> - </layout> - </item> - <item> - <layout class="QVBoxLayout" name="lv_flag_lyrics_file"> - <item> - <widget class="QCheckBox" name="cb_lyrics_file"> - <property name="sizePolicy"> - <sizepolicy hsizetype="Expanding" vsizetype="Fixed"> - <horstretch>100</horstretch> - <verstretch>100</verstretch> - </sizepolicy> - </property> - <property name="text"> - <string>CheckBox</string> - </property> - </widget> - </item> - </layout> - </item> - </layout> - </item> - <item> - <layout class="QHBoxLayout" name="lh_flag_3"> - <item> - <layout class="QVBoxLayout" name="lv_flag_download_delay"> - <item> - <widget class="QCheckBox" name="cb_download_delay"> - <property name="sizePolicy"> - <sizepolicy hsizetype="Expanding" vsizetype="Fixed"> - <horstretch>100</horstretch> - <verstretch>100</verstretch> - </sizepolicy> - </property> - <property name="text"> - <string>CheckBox</string> - </property> - </widget> - </item> - </layout> - </item> - <item> - <layout class="QVBoxLayout" name="lv_flag_extract_flac"> - <item> - <widget class="QCheckBox" name="cb_extract_flac"> - <property name="sizePolicy"> - <sizepolicy hsizetype="Expanding" vsizetype="Fixed"> - <horstretch>0</horstretch> - <verstretch>0</verstretch> - </sizepolicy> - </property> - <property name="text"> - <string>CheckBox</string> - </property> - </widget> - </item> - </layout> - </item> - </layout> - </item> - <item> - <layout class="QHBoxLayout" name="lh_flags_4"> - <item> - <layout class="QVBoxLayout" name="lv_flag_metadata_cover_embed"> - <item> - <widget class="QCheckBox" name="cb_metadata_cover_embed"> - <property name="text"> - <string>CheckBox</string> - </property> - </widget> - </item> - </layout> - </item> - <item> - <layout class="QVBoxLayout" name="lv_flag_cover_album_file"> - <item> - <widget class="QCheckBox" name="cb_cover_album_file"> - <property name="text"> - <string>CheckBox</string> - </property> - </widget> - </item> - </layout> - </item> - </layout> - </item> - <item> - <layout class="QHBoxLayout" name="horizontalLayout"> - <item> - <layout class="QVBoxLayout" name="lv_flag_skip_existing"> - <item> - <widget class="QCheckBox" name="cb_skip_existing"> - <property name="text"> - <string>CheckBox</string> - </property> - </widget> - </item> - </layout> - </item> - <item> - <layout class="QVBoxLayout" name="lv_symlink_to_track"> - <item> - <widget class="QCheckBox" name="cb_symlink_to_track"> - <property name="text"> - <string>CheckBox</string> - </property> - </widget> - </item> - </layout> - </item> - </layout> - </item> - <item> - <layout class="QHBoxLayout" name="horizontalLayout_12"> - <item> - <layout class="QVBoxLayout" name="lv_playlist_create"> - <item> - <widget class="QCheckBox" name="cb_playlist_create"> - <property name="text"> - <string>CheckBox</string> - </property> - </widget> - </item> - </layout> - </item> - <item> - <layout class="QVBoxLayout" name="lv_mark_explicit"> - <item> - <widget class="QCheckBox" name="cb_mark_explicit"> - <property name="text"> - <string>CheckBox</string> - </property> - </widget> - </item> - </layout> - </item> - </layout> - </item> - <item> - <layout class="QHBoxLayout" name="horizontalLayout_13"> - <item> - <layout class="QVBoxLayout" name="lv_use_primary_album_artist"> - <item> - <widget class="QCheckBox" name="cb_use_primary_album_artist"> - <property name="text"> - <string>CheckBox</string> - </property> - </widget> - </item> - </layout> - </item> - <item> - <layout class="QVBoxLayout" name="lv_download_dolby_atmos"> - <item> - <widget class="QCheckBox" name="cb_download_dolby_atmos"> - <property name="text"> - <string>CheckBox</string> - </property> - </widget> - </item> - </layout> - </item> - </layout> - </item> - </layout> - </widget> - </item> - <item> - <widget class="QGroupBox" name="gb_choices"> - <property name="sizePolicy"> - <sizepolicy hsizetype="Preferred" vsizetype="Fixed"> - <horstretch>0</horstretch> - <verstretch>0</verstretch> - </sizepolicy> - </property> - <property name="title"> - <string>Choices</string> - </property> - <layout class="QVBoxLayout" name="lv_choices"> - <item> - <layout class="QHBoxLayout" name="lh_choices_quality_audio" stretch="0,0,50"> - <item> - <widget class="QLabel" name="l_icon_quality_audio"> - <property name="sizePolicy"> - <sizepolicy hsizetype="Fixed" vsizetype="Fixed"> - <horstretch>0</horstretch> - <verstretch>0</verstretch> - </sizepolicy> - </property> - <property name="text"> - <string>TextLabel</string> - </property> - </widget> - </item> - <item> - <widget class="QLabel" name="l_quality_audio"> - <property name="sizePolicy"> - <sizepolicy hsizetype="Fixed" vsizetype="Fixed"> - <horstretch>0</horstretch> - <verstretch>0</verstretch> - </sizepolicy> - </property> - <property name="text"> - <string>TextLabel</string> - </property> - </widget> - </item> - <item> - <widget class="QComboBox" name="c_quality_audio"/> - </item> - </layout> - </item> - <item> - <layout class="QHBoxLayout" name="lh_choices_quality_video" stretch="0,0,50"> - <item> - <widget class="QLabel" name="l_icon_quality_video"> - <property name="sizePolicy"> - <sizepolicy hsizetype="Fixed" vsizetype="Fixed"> - <horstretch>0</horstretch> - <verstretch>0</verstretch> - </sizepolicy> - </property> - <property name="text"> - <string>TextLabel</string> - </property> - </widget> - </item> - <item> - <widget class="QLabel" name="l_quality_video"> - <property name="sizePolicy"> - <sizepolicy hsizetype="Fixed" vsizetype="Fixed"> - <horstretch>0</horstretch> - <verstretch>0</verstretch> - </sizepolicy> - </property> - <property name="text"> - <string>TextLabel</string> - </property> - </widget> - </item> - <item> - <widget class="QComboBox" name="c_quality_video"/> - </item> - </layout> - </item> - <item> - <layout class="QHBoxLayout" name="lh_choices_cover_dimension" stretch="0,0,50"> - <property name="sizeConstraint"> - <enum>QLayout::SizeConstraint::SetDefaultConstraint</enum> - </property> - <item> - <widget class="QLabel" name="l_icon_metadata_cover_dimension"> - <property name="sizePolicy"> - <sizepolicy hsizetype="Fixed" vsizetype="Fixed"> - <horstretch>0</horstretch> - <verstretch>0</verstretch> - </sizepolicy> - </property> - <property name="text"> - <string>TextLabel</string> - </property> - </widget> - </item> - <item> - <widget class="QLabel" name="l_metadata_cover_dimension"> - <property name="sizePolicy"> - <sizepolicy hsizetype="Fixed" vsizetype="Fixed"> - <horstretch>0</horstretch> - <verstretch>0</verstretch> - </sizepolicy> - </property> - <property name="text"> - <string>TextLabel</string> - </property> - </widget> - </item> - <item> - <widget class="QComboBox" name="c_metadata_cover_dimension"> - <property name="sizePolicy"> - <sizepolicy hsizetype="Preferred" vsizetype="Fixed"> - <horstretch>10</horstretch> - <verstretch>0</verstretch> - </sizepolicy> - </property> - </widget> - </item> - </layout> - </item> - </layout> - </widget> - </item> - <item> - <widget class="QGroupBox" name="gb_numbers"> - <property name="title"> - <string>Numbers</string> - </property> - <layout class="QVBoxLayout" name="verticalLayout_8"> - <item> - <layout class="QHBoxLayout" name="horizontalLayout_9"> - <item> - <widget class="QLabel" name="l_album_track_num_pad_min"> - <property name="text"> - <string>TextLabel</string> - </property> - </widget> - </item> - <item> - <widget class="QLabel" name="l_icon_album_track_num_pad_min"> - <property name="text"> - <string>TextLabel</string> - </property> - </widget> - </item> - <item> - <widget class="QSpinBox" name="sb_album_track_num_pad_min"> - <property name="maximum"> - <number>4</number> - </property> - </widget> - </item> - </layout> - </item> - <item> - <layout class="QHBoxLayout" name="horizontalLayout_11"> - <item> - <widget class="QLabel" name="l_downloads_concurrent_max"> - <property name="text"> - <string>TextLabel</string> - </property> - </widget> - </item> - <item> - <widget class="QLabel" name="l_icon_downloads_concurrent_max"> - <property name="text"> - <string>TextLabel</string> - </property> - </widget> - </item> - <item> - <widget class="QSpinBox" name="sb_downloads_concurrent_max"> - <property name="minimum"> - <number>1</number> - </property> - <property name="maximum"> - <number>5</number> - </property> - </widget> - </item> - </layout> - </item> - </layout> - </widget> - </item> - <item> - <widget class="QGroupBox" name="gb_path"> - <property name="title"> - <string>Path</string> - </property> - <layout class="QHBoxLayout" name="horizontalLayout_2" stretch="0,50"> - <item> - <layout class="QVBoxLayout" name="verticalLayout_2"> - <item> - <layout class="QHBoxLayout" name="lh_path_base"> - <item> - <widget class="QLabel" name="l_icon_download_base_path"> - <property name="sizePolicy"> - <sizepolicy hsizetype="Fixed" vsizetype="Fixed"> - <horstretch>0</horstretch> - <verstretch>0</verstretch> - </sizepolicy> - </property> - <property name="text"> - <string>TextLabel</string> - </property> - </widget> - </item> - <item> - <widget class="QLabel" name="l_download_base_path"> - <property name="sizePolicy"> - <sizepolicy hsizetype="Preferred" vsizetype="Fixed"> - <horstretch>0</horstretch> - <verstretch>0</verstretch> - </sizepolicy> - </property> - <property name="text"> - <string>TextLabel</string> - </property> - </widget> - </item> - </layout> - </item> - <item> - <layout class="QHBoxLayout" name="lh_path_fmt_track"> - <item> - <widget class="QLabel" name="l_icon_format_track"> - <property name="sizePolicy"> - <sizepolicy hsizetype="Fixed" vsizetype="Fixed"> - <horstretch>0</horstretch> - <verstretch>0</verstretch> - </sizepolicy> - </property> - <property name="text"> - <string>TextLabel</string> - </property> - </widget> - </item> - <item> - <widget class="QLabel" name="l_format_track"> - <property name="sizePolicy"> - <sizepolicy hsizetype="Preferred" vsizetype="Fixed"> - <horstretch>0</horstretch> - <verstretch>0</verstretch> - </sizepolicy> - </property> - <property name="text"> - <string>TextLabel</string> - </property> - </widget> - </item> - </layout> - </item> - <item> - <layout class="QHBoxLayout" name="lh_path_fmt_video"> - <item> - <widget class="QLabel" name="l_icon_format_video"> - <property name="sizePolicy"> - <sizepolicy hsizetype="Fixed" vsizetype="Fixed"> - <horstretch>0</horstretch> - <verstretch>0</verstretch> - </sizepolicy> - </property> - <property name="text"> - <string>TextLabel</string> - </property> - </widget> - </item> - <item> - <widget class="QLabel" name="l_format_video"> - <property name="sizePolicy"> - <sizepolicy hsizetype="Preferred" vsizetype="Fixed"> - <horstretch>0</horstretch> - <verstretch>0</verstretch> - </sizepolicy> - </property> - <property name="text"> - <string>TextLabel</string> - </property> - </widget> - </item> - </layout> - </item> - <item> - <layout class="QHBoxLayout" name="lh_path_fmt_album"> - <item> - <widget class="QLabel" name="l_icon_format_album"> - <property name="sizePolicy"> - <sizepolicy hsizetype="Fixed" vsizetype="Preferred"> - <horstretch>0</horstretch> - <verstretch>0</verstretch> - </sizepolicy> - </property> - <property name="text"> - <string>TextLabel</string> - </property> - </widget> - </item> - <item> - <widget class="QLabel" name="l_format_album"> - <property name="sizePolicy"> - <sizepolicy hsizetype="Preferred" vsizetype="Fixed"> - <horstretch>0</horstretch> - <verstretch>0</verstretch> - </sizepolicy> - </property> - <property name="text"> - <string>TextLabel</string> - </property> - </widget> - </item> - </layout> - </item> - <item> - <layout class="QHBoxLayout" name="lh_fpath_mt_playlist"> - <item> - <widget class="QLabel" name="l_icon_format_playlist"> - <property name="sizePolicy"> - <sizepolicy hsizetype="Fixed" vsizetype="Fixed"> - <horstretch>0</horstretch> - <verstretch>0</verstretch> - </sizepolicy> - </property> - <property name="text"> - <string>TextLabel</string> - </property> - </widget> - </item> - <item> - <widget class="QLabel" name="l_format_playlist"> - <property name="sizePolicy"> - <sizepolicy hsizetype="Preferred" vsizetype="Fixed"> - <horstretch>0</horstretch> - <verstretch>0</verstretch> - </sizepolicy> - </property> - <property name="text"> - <string>TextLabel</string> - </property> - </widget> - </item> - </layout> - </item> - <item> - <layout class="QHBoxLayout" name="lh_path_fmt_mix"> - <item> - <widget class="QLabel" name="l_icon_format_mix"> - <property name="sizePolicy"> - <sizepolicy hsizetype="Fixed" vsizetype="Preferred"> - <horstretch>0</horstretch> - <verstretch>0</verstretch> - </sizepolicy> - </property> - <property name="text"> - <string>TextLabel</string> - </property> - </widget> - </item> - <item> - <widget class="QLabel" name="l_format_mix"> - <property name="sizePolicy"> - <sizepolicy hsizetype="Preferred" vsizetype="Fixed"> - <horstretch>0</horstretch> - <verstretch>0</verstretch> - </sizepolicy> - </property> - <property name="text"> - <string>TextLabel</string> - </property> - </widget> - </item> - </layout> - </item> - <item> - <layout class="QHBoxLayout" name="lh_path_binary_ffmpeg"> - <item> - <widget class="QLabel" name="l_icon_path_binary_ffmpeg"> - <property name="sizePolicy"> - <sizepolicy hsizetype="Fixed" vsizetype="Fixed"> - <horstretch>0</horstretch> - <verstretch>0</verstretch> - </sizepolicy> - </property> - <property name="text"> - <string>TextLabel</string> - </property> - </widget> - </item> - <item> - <widget class="QLabel" name="l_path_binary_ffmpeg"> - <property name="sizePolicy"> - <sizepolicy hsizetype="Preferred" vsizetype="Fixed"> - <horstretch>0</horstretch> - <verstretch>0</verstretch> - </sizepolicy> - </property> - <property name="text"> - <string>TextLabel</string> - </property> - </widget> - </item> - </layout> - </item> - </layout> - </item> - <item> - <layout class="QVBoxLayout" name="verticalLayout"> - <item> - <layout class="QHBoxLayout" name="horizontalLayout_10"> - <item> - <widget class="QLineEdit" name="le_download_base_path"> - <property name="sizePolicy"> - <sizepolicy hsizetype="Expanding" vsizetype="Fixed"> - <horstretch>0</horstretch> - <verstretch>0</verstretch> - </sizepolicy> - </property> - <property name="dragEnabled"> - <bool>true</bool> - </property> - </widget> - </item> - <item> - <widget class="QPushButton" name="pb_download_base_path"> - <property name="text"> - <string>...</string> - </property> - </widget> - </item> - </layout> - </item> - <item> - <layout class="QHBoxLayout" name="horizontalLayout_7"> - <item> - <widget class="QLineEdit" name="le_format_track"/> - </item> - </layout> - </item> - <item> - <layout class="QHBoxLayout" name="horizontalLayout_5"> - <item> - <widget class="QLineEdit" name="le_format_video"/> - </item> - </layout> - </item> - <item> - <layout class="QHBoxLayout" name="horizontalLayout_6"> - <item> - <widget class="QLineEdit" name="le_format_album"/> - </item> - </layout> - </item> - <item> - <layout class="QHBoxLayout" name="horizontalLayout_4"> - <item> - <widget class="QLineEdit" name="le_format_playlist"> - <property name="sizePolicy"> - <sizepolicy hsizetype="Expanding" vsizetype="Fixed"> - <horstretch>0</horstretch> - <verstretch>0</verstretch> - </sizepolicy> - </property> - </widget> - </item> - </layout> - </item> - <item> - <layout class="QHBoxLayout" name="horizontalLayout_8"> - <item> - <widget class="QLineEdit" name="le_format_mix"/> - </item> - </layout> - </item> - <item> - <layout class="QHBoxLayout" name="horizontalLayout_3"> - <item> - <widget class="QLineEdit" name="le_path_binary_ffmpeg"> - <property name="sizePolicy"> - <sizepolicy hsizetype="Expanding" vsizetype="Fixed"> - <horstretch>0</horstretch> - <verstretch>0</verstretch> - </sizepolicy> - </property> - <property name="dragEnabled"> - <bool>true</bool> - </property> - </widget> - </item> - <item> - <widget class="QPushButton" name="pb_path_binary_ffmpeg"> - <property name="text"> - <string>...</string> - </property> - </widget> - </item> - </layout> - </item> - </layout> - </item> - </layout> - </widget> + <layout class="QHBoxLayout" name="lh_main_content"> + <item> + <widget class="QListWidget" name="lw_categories"> + <property name="sizePolicy"> + <sizepolicy hsizetype="Fixed" vsizetype="Expanding"> + <horstretch>0</horstretch> + <verstretch>0</verstretch> + </sizepolicy> + </property> + <property name="minimumSize"> + <size> + <width>150</width> + <height>0</height> + </size> + </property> + <property name="maximumSize"> + <size> + <width>200</width> + <height>16777215</height> + </size> + </property> + <property name="styleSheet"> + <string notr="true">QListWidget { + background-color: #2b2b2b; + border: 1px solid #3d3d3d; + border-radius: 4px; + padding: 4px; + outline: none; +} + +QListWidget::item { + padding: 4px 3px; + border-radius: 3px; + margin: 2px 0px; + color: #e0e0e0; +} + +QListWidget::item:selected { + background-color: #3d5a80; + color: white; + font-weight: bold; +} + +QListWidget::item:hover:!selected { + background-color: #3a3a3a; + color: white; +} + +QListWidget::item:focus { + outline: none; +}</string> + </property> + <property name="frameShape"> + <enum>QFrame::Shape::StyledPanel</enum> + </property> + <property name="frameShadow"> + <enum>QFrame::Shadow::Raised</enum> + </property> + <property name="midLineWidth"> + <number>-1</number> + </property> + <property name="resizeMode"> + <enum>QListView::ResizeMode::Adjust</enum> + </property> + <property name="spacing"> + <number>0</number> + </property> + </widget> + </item> + <item> + <widget class="QStackedWidget" name="sw_categories"> + <property name="styleSheet"> + <string notr="true">QStackedWidget { + background-color: #333333; + border: 1px solid #3d3d3d; + border-radius: 4px; +} + +QWidget { + background-color: transparent; +} + +QGroupBox { + background-color: #3a3a3a; + border: 1px solid #4a4a4a; + border-radius: 6px; + margin-top: 12px; + padding-top: 12px; + font-weight: bold; +} + +QGroupBox::title { + subcontrol-origin: margin; + subcontrol-position: top left; + padding: 4px 8px; + background-color: #3a3a3a; + border-radius: 4px; +}</string> + </property> + <property name="frameShape"> + <enum>QFrame::Shape::StyledPanel</enum> + </property> + <property name="frameShadow"> + <enum>QFrame::Shadow::Plain</enum> + </property> + <property name="midLineWidth"> + <number>1</number> + </property> + <property name="currentIndex"> + <number>0</number> + </property> + <widget class="QWidget" name="page_flags"> + <layout class="QVBoxLayout" name="lv_page_flags"> + <item> + <widget class="QGroupBox" name="gb_flags"> + <property name="sizePolicy"> + <sizepolicy hsizetype="Expanding" vsizetype="Fixed"> + <horstretch>100</horstretch> + <verstretch>100</verstretch> + </sizepolicy> + </property> + <property name="title"> + <string>Flags</string> + </property> + <property name="flat"> + <bool>false</bool> + </property> + <property name="checkable"> + <bool>false</bool> + </property> + <layout class="QVBoxLayout" name="lv_flags"> + <item> + <layout class="QHBoxLayout" name="lh_flags_1"> + <item> + <layout class="QVBoxLayout" name="lv_flag_video_download"> + <item> + <widget class="QCheckBox" name="cb_video_download"> + <property name="sizePolicy"> + <sizepolicy hsizetype="Expanding" vsizetype="Fixed"> + <horstretch>100</horstretch> + <verstretch>100</verstretch> + </sizepolicy> + </property> + <property name="text"> + <string>CheckBox</string> + </property> + </widget> + </item> + </layout> + </item> + <item> + <layout class="QVBoxLayout" name="lv_flag_video_convert"> + <item> + <widget class="QCheckBox" name="cb_video_convert_mp4"> + <property name="sizePolicy"> + <sizepolicy hsizetype="Expanding" vsizetype="Fixed"> + <horstretch>100</horstretch> + <verstretch>100</verstretch> + </sizepolicy> + </property> + <property name="text"> + <string>CheckBox</string> + </property> + </widget> + </item> + </layout> + </item> + </layout> + </item> + <item> + <layout class="QHBoxLayout" name="lh_flags_2"> + <item> + <layout class="QVBoxLayout" name="lv_flag_lyrics_embed"> + <item> + <widget class="QCheckBox" name="cb_lyrics_embed"> + <property name="sizePolicy"> + <sizepolicy hsizetype="Expanding" vsizetype="Fixed"> + <horstretch>0</horstretch> + <verstretch>0</verstretch> + </sizepolicy> + </property> + <property name="whatsThis"> + <string/> + </property> + <property name="text"> + <string>CheckBox</string> + </property> + </widget> + </item> + </layout> + </item> + <item> + <layout class="QVBoxLayout" name="lv_flag_lyrics_file"> + <item> + <widget class="QCheckBox" name="cb_lyrics_file"> + <property name="sizePolicy"> + <sizepolicy hsizetype="Expanding" vsizetype="Fixed"> + <horstretch>100</horstretch> + <verstretch>100</verstretch> + </sizepolicy> + </property> + <property name="text"> + <string>CheckBox</string> + </property> + </widget> + </item> + </layout> + </item> + </layout> + </item> + <item> + <layout class="QHBoxLayout" name="lh_flag_3"> + <item> + <layout class="QVBoxLayout" name="lv_flag_download_delay"> + <item> + <widget class="QCheckBox" name="cb_download_delay"> + <property name="sizePolicy"> + <sizepolicy hsizetype="Expanding" vsizetype="Fixed"> + <horstretch>100</horstretch> + <verstretch>100</verstretch> + </sizepolicy> + </property> + <property name="text"> + <string>CheckBox</string> + </property> + </widget> + </item> + </layout> + </item> + <item> + <layout class="QVBoxLayout" name="lv_flag_extract_flac"> + <item> + <widget class="QCheckBox" name="cb_extract_flac"> + <property name="sizePolicy"> + <sizepolicy hsizetype="Expanding" vsizetype="Fixed"> + <horstretch>0</horstretch> + <verstretch>0</verstretch> + </sizepolicy> + </property> + <property name="text"> + <string>CheckBox</string> + </property> + </widget> + </item> + </layout> + </item> + </layout> + </item> + <item> + <layout class="QHBoxLayout" name="lh_flags_4"> + <item> + <layout class="QVBoxLayout" name="lv_flag_metadata_cover_embed"> + <item> + <widget class="QCheckBox" name="cb_metadata_cover_embed"> + <property name="text"> + <string>CheckBox</string> + </property> + </widget> + </item> + </layout> + </item> + <item> + <layout class="QVBoxLayout" name="lv_flag_cover_album_file"> + <item> + <widget class="QCheckBox" name="cb_cover_album_file"> + <property name="text"> + <string>CheckBox</string> + </property> + </widget> + </item> + </layout> + </item> + </layout> + </item> + <item> + <layout class="QHBoxLayout" name="horizontalLayout"> + <item> + <layout class="QVBoxLayout" name="lv_flag_skip_existing"> + <item> + <widget class="QCheckBox" name="cb_skip_existing"> + <property name="text"> + <string>CheckBox</string> + </property> + </widget> + </item> + </layout> + </item> + <item> + <layout class="QVBoxLayout" name="lv_symlink_to_track"> + <item> + <widget class="QCheckBox" name="cb_symlink_to_track"> + <property name="text"> + <string>CheckBox</string> + </property> + </widget> + </item> + </layout> + </item> + </layout> + </item> + <item> + <layout class="QHBoxLayout" name="horizontalLayout_12"> + <item> + <layout class="QVBoxLayout" name="lv_playlist_create"> + <item> + <widget class="QCheckBox" name="cb_playlist_create"> + <property name="text"> + <string>CheckBox</string> + </property> + </widget> + </item> + </layout> + </item> + <item> + <layout class="QVBoxLayout" name="lv_mark_explicit"> + <item> + <widget class="QCheckBox" name="cb_mark_explicit"> + <property name="text"> + <string>CheckBox</string> + </property> + </widget> + </item> + </layout> + </item> + </layout> + </item> + <item> + <layout class="QHBoxLayout" name="horizontalLayout_13"> + <item> + <layout class="QVBoxLayout" name="lv_use_primary_album_artist"> + <item> + <widget class="QCheckBox" name="cb_use_primary_album_artist"> + <property name="text"> + <string>CheckBox</string> + </property> + </widget> + </item> + </layout> + </item> + <item> + <layout class="QVBoxLayout" name="lv_download_dolby_atmos"> + <item> + <widget class="QCheckBox" name="cb_download_dolby_atmos"> + <property name="text"> + <string>CheckBox</string> + </property> + </widget> + </item> + </layout> + </item> + </layout> + </item> + </layout> + </widget> + </item> + <item> + <spacer name="vs_page_flags"> + <property name="orientation"> + <enum>Qt::Orientation::Vertical</enum> + </property> + <property name="sizeHint" stdset="0"> + <size> + <width>20</width> + <height>40</height> + </size> + </property> + </spacer> + </item> + </layout> + </widget> + <widget class="QWidget" name="page_quality"> + <layout class="QVBoxLayout" name="lv_page_quality"> + <item> + <widget class="QGroupBox" name="gb_choices"> + <property name="sizePolicy"> + <sizepolicy hsizetype="Preferred" vsizetype="Fixed"> + <horstretch>0</horstretch> + <verstretch>0</verstretch> + </sizepolicy> + </property> + <property name="title"> + <string>Choices</string> + </property> + <layout class="QVBoxLayout" name="lv_choices"> + <item> + <layout class="QHBoxLayout" name="lh_choices_quality_audio" stretch="0,0,50"> + <item> + <widget class="QLabel" name="l_icon_quality_audio"> + <property name="sizePolicy"> + <sizepolicy hsizetype="Fixed" vsizetype="Fixed"> + <horstretch>0</horstretch> + <verstretch>0</verstretch> + </sizepolicy> + </property> + <property name="text"> + <string>TextLabel</string> + </property> + </widget> + </item> + <item> + <widget class="QLabel" name="l_quality_audio"> + <property name="sizePolicy"> + <sizepolicy hsizetype="Fixed" vsizetype="Fixed"> + <horstretch>0</horstretch> + <verstretch>0</verstretch> + </sizepolicy> + </property> + <property name="text"> + <string>TextLabel</string> + </property> + </widget> + </item> + <item> + <widget class="QComboBox" name="c_quality_audio"/> + </item> + </layout> + </item> + <item> + <layout class="QHBoxLayout" name="lh_choices_quality_video" stretch="0,0,50"> + <item> + <widget class="QLabel" name="l_icon_quality_video"> + <property name="sizePolicy"> + <sizepolicy hsizetype="Fixed" vsizetype="Fixed"> + <horstretch>0</horstretch> + <verstretch>0</verstretch> + </sizepolicy> + </property> + <property name="text"> + <string>TextLabel</string> + </property> + </widget> + </item> + <item> + <widget class="QLabel" name="l_quality_video"> + <property name="sizePolicy"> + <sizepolicy hsizetype="Fixed" vsizetype="Fixed"> + <horstretch>0</horstretch> + <verstretch>0</verstretch> + </sizepolicy> + </property> + <property name="text"> + <string>TextLabel</string> + </property> + </widget> + </item> + <item> + <widget class="QComboBox" name="c_quality_video"/> + </item> + </layout> + </item> + <item> + <layout class="QHBoxLayout" name="lh_choices_cover_dimension" stretch="0,0,50"> + <property name="sizeConstraint"> + <enum>QLayout::SizeConstraint::SetDefaultConstraint</enum> + </property> + <item> + <widget class="QLabel" name="l_icon_metadata_cover_dimension"> + <property name="sizePolicy"> + <sizepolicy hsizetype="Fixed" vsizetype="Fixed"> + <horstretch>0</horstretch> + <verstretch>0</verstretch> + </sizepolicy> + </property> + <property name="text"> + <string>TextLabel</string> + </property> + </widget> + </item> + <item> + <widget class="QLabel" name="l_metadata_cover_dimension"> + <property name="sizePolicy"> + <sizepolicy hsizetype="Fixed" vsizetype="Fixed"> + <horstretch>0</horstretch> + <verstretch>0</verstretch> + </sizepolicy> + </property> + <property name="text"> + <string>TextLabel</string> + </property> + </widget> + </item> + <item> + <widget class="QComboBox" name="c_metadata_cover_dimension"> + <property name="sizePolicy"> + <sizepolicy hsizetype="Preferred" vsizetype="Fixed"> + <horstretch>10</horstretch> + <verstretch>0</verstretch> + </sizepolicy> + </property> + </widget> + </item> + </layout> + </item> + </layout> + </widget> + </item> + <item> + <spacer name="vs_page_quality"> + <property name="orientation"> + <enum>Qt::Orientation::Vertical</enum> + </property> + <property name="sizeHint" stdset="0"> + <size> + <width>20</width> + <height>40</height> + </size> + </property> + </spacer> + </item> + </layout> + </widget> + <widget class="QWidget" name="page_numbers"> + <layout class="QVBoxLayout" name="lv_page_numbers"> + <item> + <widget class="QGroupBox" name="gb_numbers"> + <property name="title"> + <string>Numbers</string> + </property> + <layout class="QVBoxLayout" name="verticalLayout_8"> + <item> + <layout class="QHBoxLayout" name="horizontalLayout_9"> + <item> + <widget class="QLabel" name="l_album_track_num_pad_min"> + <property name="text"> + <string>TextLabel</string> + </property> + </widget> + </item> + <item> + <widget class="QLabel" name="l_icon_album_track_num_pad_min"> + <property name="text"> + <string>TextLabel</string> + </property> + </widget> + </item> + <item> + <widget class="QSpinBox" name="sb_album_track_num_pad_min"> + <property name="maximum"> + <number>4</number> + </property> + </widget> + </item> + </layout> + </item> + <item> + <layout class="QHBoxLayout" name="horizontalLayout_11"> + <item> + <widget class="QLabel" name="l_downloads_concurrent_max"> + <property name="text"> + <string>TextLabel</string> + </property> + </widget> + </item> + <item> + <widget class="QLabel" name="l_icon_downloads_concurrent_max"> + <property name="text"> + <string>TextLabel</string> + </property> + </widget> + </item> + <item> + <widget class="QSpinBox" name="sb_downloads_concurrent_max"> + <property name="minimum"> + <number>1</number> + </property> + <property name="maximum"> + <number>5</number> + </property> + </widget> + </item> + </layout> + </item> + </layout> + </widget> + </item> + <item> + <spacer name="vs_page_numbers"> + <property name="orientation"> + <enum>Qt::Orientation::Vertical</enum> + </property> + <property name="sizeHint" stdset="0"> + <size> + <width>20</width> + <height>40</height> + </size> + </property> + </spacer> + </item> + </layout> + </widget> + <widget class="QWidget" name="page_paths"> + <layout class="QVBoxLayout" name="lv_page_paths"> + <item> + <widget class="QGroupBox" name="gb_path"> + <property name="title"> + <string>Path</string> + </property> + <layout class="QHBoxLayout" name="horizontalLayout_2" stretch="0,50"> + <item> + <layout class="QVBoxLayout" name="verticalLayout_2"> + <item> + <layout class="QHBoxLayout" name="lh_path_base"> + <item> + <widget class="QLabel" name="l_icon_download_base_path"> + <property name="sizePolicy"> + <sizepolicy hsizetype="Fixed" vsizetype="Fixed"> + <horstretch>0</horstretch> + <verstretch>0</verstretch> + </sizepolicy> + </property> + <property name="text"> + <string>TextLabel</string> + </property> + </widget> + </item> + <item> + <widget class="QLabel" name="l_download_base_path"> + <property name="sizePolicy"> + <sizepolicy hsizetype="Preferred" vsizetype="Fixed"> + <horstretch>0</horstretch> + <verstretch>0</verstretch> + </sizepolicy> + </property> + <property name="text"> + <string>TextLabel</string> + </property> + </widget> + </item> + </layout> + </item> + <item> + <layout class="QHBoxLayout" name="lh_path_fmt_track"> + <item> + <widget class="QLabel" name="l_icon_format_track"> + <property name="sizePolicy"> + <sizepolicy hsizetype="Fixed" vsizetype="Fixed"> + <horstretch>0</horstretch> + <verstretch>0</verstretch> + </sizepolicy> + </property> + <property name="text"> + <string>TextLabel</string> + </property> + </widget> + </item> + <item> + <widget class="QLabel" name="l_format_track"> + <property name="sizePolicy"> + <sizepolicy hsizetype="Preferred" vsizetype="Fixed"> + <horstretch>0</horstretch> + <verstretch>0</verstretch> + </sizepolicy> + </property> + <property name="text"> + <string>TextLabel</string> + </property> + </widget> + </item> + </layout> + </item> + <item> + <layout class="QHBoxLayout" name="lh_path_fmt_video"> + <item> + <widget class="QLabel" name="l_icon_format_video"> + <property name="sizePolicy"> + <sizepolicy hsizetype="Fixed" vsizetype="Fixed"> + <horstretch>0</horstretch> + <verstretch>0</verstretch> + </sizepolicy> + </property> + <property name="text"> + <string>TextLabel</string> + </property> + </widget> + </item> + <item> + <widget class="QLabel" name="l_format_video"> + <property name="sizePolicy"> + <sizepolicy hsizetype="Preferred" vsizetype="Fixed"> + <horstretch>0</horstretch> + <verstretch>0</verstretch> + </sizepolicy> + </property> + <property name="text"> + <string>TextLabel</string> + </property> + </widget> + </item> + </layout> + </item> + <item> + <layout class="QHBoxLayout" name="lh_path_fmt_album"> + <item> + <widget class="QLabel" name="l_icon_format_album"> + <property name="sizePolicy"> + <sizepolicy hsizetype="Fixed" vsizetype="Preferred"> + <horstretch>0</horstretch> + <verstretch>0</verstretch> + </sizepolicy> + </property> + <property name="text"> + <string>TextLabel</string> + </property> + </widget> + </item> + <item> + <widget class="QLabel" name="l_format_album"> + <property name="sizePolicy"> + <sizepolicy hsizetype="Preferred" vsizetype="Fixed"> + <horstretch>0</horstretch> + <verstretch>0</verstretch> + </sizepolicy> + </property> + <property name="text"> + <string>TextLabel</string> + </property> + </widget> + </item> + </layout> + </item> + <item> + <layout class="QHBoxLayout" name="lh_fpath_mt_playlist"> + <item> + <widget class="QLabel" name="l_icon_format_playlist"> + <property name="sizePolicy"> + <sizepolicy hsizetype="Fixed" vsizetype="Fixed"> + <horstretch>0</horstretch> + <verstretch>0</verstretch> + </sizepolicy> + </property> + <property name="text"> + <string>TextLabel</string> + </property> + </widget> + </item> + <item> + <widget class="QLabel" name="l_format_playlist"> + <property name="sizePolicy"> + <sizepolicy hsizetype="Preferred" vsizetype="Fixed"> + <horstretch>0</horstretch> + <verstretch>0</verstretch> + </sizepolicy> + </property> + <property name="text"> + <string>TextLabel</string> + </property> + </widget> + </item> + </layout> + </item> + <item> + <layout class="QHBoxLayout" name="lh_path_fmt_mix"> + <item> + <widget class="QLabel" name="l_icon_format_mix"> + <property name="sizePolicy"> + <sizepolicy hsizetype="Fixed" vsizetype="Preferred"> + <horstretch>0</horstretch> + <verstretch>0</verstretch> + </sizepolicy> + </property> + <property name="text"> + <string>TextLabel</string> + </property> + </widget> + </item> + <item> + <widget class="QLabel" name="l_format_mix"> + <property name="sizePolicy"> + <sizepolicy hsizetype="Preferred" vsizetype="Fixed"> + <horstretch>0</horstretch> + <verstretch>0</verstretch> + </sizepolicy> + </property> + <property name="text"> + <string>TextLabel</string> + </property> + </widget> + </item> + </layout> + </item> + <item> + <layout class="QHBoxLayout" name="lh_path_binary_ffmpeg"> + <item> + <widget class="QLabel" name="l_icon_path_binary_ffmpeg"> + <property name="sizePolicy"> + <sizepolicy hsizetype="Fixed" vsizetype="Fixed"> + <horstretch>0</horstretch> + <verstretch>0</verstretch> + </sizepolicy> + </property> + <property name="text"> + <string>TextLabel</string> + </property> + </widget> + </item> + <item> + <widget class="QLabel" name="l_path_binary_ffmpeg"> + <property name="sizePolicy"> + <sizepolicy hsizetype="Preferred" vsizetype="Fixed"> + <horstretch>0</horstretch> + <verstretch>0</verstretch> + </sizepolicy> + </property> + <property name="text"> + <string>TextLabel</string> + </property> + </widget> + </item> + </layout> + </item> + </layout> + </item> + <item> + <layout class="QVBoxLayout" name="verticalLayout"> + <item> + <layout class="QHBoxLayout" name="horizontalLayout_10"> + <item> + <widget class="QLineEdit" name="le_download_base_path"> + <property name="sizePolicy"> + <sizepolicy hsizetype="Expanding" vsizetype="Fixed"> + <horstretch>0</horstretch> + <verstretch>0</verstretch> + </sizepolicy> + </property> + <property name="dragEnabled"> + <bool>true</bool> + </property> + </widget> + </item> + <item> + <widget class="QPushButton" name="pb_download_base_path"> + <property name="text"> + <string>...</string> + </property> + </widget> + </item> + </layout> + </item> + <item> + <layout class="QHBoxLayout" name="horizontalLayout_7"> + <item> + <widget class="QLineEdit" name="le_format_track"/> + </item> + </layout> + </item> + <item> + <layout class="QHBoxLayout" name="horizontalLayout_5"> + <item> + <widget class="QLineEdit" name="le_format_video"/> + </item> + </layout> + </item> + <item> + <layout class="QHBoxLayout" name="horizontalLayout_6"> + <item> + <widget class="QLineEdit" name="le_format_album"/> + </item> + </layout> + </item> + <item> + <layout class="QHBoxLayout" name="horizontalLayout_4"> + <item> + <widget class="QLineEdit" name="le_format_playlist"> + <property name="sizePolicy"> + <sizepolicy hsizetype="Expanding" vsizetype="Fixed"> + <horstretch>0</horstretch> + <verstretch>0</verstretch> + </sizepolicy> + </property> + </widget> + </item> + </layout> + </item> + <item> + <layout class="QHBoxLayout" name="horizontalLayout_8"> + <item> + <widget class="QLineEdit" name="le_format_mix"/> + </item> + </layout> + </item> + <item> + <layout class="QHBoxLayout" name="horizontalLayout_3"> + <item> + <widget class="QLineEdit" name="le_path_binary_ffmpeg"> + <property name="sizePolicy"> + <sizepolicy hsizetype="Expanding" vsizetype="Fixed"> + <horstretch>0</horstretch> + <verstretch>0</verstretch> + </sizepolicy> + </property> + <property name="dragEnabled"> + <bool>true</bool> + </property> + </widget> + </item> + <item> + <widget class="QPushButton" name="pb_path_binary_ffmpeg"> + <property name="text"> + <string>...</string> + </property> + </widget> + </item> + </layout> + </item> + </layout> + </item> + </layout> + </widget> + </item> + <item> + <spacer name="vs_page_paths"> + <property name="orientation"> + <enum>Qt::Orientation::Vertical</enum> + </property> + <property name="sizeHint" stdset="0"> + <size> + <width>20</width> + <height>40</height> + </size> + </property> + </spacer> + </item> + </layout> + </widget> + <widget class="QWidget" name="page_delimiters"> + <layout class="QVBoxLayout" name="lv_page_delimiters"> + <item> + <widget class="QGroupBox" name="gb_delimiters"> + <property name="title"> + <string>Delimiters</string> + </property> + <layout class="QVBoxLayout" name="lv_delimiters"> + <item> + <layout class="QHBoxLayout" name="lh_metadata_delimiter_artist"> + <item> + <widget class="QLabel" name="l_icon_metadata_delimiter_artist"> + <property name="sizePolicy"> + <sizepolicy hsizetype="Fixed" vsizetype="Fixed"> + <horstretch>0</horstretch> + <verstretch>0</verstretch> + </sizepolicy> + </property> + <property name="text"> + <string>TextLabel</string> + </property> + </widget> + </item> + <item> + <widget class="QLabel" name="l_metadata_delimiter_artist"> + <property name="sizePolicy"> + <sizepolicy hsizetype="Fixed" vsizetype="Fixed"> + <horstretch>0</horstretch> + <verstretch>0</verstretch> + </sizepolicy> + </property> + <property name="text"> + <string>TextLabel</string> + </property> + </widget> + </item> + <item> + <widget class="QLineEdit" name="le_metadata_delimiter_artist"> + <property name="sizePolicy"> + <sizepolicy hsizetype="Preferred" vsizetype="Fixed"> + <horstretch>0</horstretch> + <verstretch>0</verstretch> + </sizepolicy> + </property> + <property name="maximumSize"> + <size> + <width>100</width> + <height>16777215</height> + </size> + </property> + </widget> + </item> + <item> + <spacer name="hs_metadata_delimiter_artist"> + <property name="orientation"> + <enum>Qt::Orientation::Horizontal</enum> + </property> + <property name="sizeHint" stdset="0"> + <size> + <width>40</width> + <height>20</height> + </size> + </property> + </spacer> + </item> + </layout> + </item> + <item> + <layout class="QHBoxLayout" name="lh_metadata_delimiter_album_artist"> + <item> + <widget class="QLabel" name="l_icon_metadata_delimiter_album_artist"> + <property name="sizePolicy"> + <sizepolicy hsizetype="Fixed" vsizetype="Fixed"> + <horstretch>0</horstretch> + <verstretch>0</verstretch> + </sizepolicy> + </property> + <property name="text"> + <string>TextLabel</string> + </property> + </widget> + </item> + <item> + <widget class="QLabel" name="l_metadata_delimiter_album_artist"> + <property name="sizePolicy"> + <sizepolicy hsizetype="Fixed" vsizetype="Fixed"> + <horstretch>0</horstretch> + <verstretch>0</verstretch> + </sizepolicy> + </property> + <property name="text"> + <string>TextLabel</string> + </property> + </widget> + </item> + <item> + <widget class="QLineEdit" name="le_metadata_delimiter_album_artist"> + <property name="sizePolicy"> + <sizepolicy hsizetype="Preferred" vsizetype="Fixed"> + <horstretch>0</horstretch> + <verstretch>0</verstretch> + </sizepolicy> + </property> + <property name="maximumSize"> + <size> + <width>100</width> + <height>16777215</height> + </size> + </property> + </widget> + </item> + <item> + <spacer name="hs_metadata_delimiter_album_artist"> + <property name="orientation"> + <enum>Qt::Orientation::Horizontal</enum> + </property> + <property name="sizeHint" stdset="0"> + <size> + <width>40</width> + <height>20</height> + </size> + </property> + </spacer> + </item> + </layout> + </item> + <item> + <layout class="QHBoxLayout" name="lh_filename_delimiter_artist"> + <item> + <widget class="QLabel" name="l_icon_filename_delimiter_artist"> + <property name="sizePolicy"> + <sizepolicy hsizetype="Fixed" vsizetype="Fixed"> + <horstretch>0</horstretch> + <verstretch>0</verstretch> + </sizepolicy> + </property> + <property name="text"> + <string>TextLabel</string> + </property> + </widget> + </item> + <item> + <widget class="QLabel" name="l_filename_delimiter_artist"> + <property name="sizePolicy"> + <sizepolicy hsizetype="Fixed" vsizetype="Fixed"> + <horstretch>0</horstretch> + <verstretch>0</verstretch> + </sizepolicy> + </property> + <property name="text"> + <string>TextLabel</string> + </property> + </widget> + </item> + <item> + <widget class="QLineEdit" name="le_filename_delimiter_artist"> + <property name="sizePolicy"> + <sizepolicy hsizetype="Preferred" vsizetype="Fixed"> + <horstretch>0</horstretch> + <verstretch>0</verstretch> + </sizepolicy> + </property> + <property name="maximumSize"> + <size> + <width>100</width> + <height>16777215</height> + </size> + </property> + </widget> + </item> + <item> + <spacer name="hs_filename_delimiter_artist"> + <property name="orientation"> + <enum>Qt::Orientation::Horizontal</enum> + </property> + <property name="sizeHint" stdset="0"> + <size> + <width>40</width> + <height>20</height> + </size> + </property> + </spacer> + </item> + </layout> + </item> + <item> + <layout class="QHBoxLayout" name="lh_filename_delimiter_album_artist"> + <item> + <widget class="QLabel" name="l_icon_filename_delimiter_album_artist"> + <property name="sizePolicy"> + <sizepolicy hsizetype="Fixed" vsizetype="Fixed"> + <horstretch>0</horstretch> + <verstretch>0</verstretch> + </sizepolicy> + </property> + <property name="text"> + <string>TextLabel</string> + </property> + </widget> + </item> + <item> + <widget class="QLabel" name="l_filename_delimiter_album_artist"> + <property name="sizePolicy"> + <sizepolicy hsizetype="Fixed" vsizetype="Fixed"> + <horstretch>0</horstretch> + <verstretch>0</verstretch> + </sizepolicy> + </property> + <property name="text"> + <string>TextLabel</string> + </property> + </widget> + </item> + <item> + <widget class="QLineEdit" name="le_filename_delimiter_album_artist"> + <property name="sizePolicy"> + <sizepolicy hsizetype="Preferred" vsizetype="Fixed"> + <horstretch>0</horstretch> + <verstretch>0</verstretch> + </sizepolicy> + </property> + <property name="maximumSize"> + <size> + <width>100</width> + <height>16777215</height> + </size> + </property> + </widget> + </item> + <item> + <spacer name="hs_filename_delimiter_album_artist"> + <property name="orientation"> + <enum>Qt::Orientation::Horizontal</enum> + </property> + <property name="sizeHint" stdset="0"> + <size> + <width>40</width> + <height>20</height> + </size> + </property> + </spacer> + </item> + </layout> + </item> + </layout> + </widget> + </item> + <item> + <spacer name="vs_page_delimiters"> + <property name="orientation"> + <enum>Qt::Orientation::Vertical</enum> + </property> + <property name="sizeHint" stdset="0"> + <size> + <width>20</width> + <height>40</height> + </size> + </property> + </spacer> + </item> + </layout> + </widget> + </widget> + </item> + </layout> </item> <item> <widget class="QDialogButtonBox" name="bb_dialog"> |
