File indexing completed on 2024-05-05 04:51:40

0001 /*
0002     SPDX-FileCopyrightText: 1998-2009 Sebastian Trueg <trueg@k3b.org>
0003     SPDX-License-Identifier: GPL-2.0-or-later
0004 */
0005 #include "k3baudiocdtextwidget.h"
0006 #include "ui_base_k3baudiocdtextallfieldsdialog.h"
0007 
0008 #include "k3baudiodoc.h"
0009 #include "k3baudiotrack.h"
0010 #include "k3bcdtextvalidator.h"
0011 
0012 #include <KLineEdit>
0013 #include <KLocalizedString>
0014 
0015 #include <QIcon>
0016 #include <QCheckBox>
0017 #include <QToolButton>
0018 #include <QPushButton>
0019 #include <QLayout>
0020 #include <QGroupBox>
0021 
0022 
0023 class K3b::AudioCdTextWidget::AllFieldsDialog : public QDialog, public Ui::base_K3bAudioCdTextAllFieldsDialog
0024 {
0025 public:
0026     AllFieldsDialog( QWidget* parent )
0027         : QDialog( parent) {
0028         setModal(true);
0029         setWindowTitle(i18n("CD-Text"));
0030         setupUi( this );
0031     }
0032 };
0033 
0034 
0035 K3b::AudioCdTextWidget::AudioCdTextWidget( QWidget* parent )
0036     : QWidget( parent ),
0037       m_doc(0)
0038 {
0039     setupUi( this );
0040 
0041     m_allFieldsDlg = new AllFieldsDialog( this );
0042 
0043     m_buttonCopyTitle->setIcon( QIcon::fromTheme( "edit-copy" ) );
0044     m_buttonCopyPerformer->setIcon( QIcon::fromTheme( "edit-copy" ) );
0045 
0046     m_allFieldsDlg->m_buttonCopyTitle->setIcon( QIcon::fromTheme( "edit-copy" ) );
0047     m_allFieldsDlg->m_buttonCopyPerformer->setIcon( QIcon::fromTheme( "edit-copy" ) );
0048     m_allFieldsDlg->m_buttonCopySongwriter->setIcon( QIcon::fromTheme( "edit-copy" ) );
0049     m_allFieldsDlg->m_buttonCopyComposer->setIcon( QIcon::fromTheme( "edit-copy" ) );
0050     m_allFieldsDlg->m_buttonCopyArranger->setIcon( QIcon::fromTheme( "edit-copy" ) );
0051 
0052     QValidator* cdTextVal = new K3b::CdTextValidator( this );
0053     m_editTitle->setValidator( cdTextVal );
0054     m_editPerformer->setValidator( cdTextVal );
0055 
0056     m_allFieldsDlg->m_editTitle->setValidator( cdTextVal );
0057     m_allFieldsDlg->m_editPerformer->setValidator( cdTextVal );
0058     m_allFieldsDlg->m_editDisc_id->setValidator( cdTextVal );
0059     m_allFieldsDlg->m_editUpc_ean->setValidator( cdTextVal );
0060     m_allFieldsDlg->m_editMessage->setValidator( cdTextVal );
0061     m_allFieldsDlg->m_editArranger->setValidator( cdTextVal );
0062     m_allFieldsDlg->m_editSongwriter->setValidator( cdTextVal );
0063     m_allFieldsDlg->m_editComposer->setValidator( cdTextVal );
0064 
0065     connect( m_allFieldsDlg->m_buttonCopyTitle, SIGNAL(clicked()),
0066              this, SLOT(slotCopyTitle()) );
0067     connect( m_allFieldsDlg->m_buttonCopyPerformer, SIGNAL(clicked()),
0068              this, SLOT(slotCopyPerformer()) );
0069     connect( m_allFieldsDlg->m_buttonCopyArranger, SIGNAL(clicked()),
0070              this, SLOT(slotCopyArranger()) );
0071     connect( m_allFieldsDlg->m_buttonCopySongwriter, SIGNAL(clicked()),
0072              this, SLOT(slotCopySongwriter()) );
0073     connect( m_allFieldsDlg->m_buttonCopyComposer, SIGNAL(clicked()),
0074              this, SLOT(slotCopyComposer()) );
0075     connect(m_buttonCopyTitle, SIGNAL(clicked()),
0076              this, SLOT(slotCopyTitle()) );
0077     connect(m_buttonCopyPerformer, SIGNAL(clicked()),
0078              this, SLOT(slotCopyPerformer()) );
0079 
0080     connect( m_buttonMoreFields, SIGNAL(clicked()),
0081              this, SLOT(slotMoreFields()) );
0082 }
0083 
0084 
0085 K3b::AudioCdTextWidget::~AudioCdTextWidget()
0086 {
0087 }
0088 
0089 void K3b::AudioCdTextWidget::load( K3b::AudioDoc* doc )
0090 {
0091     m_doc = doc;
0092     m_groupCdText->setChecked( doc->cdText() );
0093 
0094     m_editTitle->setText( doc->title() );
0095     m_editPerformer->setText( doc->artist() );
0096 
0097     m_allFieldsDlg->m_editTitle->setText( doc->title() );
0098     m_allFieldsDlg->m_editPerformer->setText( doc->artist() );
0099     m_allFieldsDlg->m_editDisc_id->setText( doc->disc_id() );
0100     m_allFieldsDlg->m_editUpc_ean->setText( doc->upc_ean() );
0101     m_allFieldsDlg->m_editArranger->setText( doc->arranger() );
0102     m_allFieldsDlg->m_editSongwriter->setText( doc->songwriter() );
0103     m_allFieldsDlg->m_editComposer->setText( doc->composer() );
0104     m_allFieldsDlg->m_editMessage->setText( doc->cdTextMessage() );
0105 }
0106 
0107 void K3b::AudioCdTextWidget::save( K3b::AudioDoc* doc )
0108 {
0109     m_doc = doc;
0110     doc->writeCdText( m_groupCdText->isChecked() );
0111 
0112     // we save the title and artist values from the main view since
0113     // the dialog is only updated before it is shown
0114     doc->setTitle( m_editTitle->text() );
0115     doc->setArtist( m_editPerformer->text() );
0116     doc->setDisc_id( m_allFieldsDlg->m_editDisc_id->text() );
0117     doc->setUpc_ean( m_allFieldsDlg->m_editUpc_ean->text() );
0118     doc->setArranger( m_allFieldsDlg->m_editArranger->text() );
0119     doc->setSongwriter( m_allFieldsDlg->m_editSongwriter->text() );
0120     doc->setComposer( m_allFieldsDlg->m_editComposer->text() );
0121     doc->setCdTextMessage( m_allFieldsDlg->m_editMessage->text() );
0122 }
0123 
0124 
0125 void K3b::AudioCdTextWidget::slotMoreFields()
0126 {
0127     // update dlg to current state
0128     m_allFieldsDlg->m_editTitle->setText( m_editTitle->text() );
0129     m_allFieldsDlg->m_editPerformer->setText( m_editPerformer->text() );
0130 
0131     // save old settings
0132     QString title = m_allFieldsDlg->m_editTitle->text();
0133     QString performer = m_allFieldsDlg->m_editPerformer->text();
0134     QString disc_id = m_allFieldsDlg->m_editDisc_id->text();
0135     QString upc_ean = m_allFieldsDlg->m_editUpc_ean->text();
0136     QString arranger = m_allFieldsDlg->m_editArranger->text();
0137     QString songwriter = m_allFieldsDlg->m_editSongwriter->text();
0138     QString composer = m_allFieldsDlg->m_editComposer->text();
0139     QString message = m_allFieldsDlg->m_editMessage->text();
0140 
0141     m_allFieldsDlg->m_editTitle->setFocus( Qt::PopupFocusReason );
0142 
0143     // exec dlg
0144     if( m_allFieldsDlg->exec() == QDialog::Accepted ) {
0145         // accept new entries
0146         m_editTitle->setText( m_allFieldsDlg->m_editTitle->text() );
0147         m_editPerformer->setText( m_allFieldsDlg->m_editPerformer->text() );
0148     }
0149     else {
0150         // reset
0151         m_allFieldsDlg->m_editTitle->setText( title );
0152         m_allFieldsDlg->m_editPerformer->setText( performer );
0153         m_allFieldsDlg->m_editDisc_id->setText( disc_id );
0154         m_allFieldsDlg->m_editUpc_ean->setText( upc_ean );
0155         m_allFieldsDlg->m_editArranger->setText( arranger );
0156         m_allFieldsDlg->m_editSongwriter->setText( songwriter );
0157         m_allFieldsDlg->m_editComposer->setText( composer );
0158         m_allFieldsDlg->m_editMessage->setText( message );
0159     }
0160 }
0161 
0162 
0163 void K3b::AudioCdTextWidget::setChecked( bool b )
0164 {
0165     m_groupCdText->setChecked( b );
0166 }
0167 
0168 bool K3b::AudioCdTextWidget::isChecked() const
0169 {
0170     return m_groupCdText->isChecked();
0171 }
0172 
0173 
0174 void K3b::AudioCdTextWidget::slotCopyTitle()
0175 {
0176     K3b::AudioTrack* track = m_doc->firstTrack();
0177     while( track ) {
0178         track->setTitle( m_allFieldsDlg->isVisible()
0179                          ? m_allFieldsDlg->m_editTitle->text()
0180                          : m_editTitle->text() );
0181         track = track->next();
0182     }
0183 }
0184 
0185 void K3b::AudioCdTextWidget::slotCopyPerformer()
0186 {
0187     K3b::AudioTrack* track = m_doc->firstTrack();
0188     while( track ) {
0189         track->setPerformer( m_allFieldsDlg->isVisible()
0190                              ? m_allFieldsDlg->m_editPerformer->text()
0191                              : m_editPerformer->text() );
0192         track = track->next();
0193     }
0194 }
0195 
0196 void K3b::AudioCdTextWidget::slotCopyArranger()
0197 {
0198     K3b::AudioTrack* track = m_doc->firstTrack();
0199     while( track ) {
0200         track->setArranger( m_allFieldsDlg->m_editArranger->text() );
0201         track = track->next();
0202     }
0203 }
0204 
0205 void K3b::AudioCdTextWidget::slotCopySongwriter()
0206 {
0207     K3b::AudioTrack* track = m_doc->firstTrack();
0208     while( track ) {
0209         track->setSongwriter( m_allFieldsDlg->m_editSongwriter->text() );
0210         track = track->next();
0211     }
0212 }
0213 
0214 void K3b::AudioCdTextWidget::slotCopyComposer()
0215 {
0216     K3b::AudioTrack* track = m_doc->firstTrack();
0217     while( track ) {
0218         track->setComposer( m_allFieldsDlg->m_editComposer->text() );
0219         track = track->next();
0220     }
0221 }
0222 
0223 #include "moc_k3baudiocdtextwidget.cpp"