File indexing completed on 2023-05-30 11:30:46

0001 /**
0002  * Copyright (C) 2004 Michael Pyne <mpyne@kde.org>
0003  *
0004  * This program is free software; you can redistribute it and/or modify it under
0005  * the terms of the GNU General Public License as published by the Free Software
0006  * Foundation; either version 2 of the License, or (at your option) any later
0007  * version.
0008  *
0009  * This program is distributed in the hope that it will be useful, but WITHOUT ANY
0010  * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A
0011  * PARTICULAR PURPOSE. See the GNU General Public License for more details.
0012  *
0013  * You should have received a copy of the GNU General Public License along with
0014  * this program.  If not, see <http://www.gnu.org/licenses/>.
0015  */
0016 
0017 #include "filerenameroptions.h"
0018 
0019 #include <KLocalizedString>
0020 
0021 #include "juk_debug.h"
0022 
0023 FileRenamerTagOptions::FileRenamerTagOptions(QWidget *parent,
0024                                              const TagRenamerOptions &options)
0025   : QWidget(parent)
0026   , Ui::FileRenamerTagOptionsBase()
0027   , m_options(options)
0028 {
0029     setupUi(this);
0030 
0031     layout()->setContentsMargins(0, 0, 0, 0);
0032 
0033     if(m_options.category() != Track)
0034         m_trackGroup->hide();
0035 
0036     QString tagText = m_options.tagTypeText();
0037 
0038     setWindowTitle(i18nc("%1 will be a music tag category like Artist or Album", "%1 Options",tagText));
0039     m_tagFormatGroup->setTitle(i18n("%1 Format",tagText));
0040     m_emptyTagGroup->setTitle(i18n("When the Track's %1 is Empty",tagText));
0041     m_description->setText(i18n("When using the file renamer your files will be renamed to the values that you have in your track's %1 tag, plus any additional text that you specify below.",tagText));
0042     m_tagLabel->setText(tagText);
0043 
0044     m_prefixText->setText(options.prefix());
0045     m_suffixText->setText(options.suffix());
0046     if(options.emptyAction() == TagRenamerOptions::ForceEmptyInclude)
0047         m_includeEmptyButton->setChecked(true);
0048     else if(options.emptyAction() == TagRenamerOptions::UseReplacementValue)
0049         m_useValueButton->setChecked(true);
0050     m_emptyTagValue->setText(options.emptyText());
0051     m_trackWidth->setValue(options.trackWidth());
0052 
0053     slotBracketsChanged();
0054     slotEmptyActionChanged();
0055     slotTrackWidthChanged();
0056 }
0057 
0058 void FileRenamerTagOptions::slotBracketsChanged()
0059 {
0060     QString tag = m_options.tagTypeText();
0061 
0062     m_options.setPrefix(m_prefixText->text());
0063     m_options.setSuffix(m_suffixText->text());
0064 
0065     m_substitution->setText(m_options.prefix() + tag + m_options.suffix());
0066 }
0067 
0068 void FileRenamerTagOptions::slotTrackWidthChanged()
0069 {
0070     int width = m_trackWidth->value();
0071 
0072     m_options.setTrackWidth(width);
0073 
0074     QString singleDigitText = m_singleDigit->text();
0075     singleDigitText.remove(" ->");
0076     QString doubleDigitText = m_doubleDigit->text();
0077     doubleDigitText.remove(" ->");
0078 
0079     if(singleDigitText.length() < width) {
0080         QString p;
0081         p.fill('0', width - singleDigitText.length());
0082         singleDigitText.prepend(p);
0083     }
0084 
0085     if(doubleDigitText.length() < width) {
0086         QString p;
0087         p.fill('0', width - doubleDigitText.length());
0088         doubleDigitText.prepend(p);
0089     }
0090 
0091     m_singleDigitExample->setText(singleDigitText);
0092     m_doubleDigitExample->setText(doubleDigitText);
0093 }
0094 
0095 void FileRenamerTagOptions::slotEmptyActionChanged()
0096 {
0097     m_options.setEmptyText(m_emptyTagValue->text());
0098     m_options.setEmptyAction(TagRenamerOptions::IgnoreEmptyTag);
0099 
0100     if(m_useValueButton->isChecked())
0101         m_options.setEmptyAction(TagRenamerOptions::UseReplacementValue);
0102     else if(m_includeEmptyButton->isChecked())
0103         m_options.setEmptyAction(TagRenamerOptions::ForceEmptyInclude);
0104 }
0105 
0106 TagOptionsDialog::TagOptionsDialog(QWidget *parent,
0107                                    const TagRenamerOptions &options,
0108                                    unsigned categoryNumber)
0109   : QDialog(parent)
0110   , m_options(options)
0111   , m_categoryNumber(categoryNumber)
0112 {
0113     setModal(true);
0114     setWindowTitle(i18n("File Renamer"));
0115 
0116     loadConfig();
0117 
0118     m_widget = new FileRenamerTagOptions(this, m_options);
0119     m_widget->setMinimumSize(400, 200);
0120 
0121     connect(m_widget->dlgButtonBox, &QDialogButtonBox::accepted,
0122             this,                   &QDialog::accept);
0123     connect(m_widget->dlgButtonBox, &QDialogButtonBox::rejected,
0124             this,                   &QDialog::reject);
0125 
0126     auto boxLayout = new QVBoxLayout(this);
0127     boxLayout->addWidget(m_widget);
0128 }
0129 
0130 void TagOptionsDialog::accept()
0131 {
0132     m_options = m_widget->options();
0133 
0134     saveConfig();
0135     QDialog::accept();
0136 }
0137 
0138 void TagOptionsDialog::loadConfig()
0139 {
0140     // Our m_options may not have been loaded from KConfig, force that to
0141     // happen.
0142 
0143     CategoryID category(m_options.category(), m_categoryNumber);
0144     m_options = TagRenamerOptions(category);
0145 }
0146 
0147 void TagOptionsDialog::saveConfig()
0148 {
0149     m_options.saveConfig(m_categoryNumber);
0150 }
0151 
0152 // vim: set et sw=4 tw=0 sta: